From 2bf83977f893914bd28567fae43cf207730b1fc5 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 26 Jan 2012 14:06:26 +0400 Subject: [PATCH] Proper resolution order for annotation constructors --- .../jet/lang/resolve/DeclarationResolver.java | 27 ++++++++++--------- .../lang/resolve/TypeHierarchyResolver.java | 18 ------------- 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index ddaa26a1902..517f1ad2493 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -2,7 +2,6 @@ package org.jetbrains.jet.lang.resolve; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; @@ -11,7 +10,6 @@ import java.util.List; import java.util.Map; import static org.jetbrains.jet.lang.diagnostics.Errors.CONSTRUCTOR_IN_TRAIT; -import static org.jetbrains.jet.lang.resolve.BindingContext.ANNOTATION; /** * @author abreslav @@ -45,20 +43,23 @@ public class DeclarationResolver { } private void resolveAnnotationStubsOnClassesAndConstructors() { + AnnotationResolver annotationResolver = new AnnotationResolver(context.getSemanticServices(), context.getTrace()); for (Map.Entry entry : context.getClasses().entrySet()) { JetClass jetClass = entry.getKey(); - MutableClassDescriptor mutableClassDescriptor = entry.getValue(); + MutableClassDescriptor descriptor = entry.getValue(); + resolveAnnotationsForClassOrObject(annotationResolver, jetClass, descriptor); + } + for (Map.Entry entry : context.getObjects().entrySet()) { + JetObjectDeclaration objectDeclaration = entry.getKey(); + MutableClassDescriptor descriptor = entry.getValue(); + resolveAnnotationsForClassOrObject(annotationResolver, objectDeclaration, descriptor); + } + } - JetModifierList modifierList = jetClass.getModifierList(); - if (modifierList != null) { - List annotationEntries = modifierList.getAnnotationEntries(); - for (JetAnnotationEntry annotationEntry : annotationEntries) { - AnnotationDescriptor annotationDescriptor = context.getTrace().get(ANNOTATION, annotationEntry); - if (annotationDescriptor != null) { - annotationResolver.resolveAnnotationStub(mutableClassDescriptor.getScopeForSupertypeResolution(), annotationEntry, annotationDescriptor); - } - } - } + private void resolveAnnotationsForClassOrObject(AnnotationResolver annotationResolver, JetClassOrObject jetClass, MutableClassDescriptor descriptor) { + JetModifierList modifierList = jetClass.getModifierList(); + if (modifierList != null) { + descriptor.getAnnotations().addAll(annotationResolver.resolveAnnotations(descriptor.getScopeForSupertypeResolution(), modifierList.getAnnotationEntries())); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java index 435f510354d..d28a08311ad 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -54,8 +54,6 @@ public class TypeHierarchyResolver { // At this point, there are no loops in the type hierarchy - resolveAnnotations(); - checkSupertypesForConsistency(); // computeSuperclasses(); @@ -366,22 +364,6 @@ public class TypeHierarchyResolver { } } - private void resolveAnnotations() { - AnnotationResolver annotationResolver = new AnnotationResolver(context.getSemanticServices(), context.getTrace()); - for (Map.Entry entry : context.getClasses().entrySet()) { - JetClass jetClass = entry.getKey(); - MutableClassDescriptor descriptor = entry.getValue(); - JetModifierList modifierList = jetClass.getModifierList(); - if (modifierList != null) { - descriptor.getAnnotations().addAll(annotationResolver.resolveAnnotations(descriptor.getScopeForSupertypeResolution(), modifierList.getAnnotationEntries())); - } - } - for (Map.Entry entry : context.getObjects().entrySet()) { - JetObjectDeclaration objectDeclaration = entry.getKey(); - MutableClassDescriptor descriptor = entry.getValue(); - } - } - private void checkSupertypesForConsistency() { for (MutableClassDescriptor mutableClassDescriptor : topologicalOrder) { Multimap multimap = TypeUtils.buildDeepSubstitutionMultimap(mutableClassDescriptor.getDefaultType());