checkModifiersAndAnnotationsInPackageDirectives() moved to DeclarationsChecker

This commit is contained in:
Andrey Breslav
2014-02-25 20:57:53 +04:00
parent 0243bacab0
commit 12f06d032b
2 changed files with 28 additions and 28 deletions
@@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.*;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.PsiElement;
import com.intellij.util.containers.ContainerUtil;
@@ -35,7 +34,6 @@ import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lexer.JetKeywordToken;
import org.jetbrains.jet.renderer.DescriptorRenderer;
import javax.inject.Inject;
@@ -84,7 +82,6 @@ public class DeclarationResolver {
public void process(@NotNull TopDownAnalysisContext c) {
checkModifiersAndAnnotationsInPackageDirectives(c);
resolveAnnotationConstructors(c);
resolveConstructorHeaders(c);
resolveAnnotationStubsOnClassesAndConstructors(c);
@@ -95,31 +92,6 @@ public class DeclarationResolver {
checkRedeclarationsInInnerClassNames(c);
}
private void checkModifiersAndAnnotationsInPackageDirectives(@NotNull TopDownAnalysisContext c) {
for (JetFile file : c.getFiles()) {
JetPackageDirective packageDirective = file.getPackageDirective();
if (packageDirective == null) continue;
PsiElement firstChild = packageDirective.getFirstChild();
if (!(firstChild instanceof JetModifierList)) continue;
JetModifierList modifierList = (JetModifierList) firstChild;
for (JetAnnotationEntry annotationEntry : modifierList.getAnnotationEntries()) {
JetConstructorCalleeExpression calleeExpression = annotationEntry.getCalleeExpression();
if (calleeExpression != null) {
JetReferenceExpression reference = calleeExpression.getConstructorReferenceExpression();
if (reference != null) {
trace.report(UNRESOLVED_REFERENCE.on(reference, reference));
}
}
}
for (ASTNode node : modifierList.getModifierNodes()) {
trace.report(ILLEGAL_MODIFIER.on(node.getPsi(), (JetKeywordToken) node.getElementType()));
}
}
}
private void resolveAnnotationConstructors(@NotNull TopDownAnalysisContext c) {
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : c.getClasses().entrySet()) {
JetClassOrObject classOrObject = entry.getKey();
@@ -19,6 +19,7 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.diagnostics.Errors;
@@ -47,6 +48,10 @@ public class DeclarationsChecker {
}
public void process(@NotNull BodiesResolveContext bodiesResolveContext) {
for (JetFile file : bodiesResolveContext.getFiles()) {
checkModifiersAndAnnotationsInPackageDirective(file);
}
Map<JetClassOrObject, ClassDescriptorWithResolutionScopes> classes = bodiesResolveContext.getClasses();
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : classes.entrySet()) {
JetClassOrObject classOrObject = entry.getKey();
@@ -96,6 +101,29 @@ public class DeclarationsChecker {
}
}
private void checkModifiersAndAnnotationsInPackageDirective(JetFile file) {
JetPackageDirective packageDirective = file.getPackageDirective();
if (packageDirective == null) return;
PsiElement firstChild = packageDirective.getFirstChild();
if (!(firstChild instanceof JetModifierList)) return;
JetModifierList modifierList = (JetModifierList) firstChild;
for (JetAnnotationEntry annotationEntry : modifierList.getAnnotationEntries()) {
JetConstructorCalleeExpression calleeExpression = annotationEntry.getCalleeExpression();
if (calleeExpression != null) {
JetReferenceExpression reference = calleeExpression.getConstructorReferenceExpression();
if (reference != null) {
trace.report(UNRESOLVED_REFERENCE.on(reference, reference));
}
}
}
for (ASTNode node : modifierList.getModifierNodes()) {
trace.report(ILLEGAL_MODIFIER.on(node.getPsi(), (JetKeywordToken) node.getElementType()));
}
}
private void checkSupertypesForConsistency(@NotNull ClassDescriptor classDescriptor) {
Multimap<TypeConstructor, TypeProjection> multimap = SubstitutionUtils
.buildDeepSubstitutionMultimap(classDescriptor.getDefaultType());