diff --git a/src/Main/Base/Test/NRefactoryResolverTests.cs b/src/Main/Base/Test/NRefactoryResolverTests.cs index fd94a4e24e..441d4b9e06 100644 --- a/src/Main/Base/Test/NRefactoryResolverTests.cs +++ b/src/Main/Base/Test/NRefactoryResolverTests.cs @@ -2468,5 +2468,20 @@ End Module"; result = ResolveVB(program, "ITest", 5, 40, ExpressionContext.Type); Assert.AreEqual("RootNamespace.ITest", result.ResolvedClass.FullyQualifiedName); } + + [Test] + public void SD2_1384() + { + string program = @"using System; +class Flags { + [Flags] + enum Test { } +}"; + TypeResolveResult result = Resolve(program, "Flags.Test", 3, 1, ExpressionContext.Type); + Assert.AreEqual("Flags.Test", result.ResolvedClass.FullyQualifiedName); + + IReturnType rt = result.ResolvedClass.Attributes[0].AttributeType; + Assert.AreEqual("System.FlagsAttribute", rt.FullyQualifiedName); + } } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/AttributeReturnType.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/AttributeReturnType.cs index 14f034406b..79bae7d521 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/AttributeReturnType.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/AttributeReturnType.cs @@ -6,6 +6,7 @@ // using System; +using System.Linq; namespace ICSharpCode.SharpDevelop.Dom { @@ -32,10 +33,18 @@ namespace ICSharpCode.SharpDevelop.Dom public override IReturnType BaseType { get { - if (scrt1.GetUnderlyingClass() != null) - return scrt1; - else + IClass class1 = scrt1.GetUnderlyingClass(); + IClass class2 = scrt1.GetUnderlyingClass(); + if (class1 != null && class2 != null) { + if (class1.ClassInheritanceTree.Any(c => c.FullyQualifiedName == "System.Attribute")) + return scrt1; + else + return scrt2; + } else if (class2 != null) { return scrt2; + } else { + return scrt1; + } } } }