diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/BothSignatureWriter.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/BothSignatureWriter.java index 4a126e073f3..7952b3c02e3 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/BothSignatureWriter.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/signature/BothSignatureWriter.java @@ -263,13 +263,13 @@ public class BothSignatureWriter { } @NotNull - public JvmMethodSignature makeJvmMethodSignature(@NotNull String name) { + public JvmMethodSignature makeJvmMethodSignature(@NotNull String name, boolean skipGenericSignature) { List types = new ArrayList(kotlinParameterTypes.size()); for (JvmMethodParameterSignature parameter : kotlinParameterTypes) { types.add(parameter.getAsmType()); } Method asmMethod = new Method(name, jvmReturnType, types.toArray(new Type[types.size()])); - return new JvmMethodSignature(asmMethod, makeJavaGenericSignature(), kotlinParameterTypes); + return new JvmMethodSignature(asmMethod, !skipGenericSignature ? makeJavaGenericSignature() : null, kotlinParameterTypes); } public int getCurrentSignatureSize() { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java index e04d4627bc3..305360da836 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java @@ -405,7 +405,7 @@ public class JetTypeMapper { sw.writeReturnType(); mapType(descriptor.getType(), sw, JetTypeMapperMode.VALUE_FOR_ANNOTATION); sw.writeReturnTypeEnd(); - return sw.makeJvmMethodSignature(descriptor.getName().asString()); + return sw.makeJvmMethodSignature(descriptor.getName().asString(), false); } @NotNull @@ -1071,8 +1071,7 @@ public class JetTypeMapper { sw.writeReturnTypeEnd(); } - JvmMethodSignature signature = sw.makeJvmMethodSignature(mapFunctionName(f)); - + JvmMethodSignature signature = sw.makeJvmMethodSignature(mapFunctionName(f), f instanceof AccessorForCallableDescriptor); if (kind != OwnerKind.DEFAULT_IMPLS) { SpecialSignatureInfo specialSignatureInfo = BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo(f); @@ -1394,7 +1393,7 @@ public class JetTypeMapper { writeVoidReturn(sw); - return sw.makeJvmMethodSignature(""); + return sw.makeJvmMethodSignature("", false); } public Type getSharedVarType(DeclarationDescriptor descriptor) { diff --git a/compiler/testData/codegen/bytecodeText/signature/noSignatureInSyntheticAccessor.kt b/compiler/testData/codegen/bytecodeText/signature/noSignatureInSyntheticAccessor.kt new file mode 100644 index 00000000000..170539cdb2b --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/signature/noSignatureInSyntheticAccessor.kt @@ -0,0 +1,24 @@ +class MyList { + + private fun noSignature(): T? = null + + fun withSignature(): T? = null + + fun removeHeader() { + fun a () { + noSignature() + } + } +} + +/* +Class signature, +local fun class signature, +'noSignature' and 'withSignature' fun signatures + */ + +// 4 signature +// 2 signature \(\)TT\; +// 1 signature Lkotlin/jvm/internal/Lambda\;Lkotlin/jvm/functions/Function0\; +// 1 signature Ljava/lang/Object\; +// 1 public final static synthetic access\$noSignature\(LMyList\;\)Ljava/lang/Object \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 0aae2ce3dcf..d2e3d050cbe 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -800,6 +800,21 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { } } + @TestMetadata("compiler/testData/codegen/bytecodeText/signature") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Signature extends AbstractBytecodeTextTest { + public void testAllFilesPresentInSignature() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/bytecodeText/signature"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("noSignatureInSyntheticAccessor.kt") + public void testNoSignatureInSyntheticAccessor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/signature/noSignatureInSyntheticAccessor.kt"); + doTest(fileName); + } + } + @TestMetadata("compiler/testData/codegen/bytecodeText/statements") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)