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 47e14799614..b1e76f91cb5 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 @@ -814,7 +814,7 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati ElementKind.METHOD, packageFqName, visibleAnnotations, method.invisibleAnnotations, descriptor.annotations ) - if (containingClass.isInterface() && !method.isAbstract()) { + if (containingClass.isInterface() && !method.isAbstract() && !method.isStatic()) { modifiers.flags = modifiers.flags or Flags.DEFAULT } diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/util/asmUtils.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/util/asmUtils.kt index 088e1801d66..4a6c7c50258 100644 --- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/util/asmUtils.kt +++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/util/asmUtils.kt @@ -39,6 +39,7 @@ internal fun ClassNode.isAnnotation() = (access and Opcodes.ACC_ANNOTATION) != 0 internal fun MethodNode.isVarargs() = (access and Opcodes.ACC_VARARGS) != 0 internal fun MethodNode.isAbstract() = (access and Opcodes.ACC_ABSTRACT) != 0 +internal fun MethodNode.isStatic() = (access and Opcodes.ACC_STATIC) != 0 internal fun FieldNode.isEnumValue() = (access and Opcodes.ACC_ENUM) != 0 diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.kt b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.kt index b6dccdb66f5..f919195def0 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.kt @@ -11,3 +11,10 @@ class JvmStaticTest { const val three: Byte = 3.toByte() const val d: Char = 'D' } + +interface FooComponent { + companion object { + @JvmStatic + fun create(context: String): String = "foo" + } +} \ No newline at end of file diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.txt b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.txt index f09c3d3a89f..f92ab58e9c3 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.txt @@ -1,5 +1,36 @@ import java.lang.System; +@kotlin.Metadata() +public abstract interface FooComponent { + @org.jetbrains.annotations.NotNull() + public static final FooComponent.Companion Companion = null; + + @org.jetbrains.annotations.NotNull() + public static java.lang.String create(@org.jetbrains.annotations.NotNull() + java.lang.String context) { + return null; + } + + @kotlin.Metadata() + public static final class Companion { + + @org.jetbrains.annotations.NotNull() + public final java.lang.String create(@org.jetbrains.annotations.NotNull() + java.lang.String context) { + return null; + } + + private Companion() { + super(); + } + } +} + +//////////////////// + + +import java.lang.System; + @kotlin.Metadata() public final class JvmStaticTest { public final byte three = (byte)3;