diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java index 640d5234102..d1be3db9e21 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java @@ -20,11 +20,12 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.Annotations; import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl; +import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.lang.types.JetType; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; @@ -41,13 +42,31 @@ public class AccessorForFunctionDescriptor extends SimpleFunctionDescriptorImpl initialize(DescriptorUtils.getReceiverParameterType(descriptor.getReceiverParameter()), descriptor instanceof ConstructorDescriptor ? NO_RECEIVER_PARAMETER : descriptor.getExpectedThisObject(), - Collections.emptyList(), + copyTypeParameters(descriptor), copyValueParameters(descriptor), descriptor.getReturnType(), Modality.FINAL, Visibilities.INTERNAL); } + @NotNull + private List copyTypeParameters(@NotNull FunctionDescriptor descriptor) { + List typeParameters = descriptor.getTypeParameters(); + List result = new ArrayList(typeParameters.size()); + for (TypeParameterDescriptor typeParameter : typeParameters) { + TypeParameterDescriptorImpl copy = TypeParameterDescriptorImpl.createForFurtherModification( + this, typeParameter.getAnnotations(), typeParameter.isReified(), + typeParameter.getVariance(), typeParameter.getName(), typeParameter.getIndex() + ); + for (JetType upperBound : typeParameter.getUpperBounds()) { + copy.addUpperBound(upperBound); + } + copy.setInitialized(); + result.add(copy); + } + return result; + } + @NotNull private List copyValueParameters(@NotNull FunctionDescriptor descriptor) { List valueParameters = descriptor.getValueParameters(); diff --git a/compiler/testData/compileJavaAgainstKotlin/method/AccessorGenericSignature.java b/compiler/testData/compileJavaAgainstKotlin/method/AccessorGenericSignature.java new file mode 100644 index 00000000000..84e1ee17253 --- /dev/null +++ b/compiler/testData/compileJavaAgainstKotlin/method/AccessorGenericSignature.java @@ -0,0 +1,5 @@ +package test; + +public class AccessorGenericSignature { + private final BadClass b = new BadClass(); +} diff --git a/compiler/testData/compileJavaAgainstKotlin/method/AccessorGenericSignature.kt b/compiler/testData/compileJavaAgainstKotlin/method/AccessorGenericSignature.kt new file mode 100644 index 00000000000..260fba4bf78 --- /dev/null +++ b/compiler/testData/compileJavaAgainstKotlin/method/AccessorGenericSignature.kt @@ -0,0 +1,16 @@ +package test + +import java.util.ArrayList + +public class BadClass { + fun foo() { + val x: () -> Int = { + bar(ArrayList()) + baz>(ArrayList()) + } + } + + private fun bar(f: List) {} + + private fun > baz(m: List) {} +} diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileJavaAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileJavaAgainstKotlinTestGenerated.java index d128027f5e8..4e14f182141 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileJavaAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileJavaAgainstKotlinTestGenerated.java @@ -93,6 +93,11 @@ public class CompileJavaAgainstKotlinTestGenerated extends AbstractCompileJavaAg @TestMetadata("compiler/testData/compileJavaAgainstKotlin/method") @InnerTestClasses({Method.PrimitiveOverride.class, Method.Throws.class}) public static class Method extends AbstractCompileJavaAgainstKotlinTest { + @TestMetadata("AccessorGenericSignature.kt") + public void testAccessorGenericSignature() throws Exception { + doTest("compiler/testData/compileJavaAgainstKotlin/method/AccessorGenericSignature.kt"); + } + public void testAllFilesPresentInMethod() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/compileJavaAgainstKotlin/method"), Pattern.compile("^(.+)\\.kt$"), true); }