From 8dd64459d57afbd5776acb4425bf9becbca220ec Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Mon, 29 Sep 2008 23:59:54 +0000 Subject: [PATCH] Fixed SD2-1384: Attribute fully qualified name using wrong namespace git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3569 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- src/Main/Base/Test/NRefactoryResolverTests.cs | 15 +++++++++++++++ .../Src/Implementations/AttributeReturnType.cs | 15 ++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) 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; + } } } }