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);
+ }
}
}