Support top-down analysis starting from package directives

This commit is contained in:
Andrey Breslav
2014-04-23 19:44:04 +04:00
parent 31e859356f
commit 9f8fd5c5ae
4 changed files with 25 additions and 1 deletions
@@ -137,5 +137,10 @@ public class JetPackageDirective extends JetReferenceExpression {
public void subtreeChanged() {
qualifiedNameCache = null;
}
@Override
public <R, D> R accept(@NotNull JetVisitor<R, D> visitor, D data) {
return visitor.visitPackageDirective(this, data);
}
}
@@ -405,4 +405,8 @@ public class JetVisitor<R, D> extends PsiElementVisitor {
public R visitEscapeStringTemplateEntry(@NotNull JetEscapeStringTemplateEntry entry, D data) {
return visitStringTemplateEntry(entry, data);
}
public R visitPackageDirective(@NotNull JetPackageDirective directive, D data) {
return visitExpression(directive, data);
}
}
@@ -401,6 +401,10 @@ public class JetVisitorVoid extends JetVisitor<Void, Void> {
super.visitEscapeStringTemplateEntry(entry, null);
}
public void visitPackageDirective(@NotNull JetPackageDirective directive) {
super.visitPackageDirective(directive, null);
}
// hidden methods
@Override
public final Void visitJetElement(@NotNull JetElement element, Void data) {
@@ -973,4 +977,10 @@ public class JetVisitorVoid extends JetVisitor<Void, Void> {
visitEscapeStringTemplateEntry(entry);
return null;
}
@Override
public Void visitPackageDirective(@NotNull JetPackageDirective directive, Void data) {
visitPackageDirective(directive);
return null;
}
}
@@ -124,7 +124,7 @@ public class LazyTopDownAnalyzer {
c.addFile(file);
DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace);
packageDirective.accept(this);
DescriptorResolver.registerFileInPackage(trace, file);
registerDeclarations(file.getDeclarations());
@@ -133,6 +133,11 @@ public class LazyTopDownAnalyzer {
}
}
@Override
public void visitPackageDirective(@NotNull JetPackageDirective directive) {
DescriptorResolver.resolvePackageHeader(directive, moduleDescriptor, trace);
}
private void visitClassOrObject(@NotNull JetClassOrObject classOrObject) {
ClassDescriptorWithResolutionScopes descriptor =
(ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(classOrObject);