diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/InferredReturnType.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/InferredReturnType.cs index b01c869286..9e9ccf779d 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/InferredReturnType.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/InferredReturnType.cs @@ -51,7 +51,7 @@ namespace Grunwald.BooBinding.CodeCompletion if (useLastStatementIfNoReturnStatement && v.lastExpressionStatement != null) { cachedType = new BooResolver().GetTypeOfExpression(v.lastExpressionStatement.Expression, context); } else { - cachedType = VoidReturnType.Instance; + cachedType = ParserService.CurrentProjectContent.SystemTypes.Void; } } else if (v.result is NullReturnType) { cachedType = ConvertVisitor.GetDefaultReturnType(ParserService.CurrentProjectContent); @@ -85,7 +85,7 @@ namespace Grunwald.BooBinding.CodeCompletion { noReturnStatement = false; if (node.Expression == null) { - result = VoidReturnType.Instance; + result = ParserService.CurrentProjectContent.SystemTypes.Void; } else { result = new BooResolver().GetTypeOfExpression(node.Expression, context); } diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/NamespaceContentsAddedToCtrlSpaceTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/NamespaceContentsAddedToCtrlSpaceTestFixture.cs index 644274a62c..1e59a492d6 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/NamespaceContentsAddedToCtrlSpaceTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/NamespaceContentsAddedToCtrlSpaceTestFixture.cs @@ -35,7 +35,7 @@ namespace PythonBinding.Tests.Resolver ParseInformation parseInfo = new ParseInformation(); mockProjectContent = new MockProjectContent(); mockProjectContent.NamespacesToAdd.Add("Test"); - myTestClass = new MockClass("MyTestClass"); + myTestClass = new MockClass(mockProjectContent, "MyTestClass"); mockProjectContent.NamespaceContentsToReturn.Add(myTestClass); DefaultCompilationUnit cu = new DefaultCompilationUnit(mockProjectContent) { ErrorsDuringCompile = true }; diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleTestFixture.cs index 424568375a..a82c9680bc 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleTestFixture.cs @@ -41,7 +41,7 @@ namespace PythonBinding.Tests.Resolver // type is not fully qualified with its namespace. mockProjectContent.ClassToReturnFromGetClass = null; - systemConsoleClass = new MockClass("System.Console"); + systemConsoleClass = new MockClass(mockProjectContent, "System.Console"); mockProjectContent.ClassesInProjectContent.Add(systemConsoleClass); compilationUnit = new DefaultCompilationUnit(mockProjectContent) { ErrorsDuringCompile = true }; @@ -56,7 +56,7 @@ namespace PythonBinding.Tests.Resolver ExpressionResult expressionResult = new ExpressionResult("Console", new DomRegion(3, 7), null, null); resolveResult = resolver.Resolve(expressionResult, parseInfo, python); } - + [Test] public void IsTypeResolveResult() { diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleWriteLineTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleWriteLineTestFixture.cs index c068ea4f70..8e9ffb2911 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleWriteLineTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleWriteLineTestFixture.cs @@ -36,7 +36,7 @@ namespace PythonBinding.Tests.Resolver ParseInformation parseInfo = new ParseInformation(); mockProjectContent = new MockProjectContent(); - systemConsoleClass = new MockClass("System.Console"); + systemConsoleClass = new MockClass(mockProjectContent, "System.Console"); mockProjectContent.ClassToReturnFromGetClass = systemConsoleClass; mockProjectContent.ClassNameForGetClass = "Console"; diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalClassInstanceTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalClassInstanceTestFixture.cs index bbd259c7a3..f575e14fe6 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalClassInstanceTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalClassInstanceTestFixture.cs @@ -36,10 +36,9 @@ namespace PythonBinding.Tests.Resolver { resolver = new PythonResolver(); - testClass = new MockClass("Test.Test1"); - ParseInformation parseInfo = new ParseInformation(); mockProjectContent = new MockProjectContent(); + testClass = new MockClass(mockProjectContent, "Test.Test1"); mockProjectContent.ClassesInProjectContent.Add(testClass); mockProjectContent.ClassToReturnFromGetClass = testClass; mockProjectContent.ClassNameForGetClass = "Test.Test1"; diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemConsoleTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemConsoleTestFixture.cs index 054eb3e176..c93b87c6b3 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemConsoleTestFixture.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveSystemConsoleTestFixture.cs @@ -37,7 +37,7 @@ namespace PythonBinding.Tests.Resolver ParseInformation parseInfo = new ParseInformation(); mockProjectContent = new MockProjectContent(); - systemConsoleClass = new MockClass("System.Console"); + systemConsoleClass = new MockClass(mockProjectContent, "System.Console"); mockProjectContent.ClassToReturnFromGetClass = systemConsoleClass; compilationUnit = CreateCompilationUnit(mockProjectContent); diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockClass.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockClass.cs index 7ed6cb8baa..f3dce124e0 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockClass.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockClass.cs @@ -23,8 +23,8 @@ namespace PythonBinding.Tests.Utils { } - public MockClass(string name) - : base(DefaultCompilationUnit.DummyCompilationUnit, name) + public MockClass(IProjectContent pc, string name) + : base(new DefaultCompilationUnit(pc), name) { } } diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockProjectContent.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockProjectContent.cs index 47ca90ed1e..72cde6d511 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockProjectContent.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockProjectContent.cs @@ -176,13 +176,13 @@ namespace PythonBinding.Tests.Utils public XmlDoc XmlDoc { get { - throw new NotImplementedException(); + return null; } } public bool IsUpToDate { get { - throw new NotImplementedException(); + return true; } } @@ -214,19 +214,19 @@ namespace PythonBinding.Tests.Utils public object Project { get { - throw new NotImplementedException(); + return null; } } public SystemTypes SystemTypes { get { - throw new NotImplementedException(); + return new SystemTypes(this); } } public string GetXmlDocumentation(string memberTag) { - throw new NotImplementedException(); + return null; } public void AddClassToNamespaceList(IClass addClass) @@ -274,7 +274,7 @@ namespace PythonBinding.Tests.Utils public IClass GetClass(string typeName, int typeParameterCount, LanguageProperties language, bool lookInReferences) { - throw new NotImplementedException(); + return GetClass(typeName, typeParameterCount); } public bool NamespaceExists(string name, LanguageProperties language, bool lookInReferences) diff --git a/src/Main/Base/Test/NRefactoryResolverTests.cs b/src/Main/Base/Test/NRefactoryResolverTests.cs index 75e790b76a..fd94a4e24e 100644 --- a/src/Main/Base/Test/NRefactoryResolverTests.cs +++ b/src/Main/Base/Test/NRefactoryResolverTests.cs @@ -457,7 +457,8 @@ class A { "; ResolveResult result = Resolve(program, "TestMethod()", 4); Assert.IsNotNull(result); - Assert.AreSame(VoidReturnType.Instance, result.ResolvedType, result.ResolvedType.ToString()); + Assert.AreEqual(result.CallingClass.ProjectContent.SystemTypes.Void, + result.ResolvedType, result.ResolvedType.ToString()); Assert.AreEqual(0, result.GetCompletionData(lastPC).Count); } diff --git a/src/Main/Base/Test/ReflectionLayerTests.cs b/src/Main/Base/Test/ReflectionLayerTests.cs index 8dbb7f1b7f..82f286fa77 100644 --- a/src/Main/Base/Test/ReflectionLayerTests.cs +++ b/src/Main/Base/Test/ReflectionLayerTests.cs @@ -191,7 +191,7 @@ namespace ICSharpCode.SharpDevelop.Tests { IClass c = pc.GetClass("System.Void", 0); Assert.IsNotNull(c, "System.Void not found"); - Assert.AreSame(c.DefaultReturnType, VoidReturnType.Instance, "VoidReturnType.Instance is c.DefaultReturnType"); + Assert.AreSame(c.DefaultReturnType, pc.SystemTypes.Void, "pc.SystemTypes.Void is c.DefaultReturnType"); } public class TestClass where A : B { diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs index 45d8340ed5..889f1b6a45 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs @@ -69,7 +69,7 @@ namespace ICSharpCode.SharpDevelop.Dom } if (type == null) { LoggingService.Warn("CecilReader: Null type for: " + member); - return VoidReturnType.Instance; + return new VoidReturnType(pc); } if (type is ReferenceType) { // TODO: Use ByRefRefReturnType diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CtrlSpaceResolveHelper.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CtrlSpaceResolveHelper.cs index d7dce1c459..2f31ce0dd1 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CtrlSpaceResolveHelper.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CtrlSpaceResolveHelper.cs @@ -191,7 +191,8 @@ namespace ICSharpCode.SharpDevelop.Dom bool supportsExtensionProperties = language.SupportsExtensionProperties; if (supportsExtensionMethods || supportsExtensionProperties) { ArrayList list = new ArrayList(); - IMethod dummyMethod = new DefaultMethod("dummy", VoidReturnType.Instance, ModifierEnum.Static, DomRegion.Empty, DomRegion.Empty, callingClass); + IMethod dummyMethod = new DefaultMethod("dummy", callingClass.ProjectContent.SystemTypes.Void, + ModifierEnum.Static, DomRegion.Empty, DomRegion.Empty, callingClass); CtrlSpaceResolveHelper.AddContentsFromCalling(list, callingClass, dummyMethod); CtrlSpaceResolveHelper.AddImportedNamespaceContents(list, callingClass.CompilationUnit, callingClass); diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/SystemTypes.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/SystemTypes.cs index eeb60906b7..d74838e33b 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/SystemTypes.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/SystemTypes.cs @@ -12,7 +12,7 @@ namespace ICSharpCode.SharpDevelop.Dom { public class SystemTypes { - public readonly IReturnType Void = VoidReturnType.Instance; + public readonly IReturnType Void; public readonly IReturnType Object; public readonly IReturnType Delegate; public readonly IReturnType ValueType; @@ -36,6 +36,7 @@ namespace ICSharpCode.SharpDevelop.Dom public SystemTypes(IProjectContent pc) { this.pc = pc; + Void = new VoidReturnType(pc); Object = CreateFromName("System.Object"); Delegate = CreateFromName("System.Delegate"); ValueType = CreateFromName("System.ValueType"); @@ -62,7 +63,7 @@ namespace ICSharpCode.SharpDevelop.Dom return c.DefaultReturnType; } else { LoggingService.Warn("SystemTypes.CreateFromName could not find " + name); - return VoidReturnType.Instance; + return Void; } } @@ -78,36 +79,39 @@ namespace ICSharpCode.SharpDevelop.Dom } } - internal sealed class VoidClass : DefaultClass + public sealed class VoidClass : DefaultClass { internal static readonly string VoidName = typeof(void).FullName; - public static readonly VoidClass Instance = new VoidClass(); - private VoidClass() - : base(DefaultCompilationUnit.DummyCompilationUnit, VoidName) + public VoidClass(IProjectContent pc) + : base(new DefaultCompilationUnit(pc), VoidName) { + this.ClassType = ClassType.Struct; this.Modifiers = ModifierEnum.Public | ModifierEnum.Sealed; Freeze(); } protected override IReturnType CreateDefaultReturnType() { - return VoidReturnType.Instance; + return ProjectContent.SystemTypes.Void; } } public sealed class VoidReturnType : AbstractReturnType { - public static readonly VoidReturnType Instance = new VoidReturnType(); + IProjectContent pc; - private VoidReturnType() + public VoidReturnType(IProjectContent pc) { + if (pc == null) + throw new ArgumentNullException("pc"); + this.pc = pc; FullyQualifiedName = VoidClass.VoidName; } public override IClass GetUnderlyingClass() { - return VoidClass.Instance; + return pc.GetClass("System.Void", 0, LanguageProperties.CSharp, true); } public override List GetMethods() diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs index 272436df11..ada1ec87b4 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs @@ -134,7 +134,7 @@ namespace ICSharpCode.SharpDevelop.Dom IClass voidClass = GetClassInternal(VoidClass.VoidName, 0, Language); if (voidClass != null) { RemoveClass(voidClass); - AddClassToNamespaceList(VoidClass.Instance); + AddClassToNamespaceList(new VoidClass(this)); } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs index b290cacd2f..f8ebc0631d 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs @@ -653,7 +653,7 @@ namespace ICSharpCode.SharpDevelop.Dom case NullRTReferenceCode: return null; case VoidRTCode: - return VoidReturnType.Instance; + return new VoidReturnType(pc); case PointerRTCode: return new PointerReturnType(ReadType()); default: