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 c59fd03c47e..161eb5bcd7a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -97,6 +97,8 @@ public class OverrideResolver { } protected void checkOverridesInAClass(MutableClassDescriptor classDescriptor, JetClassOrObject klass) { + if (context.analyzingBootstrapLibrary()) return; + // Check overrides for internal consistency for (CallableMemberDescriptor member : classDescriptor.getCallableMembers()) { checkOverride(member); 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 db48bedaaed..012d5bebf7c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java @@ -41,6 +41,8 @@ import java.util.Set; private StringBuilder debugOutput; + private boolean analyzingBootstrapLibrary = false; + public TopDownAnalysisContext(JetSemanticServices semanticServices, BindingTrace trace, Predicate analyzeCompletely) { this.trace = new ObservableBindingTrace(trace); this.semanticServices = semanticServices; @@ -66,6 +68,14 @@ import java.util.Set; } } + public boolean analyzingBootstrapLibrary() { + return analyzingBootstrapLibrary; + } + + public void setAnalyzingBootstrapLibrary(boolean analyzingBootstrapLibrary) { + this.analyzingBootstrapLibrary = analyzingBootstrapLibrary; + } + public boolean completeAnalysisNeeded(@NotNull PsiElement element) { PsiFile containingFile = element.getContainingFile(); boolean result = containingFile != null && analyzeCompletely.apply(containingFile); 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 eefbe5a7e4b..fc27060c882 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -7,7 +7,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.JetSemanticServices; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.psi.JetDeclaration; import org.jetbrains.jet.lang.psi.JetNamespace; import org.jetbrains.jet.lang.psi.JetObjectDeclaration; @@ -45,6 +44,16 @@ public class TopDownAnalyzer { @NotNull JetControlFlowDataTraceFactory flowDataTraceFactory, boolean declaredLocally) { TopDownAnalysisContext context = new TopDownAnalysisContext(semanticServices, trace, analyzeCompletely); + doProcess(context, outerScope, owner, declarations, flowDataTraceFactory, declaredLocally); + + } + + private static void doProcess( + TopDownAnalysisContext context, JetScope outerScope, + NamespaceLike owner, + Collection declarations, + JetControlFlowDataTraceFactory flowDataTraceFactory, + boolean declaredLocally) { // context.enableDebugOutput(); context.debug("Enter"); @@ -53,9 +62,11 @@ public class TopDownAnalyzer { new DelegationResolver(context).process(); new OverrideResolver(context).process(); new OverloadResolver(context).process(); - new BodyResolver(context).resolveBehaviorDeclarationBodies(); - new ControlFlowAnalyzer(context, flowDataTraceFactory, declaredLocally).process(); - new DeclarationsChecker(context).process(); + if (!context.analyzingBootstrapLibrary()) { + new BodyResolver(context).resolveBehaviorDeclarationBodies(); + new ControlFlowAnalyzer(context, flowDataTraceFactory, declaredLocally).process(); + new DeclarationsChecker(context).process(); + } context.debug("Exit"); context.printDebugOutput(System.out); @@ -69,17 +80,9 @@ public class TopDownAnalyzer { context.getNamespaceScopes().put(namespace, standardLibraryNamespace.getMemberScope()); context.getNamespaceDescriptors().put(namespace, standardLibraryNamespace); context.getDeclaringScopes().put(namespace, outerScope); + context.setAnalyzingBootstrapLibrary(true); - new TypeHierarchyResolver(context).process(outerScope, standardLibraryNamespace, namespace.getDeclarations()); - new DeclarationResolver(context).process(); - new DelegationResolver(context).process(); - OverrideResolver overrideResolver = new OverrideResolver(context) { - @Override - protected void checkOverridesInAClass(MutableClassDescriptor classDescriptor, JetClassOrObject klass) { - } - }; - overrideResolver.process(); - new BodyResolver(context).resolveBehaviorDeclarationBodies(); + doProcess(context, outerScope, standardLibraryNamespace, namespace.getDeclarations(), JetControlFlowDataTraceFactory.EMPTY, false); } public static void processObject(