diff --git a/compiler/testData/renderer/Classes.kt b/compiler/testData/renderer/Classes.kt index 28340c70762..a7af8495f9f 100644 --- a/compiler/testData/renderer/Classes.kt +++ b/compiler/testData/renderer/Classes.kt @@ -1,9 +1,10 @@ package rendererTest annotation class TheAnnotation +annotation class AnotherAnnotation [TheAnnotation] -public open class TheClass { +public open class TheClass [AnotherAnnotation] () { private val privateVal: Int = 5 val shouldBeFinal: Int = 5 @@ -31,8 +32,10 @@ public trait TwoUpperBounds where T : Number, T : Any //package rendererTest //internal final annotation class TheAnnotation : kotlin.Annotation defined in rendererTest //public constructor TheAnnotation() defined in rendererTest.TheAnnotation +//internal final annotation class AnotherAnnotation : kotlin.Annotation defined in rendererTest +//public constructor AnotherAnnotation() defined in rendererTest.AnotherAnnotation //rendererTest.TheAnnotation public open class TheClass defined in rendererTest -//public constructor TheClass() defined in rendererTest.TheClass +//rendererTest.AnotherAnnotation public constructor TheClass() defined in rendererTest.TheClass // defined in rendererTest.TheClass // defined in rendererTest.TheClass //private final val privateVal: kotlin.Int defined in rendererTest.TheClass diff --git a/idea/ide-lazy-resolve/src/org/jetbrains/jet/lang/resolve/lazy/ElementResolver.java b/idea/ide-lazy-resolve/src/org/jetbrains/jet/lang/resolve/lazy/ElementResolver.java index e012f80a999..fe63c2e7cdc 100644 --- a/idea/ide-lazy-resolve/src/org/jetbrains/jet/lang/resolve/lazy/ElementResolver.java +++ b/idea/ide-lazy-resolve/src/org/jetbrains/jet/lang/resolve/lazy/ElementResolver.java @@ -234,10 +234,10 @@ public abstract class ElementResolver { private static void annotationAdditionalResolve(ResolveSession resolveSession, JetAnnotationEntry jetAnnotationEntry) { Annotations annotations = null; - JetDeclaration declaration = PsiTreeUtil.getParentOfType(jetAnnotationEntry, JetDeclaration.class); + JetModifierList modifierList = PsiTreeUtil.getParentOfType(jetAnnotationEntry, JetModifierList.class); + JetDeclaration declaration = PsiTreeUtil.getParentOfType(modifierList, JetDeclaration.class); if (declaration != null) { - Annotated descriptor = resolveSession.resolveToDescriptor(declaration); - annotations = descriptor.getAnnotations(); + annotations = getAnnotationsByDeclaration(resolveSession, modifierList, declaration); } else { JetFileAnnotationList fileAnnotationList = PsiTreeUtil.getParentOfType(jetAnnotationEntry, JetFileAnnotationList.class); @@ -252,6 +252,20 @@ public abstract class ElementResolver { } } + private static Annotations getAnnotationsByDeclaration( + ResolveSession resolveSession, + JetModifierList modifierList, + JetDeclaration declaration + ) { + Annotations annotations;Annotated descriptor = resolveSession.resolveToDescriptor(declaration); + if (declaration instanceof JetClass && modifierList == ((JetClass) declaration).getPrimaryConstructorModifierList()) { + descriptor = ((ClassDescriptor)descriptor).getUnsubstitutedPrimaryConstructor(); + assert descriptor != null : "No constructor found: " + declaration.getText(); + } + annotations = descriptor.getAnnotations(); + return annotations; + } + private static void typeParameterAdditionalResolve(KotlinCodeAnalyzer analyzer, JetTypeParameter typeParameter) { DeclarationDescriptor descriptor = analyzer.resolveToDescriptor(typeParameter); assert descriptor instanceof LazyEntity;