Fix for KT-3546: Exception when delegating to ArrayList
#KT-3546 Fixed
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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<? extends CallableMemberDescriptor> 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());
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user