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 e190349e1f9..3d0931e28c8 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 @@ -651,24 +651,28 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati val value = field.value val origin = kaptContext.origins[field] - val propertyInitializer = (origin?.element as? KtProperty)?.initializer + val initializer = when (val element = origin?.element) { + is KtProperty -> element.initializer + is KtParameter -> element.defaultValue + else -> null + } if (value != null) { - if (propertyInitializer != null) { - return convertConstantValueArguments(value, listOf(propertyInitializer)) + if (initializer != null) { + return convertConstantValueArguments(value, listOf(initializer)) } return convertValueOfPrimitiveTypeOrString(value) } val propertyType = (origin?.descriptor as? PropertyDescriptor)?.returnType - if (propertyInitializer != null && propertyType != null) { + if (initializer != null && propertyType != null) { val moduleDescriptor = kaptContext.generationState.module val evaluator = ConstantExpressionEvaluator(moduleDescriptor, LanguageVersionSettingsImpl.DEFAULT, kaptContext.project) val trace = DelegatingBindingTrace(kaptContext.bindingContext, "Kapt") - val const = evaluator.evaluateExpression(propertyInitializer, trace, propertyType) + val const = evaluator.evaluateExpression(initializer, trace, propertyType) if (const != null && !const.isError && const.canBeUsedInAnnotations && !const.usesNonConstValAsConstant) { - return convertConstantValueArguments(const.getValue(propertyType), listOf(propertyInitializer)) + return convertConstantValueArguments(const.getValue(propertyType), listOf(initializer)) } } diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/jvmOverloads.txt b/plugins/kapt3/kapt3-compiler/testData/converter/jvmOverloads.txt index 2b92efc2804..bdf4f43348b 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/jvmOverloads.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/jvmOverloads.txt @@ -5,7 +5,7 @@ public final class State { private final int someInt = 0; private final long someLong = 0L; @org.jetbrains.annotations.NotNull() - private final java.lang.String someString = null; + private final java.lang.String someString = ""; public final int getSomeInt() { return 0; @@ -38,9 +38,9 @@ import java.lang.System; @kotlin.Metadata() public final class State2 { public final int someInt = 0; - public final long someLong = 0L; + public final long someLong = 2L; @org.jetbrains.annotations.NotNull() - public final java.lang.String someString = null; + public final java.lang.String someString = ""; public final int test(int someInt, long someLong, @org.jetbrains.annotations.NotNull() java.lang.String someString) { diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/kt18791.kt b/plugins/kapt3/kapt3-compiler/testData/converter/kt18791.kt index df97df237ae..2ab88ffcc50 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/kt18791.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/kt18791.kt @@ -66,7 +66,8 @@ annotation class Anno( val a8: Double, val a9: String) -class MyActivity { +// TODO generate the right default field value for 'p0' +class MyActivity(val p0: Int = lib.R.id.textView, val p1: Int = 5) { @Bind(LibR.id.textView) @BindField(LibR.id.textView) val a = 0 diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/kt18791.txt b/plugins/kapt3/kapt3-compiler/testData/converter/kt18791.txt index a46e5cfc39f..f9fdd4cb98d 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/kt18791.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/kt18791.txt @@ -134,6 +134,8 @@ public final class MyActivity { public final int propD = app.B.id.textView; public int propE = app.B.id.textView; private final int propF = 0; + private final int p0 = 0; + private final int p1 = 5; @Bind(id = lib.R.id.textView) public static void a$annotations() { @@ -224,6 +226,18 @@ public final class MyActivity { return 0; } + public final int getP0() { + return 0; + } + + public final int getP1() { + return 0; + } + + public MyActivity(int p0, int p1) { + super(); + } + public MyActivity() { super(); } diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/unsafePropertyInitializers.kt b/plugins/kapt3/kapt3-compiler/testData/converter/unsafePropertyInitializers.kt index 0a802b38a4d..de6e084f8a5 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/unsafePropertyInitializers.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/unsafePropertyInitializers.kt @@ -21,4 +21,6 @@ object Foo { object Boo { val z = foo() fun foo() = "abc" -} \ No newline at end of file +} + +class Zoo(val p: Int = 100) \ No newline at end of file diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/unsafePropertyInitializers.txt b/plugins/kapt3/kapt3-compiler/testData/converter/unsafePropertyInitializers.txt index cc80a16adc4..31a524781df 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/unsafePropertyInitializers.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/unsafePropertyInitializers.txt @@ -116,3 +116,25 @@ public final class Foo { super(); } } + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public final class Zoo { + private final int p = 100; + + public final int getP() { + return 0; + } + + public Zoo(int p) { + super(); + } + + public Zoo() { + super(); + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/kotlinRunner/Overloads.it.txt b/plugins/kapt3/kapt3-compiler/testData/kotlinRunner/Overloads.it.txt index 9fb0cd3bbc5..00949290542 100644 --- a/plugins/kapt3/kapt3-compiler/testData/kotlinRunner/Overloads.it.txt +++ b/plugins/kapt3/kapt3-compiler/testData/kotlinRunner/Overloads.it.txt @@ -26,7 +26,7 @@ public final class State { private final int someInt = 0; private final long someLong = 0L; @org.jetbrains.annotations.NotNull() - private final java.lang.String someString = null; + private final java.lang.String someString = ""; public final int getSomeInt() { return 0;