From 5c7c4942353bea86ea8345490dc6ec5fa38cf38f Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 19 Feb 2014 15:51:47 +0400 Subject: [PATCH] Package directives resolved in lazy TDA --- .../jet/lang/resolve/DescriptorResolver.java | 23 ++++++++++++++++++- .../jet/lang/resolve/TopDownAnalyzer.java | 3 +++ .../lang/resolve/TypeHierarchyResolver.java | 13 ++--------- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index e90b07ed5c2..2a32153d0e6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.constants.IntegerValueTypeConstant; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScopeUtils; @@ -54,6 +55,8 @@ import java.util.*; import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lang.resolve.BindingContext.CONSTRUCTOR; +import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET; +import static org.jetbrains.jet.lang.resolve.BindingContext.RESOLUTION_SCOPE; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*; import static org.jetbrains.jet.lang.resolve.ModifiersChecker.*; import static org.jetbrains.jet.lexer.JetTokens.OVERRIDE_KEYWORD; @@ -1408,4 +1411,22 @@ public class DescriptorResolver { } } } -} + + public static void resolvePackageHeader( + @NotNull JetPackageDirective packageDirective, + @NotNull ModuleDescriptor module, + @NotNull BindingTrace trace + ) { + for (JetSimpleNameExpression nameExpression : packageDirective.getPackageNames()) { + FqName fqName = packageDirective.getFqName(nameExpression); + + PackageViewDescriptor packageView = module.getPackage(fqName); + assert packageView != null : "package not found: " + fqName; + trace.record(REFERENCE_TARGET, nameExpression, packageView); + + PackageViewDescriptor parentPackageView = packageView.getContainingDeclaration(); + assert parentPackageView != null : "package has no parent: " + packageView; + trace.record(RESOLUTION_SCOPE, nameExpression, parentPackageView.getMemberScope()); + } + } +} \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index 3f82a9ce497..78df03a3ab5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -165,6 +165,9 @@ public class TopDownAnalyzer { scriptHeaderResolver.processScriptHierarchy(c, script, resolveSession.getScopeProvider().getFileScope(file)); } else { + JetPackageDirective packageDirective = file.getPackageDirective(); + assert packageDirective != null : "No package in a non-script file: " + file; + DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace); registerDeclarations(file.getDeclarations()); } } 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 1d3d2c4c9dd..84f3b3c934f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -548,17 +548,8 @@ public class TypeHierarchyResolver { MutablePackageFragmentDescriptor fragment = packageFragmentProvider.getOrCreateFragment(packageDirective.getFqName()); - for (JetSimpleNameExpression nameExpression : packageDirective.getPackageNames()) { - FqName fqName = packageDirective.getFqName(nameExpression); - - PackageViewDescriptor packageView = packageFragmentProvider.getModule().getPackage(fqName); - assert packageView != null : "package not found: " + fqName; - trace.record(REFERENCE_TARGET, nameExpression, packageView); - - PackageViewDescriptor parentPackageView = packageView.getContainingDeclaration(); - assert parentPackageView != null : "package has no parent: " + packageView; - trace.record(RESOLUTION_SCOPE, nameExpression, parentPackageView.getMemberScope()); - } + ModuleDescriptor module = packageFragmentProvider.getModule(); + DescriptorResolver.resolvePackageHeader(packageDirective, module, TypeHierarchyResolver.this.trace); trace.record(BindingContext.FILE_TO_PACKAGE_FRAGMENT, file, fragment);