Package directives resolved in lazy TDA
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user