Browse Source

Mark service interfaces with [SDService].

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
77c118ec71
  1. 2
      src/Main/Base/Project/Src/Editor/IEditorControlService.cs
  2. 1
      src/Main/Base/Project/Src/Gui/IWorkbench.cs
  3. 1
      src/Main/Base/Project/Src/Services/File/IFileService.cs
  4. 3
      src/Main/Base/Project/Src/Services/IMessageLoop.cs
  5. 1
      src/Main/Base/Project/Src/Services/ParserService/IAssemblyParserService.cs
  6. 2
      src/Main/Base/Project/Src/Services/ParserService/IGlobalAssemblyCacheService.cs
  7. 1
      src/Main/Base/Project/Src/Services/ParserService/IParserService.cs
  8. 1
      src/Main/Base/Project/Src/Services/StatusBar/StatusBarService.cs
  9. 2
      src/Main/Core/Project/ICSharpCode.Core.csproj
  10. 1
      src/Main/Core/Project/Src/AddInTree/IAddInTree.cs
  11. 2
      src/Main/Core/Project/Src/Services/AnalyticsMonitorService.cs
  12. 1
      src/Main/Core/Project/Src/Services/ApplicationStateInfoService.cs
  13. 62
      src/Main/Core/Project/Src/Services/FallbackServiceAttribute.cs
  14. 2
      src/Main/Core/Project/Src/Services/LoggingService/ILoggingService.cs
  15. 2
      src/Main/Core/Project/Src/Services/MessageService/IMessageService.cs
  16. 1
      src/Main/Core/Project/Src/Services/PropertyService/IPropertyService.cs
  17. 4
      src/Main/Core/Project/Src/Services/ResourceService/IResourceService.cs
  18. 52
      src/Main/Core/Project/Src/Services/SDServiceAttribute.cs

2
src/Main/Base/Project/Src/Editor/IEditorControlService.cs

