Package directives resolved in lazy TDA

This commit is contained in:
Andrey Breslav
2014-02-19 15:51:47 +04:00
parent 63d5855cb4
commit 5c7c494235
3 changed files with 27 additions and 12 deletions
@@ -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);