diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index c9b9c2f9c9c..aafe80d4f77 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -74,7 +74,7 @@ public class OverrideResolver { * Generate fake overrides and add overridden descriptors to existing descriptors. */ private void generateOverridesAndDelegation(@NotNull TopDownAnalysisContext c) { - Set ourClasses = new HashSet(c.getClasses().values()); + Set ourClasses = new HashSet(c.getAllClasses()); Set processed = new HashSet(); for (MutableClassDescriptorLite klass : ContainerUtil.reverse(c.getClassesTopologicalOrder())) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java index 21b4099960e..6d9725ac6d9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java @@ -21,6 +21,8 @@ import com.google.common.base.Functions; import com.google.common.collect.Maps; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; +import kotlin.Function1; +import kotlin.KotlinPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptorLite; @@ -198,4 +200,19 @@ public class TopDownAnalysisContext implements BodiesResolveContext { public void setOuterDataFlowInfo(@NotNull DataFlowInfo outerDataFlowInfo) { this.outerDataFlowInfo = outerDataFlowInfo; } + + @NotNull + public Collection getAllClasses() { + // SCRIPT: all classes are declared classes + script classes + Collection scriptClasses = KotlinPackage.map( + getScripts().values(), + new Function1() { + @Override + public ClassDescriptorWithResolutionScopes invoke(ScriptDescriptor scriptDescriptor) { + return (ClassDescriptorWithResolutionScopes) scriptDescriptor.getClassDescriptor(); + } + } + ); + return KotlinPackage.plus(getClasses().values(), scriptClasses); + } } 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 ad7e847b05c..d3d68f494e5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -218,12 +218,12 @@ public class TypeHierarchyResolver { } } - private List topologicallySortClassesAndObjects(@NotNull TopDownAnalysisContext c) { + private static List topologicallySortClassesAndObjects(@NotNull TopDownAnalysisContext c) { // A topsort is needed only for better diagnostics: // edges that get removed to disconnect loops are more reasonable in this case //noinspection unchecked return DFS.topologicalOrder( - (Iterable) c.getClasses().values(), + (Iterable) c.getAllClasses(), new DFS.Neighbors() { @NotNull @Override