diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index c4905da5c37..1473e120fac 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -42,7 +42,6 @@ import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver; import org.jetbrains.jet.lang.resolve.ImportsResolver; import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver; -import org.jetbrains.jet.lang.resolve.DelegationResolver; import org.jetbrains.jet.lang.resolve.OverloadResolver; import org.jetbrains.jet.lang.resolve.OverrideResolver; import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver; @@ -80,7 +79,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly private OverloadingConflictResolver overloadingConflictResolver; private ImportsResolver importsResolver; private ScriptHeaderResolver scriptHeaderResolver; - private DelegationResolver delegationResolver; private OverloadResolver overloadResolver; private OverrideResolver overrideResolver; private TypeHierarchyResolver typeHierarchyResolver; @@ -120,7 +118,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.overloadingConflictResolver = new OverloadingConflictResolver(); this.importsResolver = new ImportsResolver(); this.scriptHeaderResolver = new ScriptHeaderResolver(); - this.delegationResolver = new DelegationResolver(); this.overloadResolver = new OverloadResolver(); this.overrideResolver = new OverrideResolver(); this.typeHierarchyResolver = new TypeHierarchyResolver(); @@ -132,7 +129,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.topDownAnalyzer.setBodyResolver(bodyResolver); this.topDownAnalyzer.setContext(topDownAnalysisContext); this.topDownAnalyzer.setDeclarationResolver(declarationResolver); - this.topDownAnalyzer.setDelegationResolver(delegationResolver); this.topDownAnalyzer.setModuleDescriptor(moduleDescriptor); this.topDownAnalyzer.setNamespaceFactory(namespaceFactory); this.topDownAnalyzer.setOverloadResolver(overloadResolver); @@ -214,9 +210,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters); scriptHeaderResolver.setTrace(bindingTrace); - delegationResolver.setContext(topDownAnalysisContext); - delegationResolver.setTrace(bindingTrace); - overloadResolver.setContext(topDownAnalysisContext); overloadResolver.setTrace(bindingTrace); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index 4c29dd3d5ae..fc1fff391d0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -39,7 +39,6 @@ import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver; import org.jetbrains.jet.lang.resolve.ImportsResolver; import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver; -import org.jetbrains.jet.lang.resolve.DelegationResolver; import org.jetbrains.jet.lang.resolve.OverloadResolver; import org.jetbrains.jet.lang.resolve.OverrideResolver; import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver; @@ -72,7 +71,6 @@ public class InjectorForTopDownAnalyzerBasic { private OverloadingConflictResolver overloadingConflictResolver; private ImportsResolver importsResolver; private ScriptHeaderResolver scriptHeaderResolver; - private DelegationResolver delegationResolver; private OverloadResolver overloadResolver; private OverrideResolver overrideResolver; private TypeHierarchyResolver typeHierarchyResolver; @@ -107,7 +105,6 @@ public class InjectorForTopDownAnalyzerBasic { this.overloadingConflictResolver = new OverloadingConflictResolver(); this.importsResolver = new ImportsResolver(); this.scriptHeaderResolver = new ScriptHeaderResolver(); - this.delegationResolver = new DelegationResolver(); this.overloadResolver = new OverloadResolver(); this.overrideResolver = new OverrideResolver(); this.typeHierarchyResolver = new TypeHierarchyResolver(); @@ -116,7 +113,6 @@ public class InjectorForTopDownAnalyzerBasic { this.topDownAnalyzer.setBodyResolver(bodyResolver); this.topDownAnalyzer.setContext(topDownAnalysisContext); this.topDownAnalyzer.setDeclarationResolver(declarationResolver); - this.topDownAnalyzer.setDelegationResolver(delegationResolver); this.topDownAnalyzer.setModuleDescriptor(moduleDescriptor); this.topDownAnalyzer.setNamespaceFactory(namespaceFactory); this.topDownAnalyzer.setOverloadResolver(overloadResolver); @@ -185,9 +181,6 @@ public class InjectorForTopDownAnalyzerBasic { scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters); scriptHeaderResolver.setTrace(bindingTrace); - delegationResolver.setContext(topDownAnalysisContext); - delegationResolver.setTrace(bindingTrace); - overloadResolver.setContext(topDownAnalysisContext); overloadResolver.setTrace(bindingTrace); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java index 87653d27d09..8a2da3f505d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java @@ -122,6 +122,7 @@ public class DeclarationsChecker { private void checkOpenMembers(MutableClassDescriptor classDescriptor) { for (CallableMemberDescriptor memberDescriptor : classDescriptor.getDeclaredCallableMembers()) { + if (memberDescriptor.getKind() != CallableMemberDescriptor.Kind.DECLARATION) continue; JetNamedDeclaration member = (JetNamedDeclaration) BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), memberDescriptor); if (member != null && classDescriptor.getModality() == Modality.FINAL && member.hasModifier(JetTokens.OPEN_KEYWORD)) { trace.report(NON_FINAL_MEMBER_IN_FINAL_CLASS.on(member)); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java index 31fcbf2f4d2..7cd54fd292e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java @@ -21,49 +21,21 @@ import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.psi.JetClassOrObject; +import org.jetbrains.jet.lang.psi.JetDelegationSpecifier; +import org.jetbrains.jet.lang.psi.JetDelegatorByExpressionSpecifier; import org.jetbrains.jet.lang.types.JetType; -import javax.inject.Inject; import java.util.Collection; -import java.util.Map; /** * @author abreslav */ public class DelegationResolver { - @NotNull - private TopDownAnalysisContext context; - @NotNull - private BindingTrace trace; + private DelegationResolver() {} - @Inject - public void setContext(@NotNull TopDownAnalysisContext context) { - this.context = context; - } - - @Inject - public void setTrace(@NotNull BindingTrace trace) { - this.trace = trace; - } - - - - public void process() { - addDelegatedMembers(); - } - - private void addDelegatedMembers() { - for (Map.Entry entry : context.getClasses().entrySet()) { - addDelegatedMembers(entry.getKey(), entry.getValue()); - } - for (Map.Entry entry : context.getObjects().entrySet()) { - addDelegatedMembers(entry.getKey(), entry.getValue()); - } - } - - private void addDelegatedMembers(JetClassOrObject jetClass, MutableClassDescriptor classDescriptor) { + public static void addDelegatedMembers(@NotNull BindingTrace trace, @NotNull JetClassOrObject jetClass, @NotNull MutableClassDescriptor classDescriptor) { for (JetDelegationSpecifier delegationSpecifier : jetClass.getDelegationSpecifiers()) { if (delegationSpecifier instanceof JetDelegatorByExpressionSpecifier) { JetDelegatorByExpressionSpecifier specifier = (JetDelegatorByExpressionSpecifier) delegationSpecifier; 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 3f446cbed43..37fbbedce25 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -72,7 +72,7 @@ public class OverrideResolver { public void process() { //all created fake descriptors are stored to resolve visibility on them later - generateOverrides(); + generateOverridesAndDelegation(); checkVisibility(); checkOverrides(); @@ -82,7 +82,7 @@ public class OverrideResolver { /** * Generate fake overrides and add overridden descriptors to existing descriptors. */ - private void generateOverrides() { + private void generateOverridesAndDelegation() { Set ourClasses = new HashSet(); ourClasses.addAll(context.getClasses().values()); ourClasses.addAll(context.getObjects().values()); @@ -90,33 +90,34 @@ public class OverrideResolver { Set processed = new HashSet(); for (MutableClassDescriptor clazz : ourClasses) { - generateOverridesInAClass(clazz, processed, ourClasses); + generateOverridesAndDelegationInAClass(clazz, processed, ourClasses); } } - private void generateOverridesInAClass(@NotNull final MutableClassDescriptor classDescriptor, + private void generateOverridesAndDelegationInAClass( + @NotNull final MutableClassDescriptor classDescriptor, @NotNull Set processed, - @NotNull Set ourClasses) { + @NotNull Set classesBeingAnalyzed + // to filter out classes such as stdlib and others that come from dependencies + ) { if (!processed.add(classDescriptor)) { return; } - // avoid processing stdlib classes twice - if (!ourClasses.contains(classDescriptor)) { - return; - } - for (JetType supertype : classDescriptor.getTypeConstructor().getSupertypes()) { ClassDescriptor superclass = (ClassDescriptor) supertype.getConstructor().getDeclarationDescriptor(); - if (superclass instanceof MutableClassDescriptor) { - generateOverridesInAClass((MutableClassDescriptor) superclass, processed, ourClasses); + if (superclass instanceof MutableClassDescriptor && classesBeingAnalyzed.contains(superclass)) { + generateOverridesAndDelegationInAClass((MutableClassDescriptor) superclass, processed, classesBeingAnalyzed); } } - doGenerateOverridesInAClass(classDescriptor); + PsiElement declaration = BindingContextUtils.classDescriptorToDeclaration(trace.getBindingContext(), classDescriptor); + DelegationResolver.addDelegatedMembers(trace, (JetClassOrObject) declaration, classDescriptor); + + generateOverridesInAClass(classDescriptor); } - private void doGenerateOverridesInAClass(final MutableClassDescriptor classDescriptor) { + private void generateOverridesInAClass(final MutableClassDescriptor classDescriptor) { List membersFromSupertypes = getCallableMembersFromSupertypes(classDescriptor); MultiMap membersFromSupertypesByName = groupDescriptorsByName(membersFromSupertypes); @@ -160,7 +161,7 @@ public class OverrideResolver { } for (CallableMemberDescriptor memberDescriptor : classDescriptor.getAllCallableMembers()) { JetDeclaration declaration = null; - if (memberDescriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) { + if (memberDescriptor.getKind() == CallableMemberDescriptor.Kind.DECLARATION) { PsiElement element = BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), memberDescriptor); if (element instanceof JetDeclaration) { declaration = (JetDeclaration) element; @@ -453,21 +454,20 @@ public class OverrideResolver { } private void checkOverrideForMember(@NotNull CallableMemberDescriptor declared) { + if (declared.getKind() != CallableMemberDescriptor.Kind.DECLARATION) { + return; + } + JetNamedDeclaration member = (JetNamedDeclaration) BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), declared); if (member == null) { if (declared.getKind() != CallableMemberDescriptor.Kind.DELEGATION) { throw new IllegalStateException( - "decriptor is not resolved to declaration" + - " and it is not delegate: " + declared + ", DELEGATED: " + - (declared.getKind() == CallableMemberDescriptor.Kind.DELEGATION)); + "descriptor is not resolved to declaration" + + " and it is not delegate: " + declared); } return; } - if (declared.getKind() != CallableMemberDescriptor.Kind.DECLARATION) { - return; - } - JetModifierList modifierList = member.getModifierList(); ASTNode overrideNode = modifierList != null ? modifierList.getModifierNode(JetTokens.OVERRIDE_KEYWORD) : null; boolean hasOverrideModifier = overrideNode != null; @@ -549,8 +549,8 @@ public class OverrideResolver { } private void checkOverridesForParameters(CallableMemberDescriptor declared) { - boolean fakeOverride = declared.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE; - if (!fakeOverride) { + boolean noDeclaration = declared.getKind() != CallableMemberDescriptor.Kind.DECLARATION; + if (!noDeclaration) { // No check if the function is not marked as 'override' JetModifierListOwner declaration = (JetModifierListOwner) BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), declared); @@ -566,13 +566,13 @@ public class OverrideResolver { // b) p1 must have the same name as p2 for (ValueParameterDescriptor parameterFromSubclass : declared.getValueParameters()) { JetParameter parameter = - fakeOverride ? null : + noDeclaration ? null : (JetParameter) BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), parameterFromSubclass); - JetClassOrObject classElement = fakeOverride ? (JetClassOrObject) BindingContextUtils + JetClassOrObject classElement = noDeclaration ? (JetClassOrObject) BindingContextUtils .descriptorToDeclaration(trace.getBindingContext(), declared.getContainingDeclaration()) : null; - if (parameterFromSubclass.declaresDefaultValue() && !fakeOverride) { + if (parameterFromSubclass.declaresDefaultValue() && !noDeclaration) { trace.report(DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE.on(parameter)); } @@ -583,7 +583,7 @@ public class OverrideResolver { superWithDefault = true; } else { - if (fakeOverride) { + if (noDeclaration) { trace.report(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE.on(classElement, parameterFromSubclass)); } else { @@ -594,7 +594,7 @@ public class OverrideResolver { } if (!parameterFromSuperclass.getName().equals(parameterFromSubclass.getName())) { - if (fakeOverride) { + if (noDeclaration) { trace.report(DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES.on(classElement, declared.getOverriddenDescriptors(), parameterFromSuperclass.getIndex() + 1)); } else { 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 744b1df4a88..6fb20e791bf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -47,8 +47,6 @@ public class TopDownAnalyzer { @NotNull private TypeHierarchyResolver typeHierarchyResolver; @NotNull - private DelegationResolver delegationResolver; - @NotNull private OverrideResolver overrideResolver; @NotNull private OverloadResolver overloadResolver; @@ -75,11 +73,6 @@ public class TopDownAnalyzer { this.typeHierarchyResolver = typeHierarchyResolver; } - @Inject - public void setDelegationResolver(@NotNull DelegationResolver delegationResolver) { - this.delegationResolver = delegationResolver; - } - @Inject public void setOverrideResolver(@NotNull OverrideResolver overrideResolver) { this.overrideResolver = overrideResolver; @@ -131,7 +124,6 @@ public class TopDownAnalyzer { typeHierarchyResolver.process(outerScope, owner, declarations); declarationResolver.process(outerScope); - delegationResolver.process(); overrideResolver.process(); lockScopes(); diff --git a/compiler/testData/diagnostics/tests/Delegation_ScopeInitializationOrder.kt b/compiler/testData/diagnostics/tests/Delegation_ScopeInitializationOrder.kt new file mode 100644 index 00000000000..d1e51af531a --- /dev/null +++ b/compiler/testData/diagnostics/tests/Delegation_ScopeInitializationOrder.kt @@ -0,0 +1,11 @@ +class D(b: B) : C(b) +trait A { + fun foo() {} +} + +trait B : A {} + +class C(b : B) : B by b { + +} + diff --git a/compiler/tests/org/jetbrains/jet/checkers/AbstractJetDiagnosticsTest.java b/compiler/tests/org/jetbrains/jet/checkers/AbstractJetDiagnosticsTest.java index b613cc0fb46..17e64966968 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/AbstractJetDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/jet/checkers/AbstractJetDiagnosticsTest.java @@ -52,9 +52,15 @@ public abstract class AbstractJetDiagnosticsTest extends JetLiteFixture { catch (IOException e) { throw ExceptionUtils.rethrow(e); } - return new JetCoreEnvironment(getTestRootDisposable(), CompileCompilerDependenciesTest.compilerConfigurationForTests( - ConfigurationKind.JDK_AND_ANNOTATIONS, TestJdkKind.MOCK_JDK, JetTestUtils.getAnnotationsJar(), - javaFilesDir)); + return new JetCoreEnvironment( + getTestRootDisposable(), + CompileCompilerDependenciesTest.compilerConfigurationForTests( + ConfigurationKind.JDK_AND_ANNOTATIONS, + TestJdkKind.MOCK_JDK, + JetTestUtils.getAnnotationsJar(), + javaFilesDir + ) + ); } private static boolean writeJavaFile(@NotNull String fileName, @NotNull String content, @NotNull File javaFilesDir) { diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 8e68fcb6584..bbf58bad4fd 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -15,15 +15,12 @@ */ package org.jetbrains.jet.checkers; -import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestSuite; - -import java.io.File; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.TestMetadata; -import org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve; +import java.io.File; /** This class is generated by {@link org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve}. DO NOT MODIFY MANUALLY */ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEagerResolve { @@ -180,8 +177,12 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage @TestMetadata("DelegationNotTotrait.kt") public void testDelegationNotTotrait() throws Exception { - // todo FIXME: enable this test - //doTest("compiler/testData/diagnostics/tests/DelegationNotTotrait.kt"); + doTest("compiler/testData/diagnostics/tests/DelegationNotTotrait.kt"); + } + + @TestMetadata("Delegation_ScopeInitializationOrder.kt") + public void testDelegation_ScopeInitializationOrder() throws Exception { + doTest("compiler/testData/diagnostics/tests/Delegation_ScopeInitializationOrder.kt"); } @TestMetadata("DiamondFunction.kt") diff --git a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java index 00e2a1badac..459380b1bea 100644 --- a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -39,7 +39,6 @@ import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver; import org.jetbrains.jet.lang.resolve.ImportsResolver; import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver; -import org.jetbrains.jet.lang.resolve.DelegationResolver; import org.jetbrains.jet.lang.resolve.OverloadResolver; import org.jetbrains.jet.lang.resolve.OverrideResolver; import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver; @@ -72,7 +71,6 @@ public class InjectorForTopDownAnalyzerForJs { private OverloadingConflictResolver overloadingConflictResolver; private ImportsResolver importsResolver; private ScriptHeaderResolver scriptHeaderResolver; - private DelegationResolver delegationResolver; private OverloadResolver overloadResolver; private OverrideResolver overrideResolver; private TypeHierarchyResolver typeHierarchyResolver; @@ -107,7 +105,6 @@ public class InjectorForTopDownAnalyzerForJs { this.overloadingConflictResolver = new OverloadingConflictResolver(); this.importsResolver = new ImportsResolver(); this.scriptHeaderResolver = new ScriptHeaderResolver(); - this.delegationResolver = new DelegationResolver(); this.overloadResolver = new OverloadResolver(); this.overrideResolver = new OverrideResolver(); this.typeHierarchyResolver = new TypeHierarchyResolver(); @@ -116,7 +113,6 @@ public class InjectorForTopDownAnalyzerForJs { this.topDownAnalyzer.setBodyResolver(bodyResolver); this.topDownAnalyzer.setContext(topDownAnalysisContext); this.topDownAnalyzer.setDeclarationResolver(declarationResolver); - this.topDownAnalyzer.setDelegationResolver(delegationResolver); this.topDownAnalyzer.setModuleDescriptor(moduleDescriptor); this.topDownAnalyzer.setNamespaceFactory(namespaceFactory); this.topDownAnalyzer.setOverloadResolver(overloadResolver); @@ -185,9 +181,6 @@ public class InjectorForTopDownAnalyzerForJs { scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters); scriptHeaderResolver.setTrace(bindingTrace); - delegationResolver.setContext(topDownAnalysisContext); - delegationResolver.setTrace(bindingTrace); - overloadResolver.setContext(topDownAnalysisContext); overloadResolver.setTrace(bindingTrace);