From 1c824655d4f4d453b16a69dfb5652c68fc66057d Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 1 Feb 2019 21:30:37 +0300 Subject: [PATCH] Kapt: Fix supertype conversion for DefaultImpls (KT-28306) --- .../stubs/ClassFileToSourceStubConverter.kt | 5 +++ ...ileToSourceStubConverterTestGenerated.java | 5 +++ .../testData/converter/kt28306.kt | 9 ++++ .../testData/converter/kt28306.txt | 42 +++++++++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 plugins/kapt3/kapt3-compiler/testData/converter/kt28306.kt create mode 100644 plugins/kapt3/kapt3-compiler/testData/converter/kt28306.txt diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt index e009e5041a7..410b04ee362 100644 --- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt +++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt @@ -425,6 +425,11 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati } val declaration = kaptContext.origins[clazz]?.element as? KtClassOrObject ?: return defaultSuperTypes + val declarationDescriptor = kaptContext.bindingContext[BindingContext.CLASS, declaration] ?: return defaultSuperTypes + + if (typeMapper.mapType(declarationDescriptor) != Type.getObjectType(clazz.name)) { + return defaultSuperTypes + } val (superClass, superInterfaces) = partitionSuperTypes(declaration) ?: return defaultSuperTypes diff --git a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java index f0bbe0b1f83..62135525f72 100644 --- a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java +++ b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java @@ -269,6 +269,11 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi runTest("plugins/kapt3/kapt3-compiler/testData/converter/kt27126.kt"); } + @TestMetadata("kt28306.kt") + public void testKt28306() throws Exception { + runTest("plugins/kapt3/kapt3-compiler/testData/converter/kt28306.kt"); + } + @TestMetadata("lazyProperty.kt") public void testLazyProperty() throws Exception { runTest("plugins/kapt3/kapt3-compiler/testData/converter/lazyProperty.kt"); diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.kt b/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.kt new file mode 100644 index 00000000000..1a487bcdf36 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.kt @@ -0,0 +1,9 @@ +// CORRECT_ERROR_TYPES + +package foo + +interface InterfaceWithDefaults { + fun foo() {} +} + +interface SubInterface : InterfaceWithDefaults \ No newline at end of file diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.txt b/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.txt new file mode 100644 index 00000000000..061f9d66c15 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.txt @@ -0,0 +1,42 @@ +package foo; + +import java.lang.System; + +@kotlin.Metadata() +public abstract interface InterfaceWithDefaults { + + public abstract void foo(); + + @kotlin.Metadata() + public static final class DefaultImpls { + + public DefaultImpls() { + super(); + } + + public static void foo(foo.InterfaceWithDefaults $this) { + } + } +} + +//////////////////// + +package foo; + +import java.lang.System; + +@kotlin.Metadata() +public abstract interface SubInterface extends foo.InterfaceWithDefaults { + + @kotlin.Metadata() + public static final class DefaultImpls { + + public DefaultImpls() { + super(); + } + + @java.lang.Override() + public static void foo(foo.SubInterface $this) { + } + } +}