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 77226664166..5dc93a762fb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -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 files = trace.get(PACKAGE_TO_FILES, fqName); + if (files == null) { + files = Sets.newIdentityHashSet(); + } + files.add(file); + trace.record(BindingContext.PACKAGE_TO_FILES, fqName, files); + } } 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 63fa853f2fb..b88a8805b61 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -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); 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 33f3f98871d..ad7e847b05c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -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 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; }