diff --git a/src/Libraries/NRefactory/Test/NRefactoryTests.csproj b/src/Libraries/NRefactory/Test/NRefactoryTests.csproj index 2585596823..adaabe0811 100644 --- a/src/Libraries/NRefactory/Test/NRefactoryTests.csproj +++ b/src/Libraries/NRefactory/Test/NRefactoryTests.csproj @@ -15,7 +15,7 @@ Library ..\..\..\..\bin\UnitTests\ False - AnyCPU + x86 4 v3.5 false @@ -32,6 +32,7 @@ Full true + Project False diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs index 9cf063d6e2..d4628cb0e5 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs @@ -549,11 +549,12 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver DefaultClass currentClass = GetCurrentClass(); DefaultMethod method = new DefaultMethod(methodDeclaration.Name, null, ConvertModifier(methodDeclaration.Modifier), region, bodyRegion, currentClass); - method.IsExtensionMethod = methodDeclaration.IsExtensionMethod; method.Documentation = GetDocumentation(region.BeginLine, methodDeclaration.Attributes); ConvertTemplates(methodDeclaration.Templates, method); method.ReturnType = CreateReturnType(methodDeclaration.TypeReference, method, TypeVisitor.ReturnTypeOptions.None); ConvertAttributes(methodDeclaration, method); + method.IsExtensionMethod = methodDeclaration.IsExtensionMethod + || method.Attributes.Any(att => att.AttributeType != null && att.AttributeType.FullyQualifiedName == "System.Runtime.CompilerServices.ExtensionAttribute"); if (methodDeclaration.Parameters.Count > 0) { foreach (AST.ParameterDeclarationExpression par in methodDeclaration.Parameters) { method.Parameters.Add(CreateParameter(par, method)); diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/NRefactoryAstConverterTests.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/NRefactoryAstConverterTests.cs index d71cbeff10..c87368f129 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/NRefactoryAstConverterTests.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/NRefactoryAstConverterTests.cs @@ -18,12 +18,15 @@ namespace ICSharpCode.SharpDevelop.Dom.Tests [TestFixture] public class NRefactoryAstConverterTests { - ICompilationUnit Parse(string code, SupportedLanguage language, bool referenceMscorlib) + ICompilationUnit Parse(string code, SupportedLanguage language, bool referenceMscorlib, params IProjectContent[] references) { DefaultProjectContent pc = new DefaultProjectContent(); if (referenceMscorlib) { pc.AddReferencedContent(SharedProjectContentRegistryForTests.Instance.Mscorlib); } + foreach (var reference in references) { + pc.AddReferencedContent(reference); + } NRefactoryASTConvertVisitor visitor = new NRefactoryASTConvertVisitor(pc); using (IParser p = ParserFactory.CreateParser(language, new StringReader(code))) { p.ParseMethodBodies = false; @@ -35,6 +38,11 @@ namespace ICSharpCode.SharpDevelop.Dom.Tests return visitor.Cu; } + ICompilationUnit Parse(string code, SupportedLanguage language, bool referenceMscorlib) + { + return Parse(code, language, referenceMscorlib, new IProjectContent[0]); + } + ICompilationUnit Parse(string code, SupportedLanguage language) { return Parse(code, language, false); @@ -305,5 +313,26 @@ class Outer where T1 : IDisposable { Assert.AreEqual(0, cu.Classes[0].Methods.Count); Assert.IsFalse(cu.Classes[0].DefaultReturnType.GetMethods().Any(m => m.IsConstructor)); } + + [Test] + public void VBNetIsExtensionMethodTest() + { + string code = @"Imports System.Runtime.CompilerServices + +Module StringExtensions + _ + Sub Print(s As String) + End Sub +End Module"; + ICompilationUnit cu = Parse(code, SupportedLanguage.VBNet, true, + SharedProjectContentRegistryForTests.Instance.GetProjectContentForReference("System.Core", "System.Core")); + Assert.Greater(cu.Classes.Count, 0); + Assert.AreEqual("StringExtensions", cu.Classes[0].Name); + Assert.AreEqual(ClassType.Module, cu.Classes[0].ClassType); + Assert.Greater(cu.Classes[0].Methods.Count, 0); + + Assert.IsTrue(cu.Classes[0].Methods[0].IsExtensionMethod); + Assert.AreEqual("Print", cu.Classes[0].Methods[0].Name); + } } }