From 3f7627120bc41b61a42378bce41db17bfaf9ccb4 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 8 Aug 2013 21:33:24 +0400 Subject: [PATCH] KT-3853 ISE on resolving function implementation from trait from Java The fix is simple and dirty, because the related code will be removed soon anyways. Fix is necessary for compiling Kara. #KT-3853 fixed --- .../src/org/jetbrains/jet/codegen/FunctionCodegen.java | 8 ++++++++ .../jet/codegen/ImplementationBodyCodegen.java | 1 + .../loadKotlin/class/InheritTraitWithFunctionParam.kt | 9 +++++++++ .../loadKotlin/class/InheritTraitWithFunctionParam.txt | 10 ++++++++++ .../jvm/compiler/LoadCompiledKotlinTestGenerated.java | 5 +++++ .../LazyResolveNamespaceComparingTestGenerated.java | 5 +++++ 6 files changed, 38 insertions(+) create mode 100644 compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.kt create mode 100644 compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.txt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index d0e6525faeb..db7b855ba78 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -369,6 +369,14 @@ public class FunctionCodegen extends GenerationStateAware { throw new IllegalStateException(); } + generateMethodParametersAnnotations(mv, functionDescriptor, jvmSignature); + } + + void generateMethodParametersAnnotations( + MethodVisitor mv, + FunctionDescriptor functionDescriptor, + JvmMethodSignature jvmSignature + ) { Iterator valueParameters = functionDescriptor.getValueParameters().iterator(); List kotlinParameterTypes = jvmSignature.getKotlinParameterTypes(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index ec0ef763764..7093c1dc3fb 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -1362,6 +1362,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } else if (state.getClassBuilderMode() == ClassBuilderMode.FULL) { writeAnnotationForDelegateToTraitImpl(fun, inheritedFun, mv); + functionCodegen.generateMethodParametersAnnotations(mv, fun, typeMapper.mapSignature(fun)); Type returnType = methodToGenerate.getReturnType(); diff --git a/compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.kt b/compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.kt new file mode 100644 index 00000000000..1fcc3c569f1 --- /dev/null +++ b/compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.kt @@ -0,0 +1,9 @@ +package test + +trait Trait { + open fun f(a: String) { + } +} + +open class Class : Trait { +} \ No newline at end of file diff --git a/compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.txt b/compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.txt new file mode 100644 index 00000000000..7d00bc1df7c --- /dev/null +++ b/compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.txt @@ -0,0 +1,10 @@ +package test + +internal open class Class : test.Trait { + /*primary*/ public constructor Class() + internal open override /*1*/ /*fake_override*/ fun f(/*0*/ a: jet.String): jet.Unit +} + +internal trait Trait { + internal open fun f(/*0*/ a: jet.String): jet.Unit +} diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java index 4416d106319..206b7283094 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java @@ -138,6 +138,11 @@ public class LoadCompiledKotlinTestGenerated extends AbstractLoadCompiledKotlinT doTestWithAccessors("compiler/testData/loadKotlin/class/InheritSubstitutedMethod.kt"); } + @TestMetadata("InheritTraitWithFunctionParam.kt") + public void testInheritTraitWithFunctionParam() throws Exception { + doTestWithAccessors("compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.kt"); + } + @TestMetadata("InheritTraitWithParam.kt") public void testInheritTraitWithParam() throws Exception { doTestWithAccessors("compiler/testData/loadKotlin/class/InheritTraitWithParam.kt"); diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java index 4eb05ca9dc4..49fddcd3e18 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java @@ -140,6 +140,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/class/InheritSubstitutedMethod.kt"); } + @TestMetadata("InheritTraitWithFunctionParam.kt") + public void testInheritTraitWithFunctionParam() throws Exception { + doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/class/InheritTraitWithFunctionParam.kt"); + } + @TestMetadata("InheritTraitWithParam.kt") public void testInheritTraitWithParam() throws Exception { doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/class/InheritTraitWithParam.kt");