diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index 697c37b290f..d0e6525faeb 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -817,7 +817,8 @@ public class FunctionCodegen extends GenerationStateAware { StackValue.onStack(overriddenMethod.getReturnType()).put(delegateMethod.getReturnType(), iv); iv.areturn(delegateMethod.getReturnType()); - endVisit(mv, "delegate method", descriptorToDeclaration(bindingContext, functionDescriptor)); + endVisit(mv, "Delegate method " + functionDescriptor + " to " + jvmOverriddenMethodSignature, + descriptorToDeclaration(bindingContext, functionDescriptor.getContainingDeclaration())); generateBridgeIfNeeded(owner, state, v, jvmDelegateMethodSignature.getAsmMethod(), functionDescriptor); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.java index 9ed613a5664..432abc27819 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.resolve; import com.google.common.collect.Lists; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; @@ -25,8 +26,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; -import org.jetbrains.jet.lang.resolve.calls.context.ResolutionContext; -import org.jetbrains.jet.lang.resolve.calls.context.ResolutionResultsCache; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.model.VariableAsFunctionResolvedCall; import org.jetbrains.jet.lang.resolve.scopes.JetScope; @@ -34,7 +33,6 @@ import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetTypeInfo; import org.jetbrains.jet.util.slicedmap.ReadOnlySlice; import org.jetbrains.jet.util.slicedmap.Slices; -import org.jetbrains.jet.util.slicedmap.WritableSlice; import java.util.*; @@ -188,7 +186,8 @@ public class BindingContextUtils { Set overriddenDescriptors = callable.getOverriddenDescriptors(); if (overriddenDescriptors.size() != 1) { throw new IllegalStateException( - "cannot find declaration: fake descriptor has more than one overridden descriptor: " + callable); + "Cannot find declaration: fake descriptor " + callable + " has more than one overridden descriptor:\n" + + StringUtil.join(overriddenDescriptors, ",\n")); } return callableDescriptorToDeclaration(context, overriddenDescriptors.iterator().next()); diff --git a/compiler/testData/codegen/box/classes/kt3546.kt b/compiler/testData/codegen/box/classes/kt3546.kt new file mode 100644 index 00000000000..4fb5ce41dd3 --- /dev/null +++ b/compiler/testData/codegen/box/classes/kt3546.kt @@ -0,0 +1,25 @@ +trait A { + fun test(): String +} + +trait B { + fun test(): String +} + +trait C: A, B + +class Z(val param: String): C { + + override fun test(): String { + return param + } +} + +public class MyClass(val value : C) : C by value { + +} + +fun box(): String { + val s = MyClass(Z("OK")) + return s.test() +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 5f3f94a2501..240dbad08db 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -970,6 +970,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/classes/kt343.kt"); } + @TestMetadata("kt3546.kt") + public void testKt3546() throws Exception { + doTest("compiler/testData/codegen/box/classes/kt3546.kt"); + } + @TestMetadata("kt454.kt") public void testKt454() throws Exception { doTest("compiler/testData/codegen/box/classes/kt454.kt");