diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt index d6cab7b6d2f..dedbf218677 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.light.classes.symbol.modifierLists.with import org.jetbrains.kotlin.name.JvmNames.TRANSIENT_ANNOTATION_CLASS_ID import org.jetbrains.kotlin.name.JvmNames.VOLATILE_ANNOTATION_CLASS_ID import org.jetbrains.kotlin.psi.KtCallableDeclaration +import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtProperty internal class SymbolLightFieldForProperty private constructor( @@ -186,8 +187,12 @@ internal class SymbolLightFieldForProperty private constructor( private val _initializer by lazyPub { _initializerValue?.createPsiExpression(this) ?: withPropertySymbol { propertySymbol -> if (propertySymbol !is KtKotlinPropertySymbol) return@withPropertySymbol null - (kotlinOrigin as? KtProperty)?.initializer?.evaluateAsAnnotationValue() - ?.let(::toPsiExpression) + val initializerExpression = when (kotlinOrigin) { + is KtProperty -> kotlinOrigin.initializer + is KtParameter -> kotlinOrigin.defaultValue + else -> null + } + initializerExpression?.evaluateAsAnnotationValue()?.let(::toPsiExpression) } } diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java index 819b1bf08b8..5c7b9b89e08 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java @@ -96,6 +96,12 @@ public class SymbolLightClassesByPsiForLibraryTestGenerated extends AbstractSymb runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultMethodInKotlinWithSettingAllCompatibility.kt"); } + @Test + @TestMetadata("defaultParameterValue.kt") + public void testDefaultParameterValue() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.kt"); + } + @Test @TestMetadata("DelegatedProperty.kt") public void testDelegatedProperty() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesEqualityByPsiForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesEqualityByPsiForLibraryTestGenerated.java index bac9bdf34a3..d7f4dbcec7f 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesEqualityByPsiForLibraryTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesEqualityByPsiForLibraryTestGenerated.java @@ -96,6 +96,12 @@ public class SymbolLightClassesEqualityByPsiForLibraryTestGenerated extends Abst runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultMethodInKotlinWithSettingAllCompatibility.kt"); } + @Test + @TestMetadata("defaultParameterValue.kt") + public void testDefaultParameterValue() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.kt"); + } + @Test @TestMetadata("DelegatedProperty.kt") public void testDelegatedProperty() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingByPsiForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingByPsiForLibraryTestGenerated.java index fc774ff1e30..8916c787169 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingByPsiForLibraryTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingByPsiForLibraryTestGenerated.java @@ -96,6 +96,12 @@ public class SymbolLightClassesParentingByPsiForLibraryTestGenerated extends Abs runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultMethodInKotlinWithSettingAllCompatibility.kt"); } + @Test + @TestMetadata("defaultParameterValue.kt") + public void testDefaultParameterValue() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.kt"); + } + @Test @TestMetadata("DelegatedProperty.kt") public void testDelegatedProperty() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java index 598261e75c5..0d620de0319 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java @@ -96,6 +96,12 @@ public class SymbolLightClassesByPsiForSourceTestGenerated extends AbstractSymbo runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultMethodInKotlinWithSettingAllCompatibility.kt"); } + @Test + @TestMetadata("defaultParameterValue.kt") + public void testDefaultParameterValue() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.kt"); + } + @Test @TestMetadata("DelegatedProperty.kt") public void testDelegatedProperty() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesEqualityByPsiForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesEqualityByPsiForSourceTestGenerated.java index 9f637cd3bbf..4d7ec17e946 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesEqualityByPsiForSourceTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesEqualityByPsiForSourceTestGenerated.java @@ -96,6 +96,12 @@ public class SymbolLightClassesEqualityByPsiForSourceTestGenerated extends Abstr runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultMethodInKotlinWithSettingAllCompatibility.kt"); } + @Test + @TestMetadata("defaultParameterValue.kt") + public void testDefaultParameterValue() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.kt"); + } + @Test @TestMetadata("DelegatedProperty.kt") public void testDelegatedProperty() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingByPsiForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingByPsiForSourceTestGenerated.java index c0353e6212a..2703525a0ac 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingByPsiForSourceTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingByPsiForSourceTestGenerated.java @@ -96,6 +96,12 @@ public class SymbolLightClassesParentingByPsiForSourceTestGenerated extends Abst runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultMethodInKotlinWithSettingAllCompatibility.kt"); } + @Test + @TestMetadata("defaultParameterValue.kt") + public void testDefaultParameterValue() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.kt"); + } + @Test @TestMetadata("DelegatedProperty.kt") public void testDelegatedProperty() throws Exception { diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.fir.java new file mode 100644 index 00000000000..ba9c5b86e13 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.fir.java @@ -0,0 +1,113 @@ +public enum Em /* Em*/ { + FOO, + BAR; + + @org.jetbrains.annotations.NotNull() + public static Em valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String) + + @org.jetbrains.annotations.NotNull() + public static Em[] values();// values() + + @org.jetbrains.annotations.NotNull() + public static kotlin.enums.EnumEntries getEntries();// getEntries() + + private Em();// .ctor() +} + +public final class Foo /* Foo*/ { + @org.jetbrains.annotations.NotNull() + private final Em em = Em.BAR /* initializer type: Em */; + + @org.jetbrains.annotations.NotNull() + private final Em[] emarr = {Em.FOO, Em.BAR} /* initializer type: null */; + + @org.jetbrains.annotations.NotNull() + private final double[] darr = {7.3} /* initializer type: null */; + + @org.jetbrains.annotations.NotNull() + private final int[] iarr = {1, 2, 3} /* initializer type: null */; + + @org.jetbrains.annotations.NotNull() + private final java.lang.Class cl; + + @org.jetbrains.annotations.NotNull() + private final java.lang.Class[] clarr = {} /* initializer type: null */; + + @org.jetbrains.annotations.NotNull() + private final java.lang.String s = "foo" /* initializer type: java.lang.String */; + + @org.jetbrains.annotations.NotNull() + private final java.lang.String[] sarr = {"a", "bc"} /* initializer type: null */; + + @org.jetbrains.annotations.NotNull() + private final long[] larr = {-1L, 0L, 1L} /* initializer type: null */; + + private final boolean z = true /* initializer type: boolean */; + + private final byte b = 1 /* initializer type: int */; + + private final char c = 'c' /* initializer type: char */; + + private final char c2 = '\n' /* initializer type: char */; + + private final double d = -1.0 /* initializer type: double */; + + private final float f = 1.0f /* initializer type: float */; + + private final int i = 10 /* initializer type: int */; + + private final long l = -10L /* initializer type: long */; + + private final short sh = 10 /* initializer type: int */; + + @org.jetbrains.annotations.NotNull() + public final Em getEm();// getEm() + + @org.jetbrains.annotations.NotNull() + public final Em[] getEmarr();// getEmarr() + + @org.jetbrains.annotations.NotNull() + public final double[] getDarr();// getDarr() + + @org.jetbrains.annotations.NotNull() + public final int[] getIarr();// getIarr() + + @org.jetbrains.annotations.NotNull() + public final java.lang.Class getCl();// getCl() + + @org.jetbrains.annotations.NotNull() + public final java.lang.Class[] getClarr();// getClarr() + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getS();// getS() + + @org.jetbrains.annotations.NotNull() + public final java.lang.String[] getSarr();// getSarr() + + @org.jetbrains.annotations.NotNull() + public final long[] getLarr();// getLarr() + + public Foo();// .ctor() + + public Foo(boolean, byte, char, char, short, int, long, float, double, @org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() int[], @org.jetbrains.annotations.NotNull() long[], @org.jetbrains.annotations.NotNull() double[], @org.jetbrains.annotations.NotNull() java.lang.String[], @org.jetbrains.annotations.NotNull() java.lang.Class, @org.jetbrains.annotations.NotNull() java.lang.Class[], @org.jetbrains.annotations.NotNull() Em, @org.jetbrains.annotations.NotNull() Em[]);// .ctor(boolean, byte, char, char, short, int, long, float, double, java.lang.String, int[], long[], double[], java.lang.String[], java.lang.Class, java.lang.Class[], Em, Em[]) + + public final boolean getZ();// getZ() + + public final byte getB();// getB() + + public final char getC();// getC() + + public final char getC2();// getC2() + + public final double getD();// getD() + + public final float getF();// getF() + + public final int getI();// getI() + + public final long getL();// getL() + + public final short getSh();// getSh() + + public final void foo(int);// foo(int) +} diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.java new file mode 100644 index 00000000000..bcf2f0c6dfc --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.java @@ -0,0 +1,110 @@ +public enum Em /* Em*/ { + FOO, + BAR; + + @org.jetbrains.annotations.NotNull() + public static Em valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String) + + @org.jetbrains.annotations.NotNull() + public static Em[] values();// values() + + private Em();// .ctor() +} + +public final class Foo /* Foo*/ { + @org.jetbrains.annotations.NotNull() + private final Em em; + + @org.jetbrains.annotations.NotNull() + private final Em[] emarr; + + @org.jetbrains.annotations.NotNull() + private final double[] darr; + + @org.jetbrains.annotations.NotNull() + private final int[] iarr; + + @org.jetbrains.annotations.NotNull() + private final java.lang.Class cl; + + @org.jetbrains.annotations.NotNull() + private final java.lang.Class[] clarr; + + @org.jetbrains.annotations.NotNull() + private final java.lang.String s; + + @org.jetbrains.annotations.NotNull() + private final java.lang.String[] sarr; + + @org.jetbrains.annotations.NotNull() + private final long[] larr; + + private final boolean z; + + private final byte b; + + private final char c2; + + private final char c; + + private final double d; + + private final float f; + + private final int i; + + private final long l; + + private final short sh; + + @org.jetbrains.annotations.NotNull() + public final Em getEm();// getEm() + + @org.jetbrains.annotations.NotNull() + public final Em[] getEmarr();// getEmarr() + + @org.jetbrains.annotations.NotNull() + public final double[] getDarr();// getDarr() + + @org.jetbrains.annotations.NotNull() + public final int[] getIarr();// getIarr() + + @org.jetbrains.annotations.NotNull() + public final java.lang.Class getCl();// getCl() + + @org.jetbrains.annotations.NotNull() + public final java.lang.Class[] getClarr();// getClarr() + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getS();// getS() + + @org.jetbrains.annotations.NotNull() + public final java.lang.String[] getSarr();// getSarr() + + @org.jetbrains.annotations.NotNull() + public final long[] getLarr();// getLarr() + + public Foo();// .ctor() + + public Foo(boolean, byte, char, char, short, int, long, float, double, @org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() int[], @org.jetbrains.annotations.NotNull() long[], @org.jetbrains.annotations.NotNull() double[], @org.jetbrains.annotations.NotNull() java.lang.String[], @org.jetbrains.annotations.NotNull() java.lang.Class, @org.jetbrains.annotations.NotNull() java.lang.Class[], @org.jetbrains.annotations.NotNull() Em, @org.jetbrains.annotations.NotNull() Em[]);// .ctor(boolean, byte, char, char, short, int, long, float, double, java.lang.String, int[], long[], double[], java.lang.String[], java.lang.Class, java.lang.Class[], Em, Em[]) + + public final boolean getZ();// getZ() + + public final byte getB();// getB() + + public final char getC();// getC() + + public final char getC2();// getC2() + + public final double getD();// getD() + + public final float getF();// getF() + + public final int getI();// getI() + + public final long getL();// getL() + + public final short getSh();// getSh() + + public final void foo(int);// foo(int) +} diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.kt b/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.kt new file mode 100644 index 00000000000..70031bb1253 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.kt @@ -0,0 +1,27 @@ +// Foo +class Foo( + val z: Boolean = true, + val b: Byte = 1.toByte(), + val c: Char = 'c', + val c2: Char = '\n', + val sh: Short = 10.toShort(), + val i: Int = 10, + val l: Long = -10L, + val f: Float = 1.0f, + val d: Double = -1.0, + val s: String = "foo", + val iarr: IntArray = intArrayOf(1, 2, 3), + val larr: LongArray = longArrayOf(-1L, 0L, 1L), + val darr: DoubleArray = doubleArrayOf(7.3), + val sarr: Array = arrayOf("a", "bc"), + val cl: Class<*> = Foo::class.java, + val clarr: Array> = arrayOf(Foo::class.java), + val em: Em = Em.BAR, + val emarr: Array = arrayOf(Em.FOO, Em.BAR) +) { + fun foo(a: Int = 5) {} +} + +enum class Em { + FOO, BAR +} diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.lib.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.lib.java new file mode 100644 index 00000000000..7f3af619712 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/defaultParameterValue.lib.java @@ -0,0 +1,113 @@ +public enum Em /* Em*/ { + FOO, + BAR; + + @org.jetbrains.annotations.NotNull() + public static Em valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String) + + @org.jetbrains.annotations.NotNull() + public static Em[] values();// values() + + @org.jetbrains.annotations.NotNull() + public static kotlin.enums.EnumEntries getEntries();// getEntries() + + private Em();// .ctor() +} + +public final class Foo /* Foo*/ { + @org.jetbrains.annotations.NotNull() + private final Em em; + + @org.jetbrains.annotations.NotNull() + private final Em[] emarr; + + @org.jetbrains.annotations.NotNull() + private final double[] darr; + + @org.jetbrains.annotations.NotNull() + private final int[] iarr; + + @org.jetbrains.annotations.NotNull() + private final java.lang.Class cl; + + @org.jetbrains.annotations.NotNull() + private final java.lang.Class[] clarr; + + @org.jetbrains.annotations.NotNull() + private final java.lang.String s; + + @org.jetbrains.annotations.NotNull() + private final java.lang.String[] sarr; + + @org.jetbrains.annotations.NotNull() + private final long[] larr; + + private final boolean z; + + private final byte b; + + private final char c2; + + private final char c; + + private final double d; + + private final float f; + + private final int i; + + private final long l; + + private final short sh; + + @org.jetbrains.annotations.NotNull() + public final Em getEm();// getEm() + + @org.jetbrains.annotations.NotNull() + public final Em[] getEmarr();// getEmarr() + + @org.jetbrains.annotations.NotNull() + public final double[] getDarr();// getDarr() + + @org.jetbrains.annotations.NotNull() + public final int[] getIarr();// getIarr() + + @org.jetbrains.annotations.NotNull() + public final java.lang.Class getCl();// getCl() + + @org.jetbrains.annotations.NotNull() + public final java.lang.Class[] getClarr();// getClarr() + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getS();// getS() + + @org.jetbrains.annotations.NotNull() + public final java.lang.String[] getSarr();// getSarr() + + @org.jetbrains.annotations.NotNull() + public final long[] getLarr();// getLarr() + + public Foo();// .ctor() + + public Foo(boolean, byte, char, char, short, int, long, float, double, @org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() int[], @org.jetbrains.annotations.NotNull() long[], @org.jetbrains.annotations.NotNull() double[], @org.jetbrains.annotations.NotNull() java.lang.String[], @org.jetbrains.annotations.NotNull() java.lang.Class, @org.jetbrains.annotations.NotNull() java.lang.Class[], @org.jetbrains.annotations.NotNull() Em, @org.jetbrains.annotations.NotNull() Em[]);// .ctor(boolean, byte, char, char, short, int, long, float, double, java.lang.String, int[], long[], double[], java.lang.String[], java.lang.Class, java.lang.Class[], Em, Em[]) + + public final boolean getZ();// getZ() + + public final byte getB();// getB() + + public final char getC();// getC() + + public final char getC2();// getC2() + + public final double getD();// getD() + + public final float getF();// getF() + + public final int getI();// getI() + + public final long getL();// getL() + + public final short getSh();// getSh() + + public final void foo(int);// foo(int) +}