@ -11,7 +11,7 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -11,7 +11,7 @@ namespace ICSharpCode.SharpDevelop.Editor
/// <summary>
/// Allows creating new text editor instances and accessing the default text editor options.
/// </summary>
[FallbackService(typeof(EditorControlServiceFallback))]
[SDService(FallbackImplementation = typeof(EditorControlServiceFallback))]
public interface IEditorControlService
{
ITextEditor CreateEditor(out object control);

1
src/Main/Base/Project/Src/Gui/IWorkbench.cs

@ -14,6 +14,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -14,6 +14,7 @@ namespace ICSharpCode.SharpDevelop.Gui
/// <summary>
/// This is the basic interface to the workspace.
/// </summary>
[SDService]
public interface IWorkbench : IMementoCapable
{
/// <summary>

1
src/Main/Base/Project/Src/Services/File/IFileService.cs

@ -15,6 +15,7 @@ namespace ICSharpCode.SharpDevelop @@ -15,6 +15,7 @@ namespace ICSharpCode.SharpDevelop
/// <summary>
/// File service.
/// </summary>
[SDService]
public interface IFileService
{
#region Options

3
src/Main/Base/Project/Src/Services/IMessageLoop.cs

@ -7,11 +7,14 @@ using System.Threading; @@ -7,11 +7,14 @@ using System.Threading;
using System.Threading.Tasks;
using System.Windows.Threading;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop
{
/// <summary>
/// Represents a thread running a message loop.
/// </summary>
[SDService]
public interface IMessageLoop
{
/// <summary>

1
src/Main/Base/Project/Src/Services/ParserService/IAssemblyParserService.cs

@ -13,6 +13,7 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -13,6 +13,7 @@ namespace ICSharpCode.SharpDevelop.Parser
/// <summary>
/// Portions of parser service that deal with loading external assemblies for code completion.
/// </summary>
[SDService]
public interface IAssemblyParserService
{
IUnresolvedAssembly GetAssembly(FileName fileName, CancellationToken cancellationToken = default(CancellationToken));

2
src/Main/Base/Project/Src/Services/ParserService/IGlobalAssemblyCacheService.cs

@ -3,12 +3,14 @@ @@ -3,12 +3,14 @@
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Parser
{
/// <summary>
/// Interface for global assembly cache service.
/// </summary>
[SDService]
public interface IGlobalAssemblyCacheService
{
/// <summary>

1
src/Main/Base/Project/Src/Services/ParserService/IParserService.cs

@ -21,6 +21,7 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -21,6 +21,7 @@ namespace ICSharpCode.SharpDevelop.Parser
/// <summary>
/// Manages parse runs and caches ParseInformation.
/// </summary>
[SDService]
public interface IParserService
{
/// <summary>

1
src/Main/Base/Project/Src/Services/StatusBar/StatusBarService.cs

@ -11,6 +11,7 @@ using ICSharpCode.Core; @@ -11,6 +11,7 @@ using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Gui
{
[SDService]
public interface IStatusBarService
{
//bool Visible { get; set; }

2
src/Main/Core/Project/ICSharpCode.Core.csproj

@ -107,7 +107,7 @@ @@ -107,7 +107,7 @@
<Compile Include="Src\ExtensionMethods.cs" />
<Compile Include="Src\Services\AnalyticsMonitorService.cs" />
<Compile Include="Src\Services\ApplicationStateInfoService.cs" />
<Compile Include="Src\Services\FallbackServiceAttribute.cs" />
<Compile Include="Src\Services\SDServiceAttribute.cs" />
<Compile Include="Src\Services\FileUtility\FileName.cs" />
<Compile Include="Src\Services\FileUtility\FileNameEventHandler.cs" />
<Compile Include="Src\Services\FileUtility\FileUtility.cs" />

1
src/Main/Core/Project/Src/AddInTree/IAddInTree.cs

@ -7,6 +7,7 @@ using System.Collections.Generic; @@ -7,6 +7,7 @@ using System.Collections.Generic;
namespace ICSharpCode.Core
{
[SDService]
public interface IAddInTree
{
/// <summary>

2
src/Main/Core/Project/Src/Services/AnalyticsMonitorService.cs

@ -9,7 +9,7 @@ namespace ICSharpCode.Core @@ -9,7 +9,7 @@ namespace ICSharpCode.Core
/// Interface for AnalyticsMonitorService.
/// </summary>
/// <remarks>Implementations of this interface must be thread-safe.</remarks>
[FallbackService(typeof(AnalyticsMonitorFallback))]
[SDService(FallbackImplementation = typeof(AnalyticsMonitorFallback))]
public interface IAnalyticsMonitor
{
/// <summary>

1
src/Main/Core/Project/Src/Services/ApplicationStateInfoService.cs

@ -12,6 +12,7 @@ namespace ICSharpCode.Core @@ -12,6 +12,7 @@ namespace ICSharpCode.Core
/// This service is used to summarize important information
/// about the state of the application when an exception occurs.
/// </summary>
[SDService]
public class ApplicationStateInfoService
{
readonly Dictionary<string, Func<object>> stateGetters = new Dictionary<string, Func<object>>(StringComparer.InvariantCulture);

62
src/Main/Core/Project/Src/Services/FallbackServiceAttribute.cs

@ -1,62 +0,0 @@ @@ -1,62 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
namespace ICSharpCode.Core
{
/// <summary>
/// Used on a service interface to indicate the default implementation.
/// </summary>
[AttributeUsage(AttributeTargets.Interface, Inherited=false)]
public class FallbackServiceAttribute : Attribute
{
readonly string assemblyQualifiedName;
readonly Type fallbackServiceType;
public FallbackServiceAttribute(Type fallbackServiceType)
{
if (fallbackServiceType == null)
throw new ArgumentNullException("fallbackServiceType");
this.fallbackServiceType = fallbackServiceType;
}
public FallbackServiceAttribute(string assemblyQualifiedName)
{
if (assemblyQualifiedName == null)
throw new ArgumentNullException("assemblyQualifiedName");
this.assemblyQualifiedName = assemblyQualifiedName;
}
public string AssemblyQualifiedName {
get { return assemblyQualifiedName ?? fallbackServiceType.AssemblyQualifiedName; }
}
public Type FallbackServiceType {
get { return fallbackServiceType ?? Type.GetType(assemblyQualifiedName); }
}
}
sealed class FallbackServiceProvider : IServiceProvider
{
Dictionary<Type, object> fallbackServiceDict = new Dictionary<Type, object>();
public object GetService(Type serviceType)
{
object instance;
lock (fallbackServiceDict) {
if (!fallbackServiceDict.TryGetValue(serviceType, out instance)) {
var attr = serviceType.GetCustomAttributes(typeof(FallbackServiceAttribute), false);
if (attr.Length == 1) {
instance = Activator.CreateInstance(((FallbackServiceAttribute)attr[0]).FallbackServiceType);
} else {
instance = null;
}
fallbackServiceDict.Add(serviceType, instance);
}
}
return instance;
}
}
}

2
src/Main/Core/Project/Src/Services/LoggingService/ILoggingService.cs

@ -6,7 +6,7 @@ using ICSharpCode.Core.Implementation; @@ -6,7 +6,7 @@ using ICSharpCode.Core.Implementation;
namespace ICSharpCode.Core
{
[FallbackService(typeof(FallbackLoggingService))]
[SDService(FallbackImplementation = typeof(FallbackLoggingService))]
public interface ILoggingService
{
void Debug(object message);

2
src/Main/Core/Project/Src/Services/MessageService/IMessageService.cs

@ -9,7 +9,7 @@ namespace ICSharpCode.Core @@ -9,7 +9,7 @@ namespace ICSharpCode.Core
/// <summary>
/// Interface for the MessageService.
/// </summary>
[FallbackService(typeof(FallbackMessageService))]
[SDService(FallbackImplementation = typeof(FallbackMessageService))]
public interface IMessageService
{
/// <summary>

1
src/Main/Core/Project/Src/Services/PropertyService/IPropertyService.cs

@ -11,6 +11,7 @@ namespace ICSharpCode.Core @@ -11,6 +11,7 @@ namespace ICSharpCode.Core
/// <summary>
/// The property service.
/// </summary>
[SDService]
public interface IPropertyService : INotifyPropertyChanged
{
/// <summary>

4
src/Main/Core/Project/Src/Services/ResourceService/IResourceService.cs

@ -10,7 +10,7 @@ namespace ICSharpCode.Core @@ -10,7 +10,7 @@ namespace ICSharpCode.Core
/// <summary>
/// Provides string and bitmap resources.
/// </summary>
[FallbackService(typeof(DummyResourceService))]
[SDService(FallbackImplementation = typeof(FallbackResourceService))]
public interface IResourceService
{
/// <summary>
@ -59,7 +59,7 @@ namespace ICSharpCode.Core @@ -59,7 +59,7 @@ namespace ICSharpCode.Core
void RegisterNeutralImages(ResourceManager imageManager);
}
sealed class DummyResourceService : IResourceService
sealed class FallbackResourceService : IResourceService
{
event EventHandler IResourceService.LanguageChanged { add {} remove {} }

52
src/Main/Core/Project/Src/Services/SDServiceAttribute.cs

@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
namespace ICSharpCode.Core
{
/// <summary>
/// Specifies that the interface is a SharpDevelop service that is accessible via <c>SD.Services</c>.
/// </summary>
/// <remarks>
/// This attribute is mostly intended as documentation, so that it is easily possible to see
/// if a given service is globally available in SharpDevelop.
/// </remarks>
[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class, Inherited=false)]
public class SDServiceAttribute : Attribute
{
/// <summary>
/// The class that implements the interface and serves as a fallback service
/// in case no real implementation is registered.
/// </summary>
/// <remarks>
/// This property is also useful for unit tests, as there usually is no real service instance when testing.
/// </remarks>
public Type FallbackImplementation { get; set; }
}
sealed class FallbackServiceProvider : IServiceProvider
{
Dictionary<Type, object> fallbackServiceDict = new Dictionary<Type, object>();
public object GetService(Type serviceType)
{
object instance;
lock (fallbackServiceDict) {
if (!fallbackServiceDict.TryGetValue(serviceType, out instance)) {
var attrs = serviceType.GetCustomAttributes(typeof(SDServiceAttribute), false);
if (attrs.Length == 1) {
var attr = (SDServiceAttribute)attrs[0];
if (attr.FallbackImplementation != null) {
instance = Activator.CreateInstance(attr.FallbackImplementation);
}
}
// store null if no fallback implementation exists
fallbackServiceDict.Add(serviceType, instance);
}
}
return instance;
}
}
}
Loading…
Cancel
Save