Register files in package in LAZY mode
This commit is contained in:
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.resolve;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
@@ -54,9 +55,7 @@ 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.BindingContext.*;
|
||||
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;
|
||||
@@ -1469,4 +1468,16 @@ public class DescriptorResolver {
|
||||
trace.record(RESOLUTION_SCOPE, nameExpression, parentPackageView.getMemberScope());
|
||||
}
|
||||
}
|
||||
|
||||
public static void registerFileInPackage(@NotNull BindingTrace trace, @NotNull JetFile file) {
|
||||
// Register files corresponding to this package
|
||||
// The trace currently does not support bi-di multimaps that would handle this task nicer
|
||||
FqName fqName = file.getPackageFqName();
|
||||
Collection<JetFile> files = trace.get(PACKAGE_TO_FILES, fqName);
|
||||
if (files == null) {
|
||||
files = Sets.newIdentityHashSet();
|
||||
}
|
||||
files.add(file);
|
||||
trace.record(BindingContext.PACKAGE_TO_FILES, fqName, files);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,6 +196,8 @@ public class TopDownAnalyzer {
|
||||
c.addFile(file);
|
||||
|
||||
DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace);
|
||||
DescriptorResolver.registerFileInPackage(trace, file);
|
||||
|
||||
registerDeclarations(file.getDeclarations());
|
||||
|
||||
topLevelFqNames.put(file.getPackageFqName(), packageDirective);
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.jet.lang.resolve;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiNameIdentifierOwner;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -25,7 +24,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.*;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.name.SpecialNames;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.ChainedScope;
|
||||
@@ -41,7 +39,8 @@ import javax.inject.Inject;
|
||||
import java.util.*;
|
||||
|
||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||
import static org.jetbrains.jet.lang.resolve.BindingContext.*;
|
||||
import static org.jetbrains.jet.lang.resolve.BindingContext.FQNAME_TO_CLASS_DESCRIPTOR;
|
||||
import static org.jetbrains.jet.lang.resolve.BindingContext.TYPE;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumEntry;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isObject;
|
||||
import static org.jetbrains.jet.lang.resolve.ModifiersChecker.getDefaultClassVisibility;
|
||||
@@ -428,19 +427,10 @@ public class TypeHierarchyResolver {
|
||||
MutablePackageFragmentDescriptor fragment = packageFragmentProvider.getOrCreateFragment(packageDirective.getFqName());
|
||||
|
||||
ModuleDescriptor module = packageFragmentProvider.getModule();
|
||||
DescriptorResolver.resolvePackageHeader(packageDirective, module, TypeHierarchyResolver.this.trace);
|
||||
|
||||
DescriptorResolver.resolvePackageHeader(packageDirective, module, trace);
|
||||
DescriptorResolver.registerFileInPackage(trace, file);
|
||||
trace.record(BindingContext.FILE_TO_PACKAGE_FRAGMENT, file, fragment);
|
||||
|
||||
// Register files corresponding to this package
|
||||
// The trace currently does not support bi-di multimaps that would handle this task nicer
|
||||
FqName fqName = fragment.getFqName();
|
||||
Collection<JetFile> files = trace.get(PACKAGE_TO_FILES, fqName);
|
||||
if (files == null) {
|
||||
files = Sets.newIdentityHashSet();
|
||||
}
|
||||
files.add(file);
|
||||
trace.record(BindingContext.PACKAGE_TO_FILES, fqName, files);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user