Do not skip synthesized members when generating bridges
The condition here is obsolete since SAM adapters can no longer be overridden: they are now extensions in another scope #KT-12708 Fixed
This commit is contained in:
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.backend.common.bridges.Bridge;
|
|||||||
import org.jetbrains.kotlin.backend.common.bridges.ImplKt;
|
import org.jetbrains.kotlin.backend.common.bridges.ImplKt;
|
||||||
import org.jetbrains.kotlin.codegen.annotation.AnnotatedWithOnlyTargetedAnnotations;
|
import org.jetbrains.kotlin.codegen.annotation.AnnotatedWithOnlyTargetedAnnotations;
|
||||||
import org.jetbrains.kotlin.codegen.context.*;
|
import org.jetbrains.kotlin.codegen.context.*;
|
||||||
import org.jetbrains.kotlin.codegen.optimization.OptimizationMethodVisitor;
|
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
@@ -49,7 +48,6 @@ import org.jetbrains.kotlin.resolve.BindingContext;
|
|||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt;
|
import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt;
|
||||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.CallResolverUtilKt;
|
|
||||||
import org.jetbrains.kotlin.resolve.constants.ArrayValue;
|
import org.jetbrains.kotlin.resolve.constants.ArrayValue;
|
||||||
import org.jetbrains.kotlin.resolve.constants.ConstantValue;
|
import org.jetbrains.kotlin.resolve.constants.ConstantValue;
|
||||||
import org.jetbrains.kotlin.resolve.constants.KClassValue;
|
import org.jetbrains.kotlin.resolve.constants.KClassValue;
|
||||||
@@ -579,9 +577,6 @@ public class FunctionCodegen {
|
|||||||
// equals(Any?), hashCode(), toString() never need bridges
|
// equals(Any?), hashCode(), toString() never need bridges
|
||||||
if (isMethodOfAny(descriptor)) return;
|
if (isMethodOfAny(descriptor)) return;
|
||||||
|
|
||||||
// If the function doesn't have a physical declaration among super-functions, it's a SAM adapter or alike and doesn't need bridges
|
|
||||||
if (CallResolverUtilKt.isOrOverridesSynthesized(descriptor)) return;
|
|
||||||
|
|
||||||
boolean isSpecial = SpecialBuiltinMembers.getOverriddenBuiltinReflectingJvmDescriptor(descriptor) != null;
|
boolean isSpecial = SpecialBuiltinMembers.getOverriddenBuiltinReflectingJvmDescriptor(descriptor) != null;
|
||||||
|
|
||||||
Set<Bridge<Method>> bridgesToGenerate;
|
Set<Bridge<Method>> bridgesToGenerate;
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
fun box(): String {
|
||||||
|
val a: A = B(1)
|
||||||
|
a.copy(1)
|
||||||
|
a.component1()
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
|
|
||||||
|
interface A {
|
||||||
|
fun copy(x: Int): A
|
||||||
|
fun component1(): Any
|
||||||
|
}
|
||||||
|
|
||||||
|
data class B(val x: Int) : A
|
||||||
@@ -4374,6 +4374,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt12708.kt")
|
||||||
|
public void testKt12708() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/kt12708.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt3033.kt")
|
@TestMetadata("kt3033.kt")
|
||||||
public void testKt3033() throws Exception {
|
public void testKt3033() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/kt3033.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/kt3033.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user