diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index f6964040350..ae0eaa5c9b3 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -21220,6 +21220,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors.kt"); } + @Test + @TestMetadata("conflictingOverloadsForThrowableInheritors2.kt") + public void testConflictingOverloadsForThrowableInheritors2() throws Exception { + runTest("compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors2.kt"); + } + @Test @TestMetadata("genericSamProjectedOut.kt") public void testGenericSamProjectedOut() throws Exception { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt index dfcaf385ae7..eee9adfbbcd 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt @@ -137,6 +137,7 @@ class FirSignatureEnhancement( symbol = FirAccessorSymbol(accessorSymbol.callableId, accessorSymbol.accessorId) delegateGetter = enhancedGetterSymbol.fir as FirSimpleFunction delegateSetter = enhancedSetterSymbol?.fir as FirSimpleFunction? + status = firElement.status }.symbol } else -> { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index 1a0d0b2652c..2a56c0ab7f7 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.java.scopes +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty @@ -57,22 +58,33 @@ class JavaClassUseSiteMemberScope( private fun generateAccessorSymbol( getterSymbol: FirNamedFunctionSymbol, setterSymbol: FirNamedFunctionSymbol?, - syntheticPropertyName: Name, + property: FirProperty, ): FirAccessorSymbol { - return accessorByNameMap.getOrPut(syntheticPropertyName) { + return accessorByNameMap.getOrPut(property.name) { buildSyntheticProperty { session = this@JavaClassUseSiteMemberScope.session - name = syntheticPropertyName + name = property.name symbol = FirAccessorSymbol( accessorId = getterSymbol.callableId, - callableId = CallableId(getterSymbol.callableId.packageName, getterSymbol.callableId.className, syntheticPropertyName) + callableId = CallableId(getterSymbol.callableId.packageName, getterSymbol.callableId.className, property.name) ) delegateGetter = getterSymbol.fir delegateSetter = setterSymbol?.fir + status = getterSymbol.fir.status.copy(newModality = chooseModalityForAccessor(property, delegateGetter)) }.symbol } } + private fun chooseModalityForAccessor(property: FirProperty, getter: FirSimpleFunction): Modality? { + val a = property.modality + val b = getter.modality + + if (a == null) return b + if (b == null) return a + + return minOf(a, b) + } + override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) { val fields = mutableSetOf>() val fieldNames = mutableSetOf() @@ -95,7 +107,9 @@ class JavaClassUseSiteMemberScope( continue } if (propertyFromSupertype !is FirPropertySymbol) continue - val overrideInClass = propertyFromSupertype.createOverridePropertyIfExists(declaredMemberScope) + val overrideInClass = + propertyFromSupertype.createOverridePropertyIfExists(declaredMemberScope) + ?: propertyFromSupertype.createOverridePropertyIfExists(superTypesScope) when { overrideInClass != null -> { directOverriddenProperties.getOrPut(overrideInClass) { mutableListOf() }.add(propertyFromSupertype) @@ -117,7 +131,7 @@ class JavaClassUseSiteMemberScope( null if (setterSymbol != null && setterSymbol.fir.modality != getterSymbol.fir.modality) return null - return generateAccessorSymbol(getterSymbol, setterSymbol, fir.name) + return generateAccessorSymbol(getterSymbol, setterSymbol, fir) } private fun FirPropertySymbol.findGetterOverride( @@ -227,10 +241,10 @@ class JavaClassUseSiteMemberScope( val overrideCandidates = result.toMutableSet() - superTypesScope.processFunctionsByName(name) { - val overriddenBy = it.getOverridden(overrideCandidates) - if (overriddenBy == null) { - result += it + superTypesScope.processFunctionsByName(name) { functionSymbol -> + val overriddenBy = functionSymbol.getOverridden(overrideCandidates) + if (overriddenBy == null && overriddenProperties.none { it.isOverriddenInClassBy(functionSymbol) }) { + result += functionSymbol } } @@ -240,7 +254,13 @@ class JavaClassUseSiteMemberScope( private fun FirPropertySymbol.isOverriddenInClassBy(functionSymbol: FirNamedFunctionSymbol): Boolean { val fir = fir as? FirSyntheticProperty ?: return false - return fir.getter.delegate.symbol == functionSymbol || fir.setter?.delegate?.symbol == functionSymbol + if (fir.getter.delegate.symbol == functionSymbol || fir.setter?.delegate?.symbol == functionSymbol) return true + + val currentJvmDescriptor = functionSymbol.fir.computeJvmDescriptor(includeReturnType = false) + val getterJvmDescriptor = fir.getter.delegate.computeJvmDescriptor(includeReturnType = false) + val setterJvmDescriptor = fir.setter?.delegate?.computeJvmDescriptor(includeReturnType = false) + + return currentJvmDescriptor == getterJvmDescriptor || currentJvmDescriptor == setterJvmDescriptor } private fun addOverriddenSpecialMethods( diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyBuilder.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyBuilder.kt index 6f0ee2f0fa3..b93d78ee0ba 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyBuilder.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/synthetic/FirSyntheticPropertyBuilder.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.declarations.synthetic import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.modality @@ -18,11 +19,13 @@ class FirSyntheticPropertyBuilder { lateinit var name: Name lateinit var symbol: FirAccessorSymbol lateinit var delegateGetter: FirSimpleFunction + + var status: FirDeclarationStatus? = null var delegateSetter: FirSimpleFunction? = null fun build(): FirSyntheticProperty = FirSyntheticProperty( session, name, isVar = delegateSetter != null, symbol = symbol, - status = delegateGetter.status, + status = status ?: delegateGetter.status, resolvePhase = delegateGetter.resolvePhase, getter = FirSyntheticPropertyAccessor(delegateGetter, isGetter = true), setter = delegateSetter?.let { FirSyntheticPropertyAccessor(it, isGetter = false) } diff --git a/compiler/testData/codegen/box/collections/inheritFromHashtable.kt b/compiler/testData/codegen/box/collections/inheritFromHashtable.kt index 1880b44d06f..1493ad38c09 100644 --- a/compiler/testData/codegen/box/collections/inheritFromHashtable.kt +++ b/compiler/testData/codegen/box/collections/inheritFromHashtable.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME // FULL_JDK @@ -9,4 +8,4 @@ class A : Hashtable() fun box(): String { val sz = A().size return "OK" -} \ No newline at end of file +} diff --git a/compiler/testData/codegen/box/collections/irrelevantImplMutableListSubstitution.kt b/compiler/testData/codegen/box/collections/irrelevantImplMutableListSubstitution.kt index 0f94791f34d..6e60e2782f2 100644 --- a/compiler/testData/codegen/box/collections/irrelevantImplMutableListSubstitution.kt +++ b/compiler/testData/codegen/box/collections/irrelevantImplMutableListSubstitution.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: J.java diff --git a/compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors.kt b/compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors.kt index da356e6aa23..3263d2d1eb8 100644 --- a/compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors.kt +++ b/compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FULL_JDK // ISSUE: KT-45584 @@ -11,10 +10,12 @@ public interface PlaceholderExceptionSupport { // FILE: PlaceholderException.java -public class PlaceholderException extends RuntimeException implements PlaceholderExceptionSupport {} +public class PlaceholderException extends RuntimeException implements PlaceholderExceptionSupport { + public PlaceholderException(String x) { super(x); } +} // FILE: main.kt -class KotlinTestFailure : PlaceholderException() {} // <-- CONFLICTING_INHERITED_JVM_DECLARATIONS +class KotlinTestFailure : PlaceholderException("OK") {} // <-- CONFLICTING_INHERITED_JVM_DECLARATIONS -fun box(): String = "OK" +fun box(): String = KotlinTestFailure().message ?: "fail" diff --git a/compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors2.kt b/compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors2.kt new file mode 100644 index 00000000000..3263d2d1eb8 --- /dev/null +++ b/compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors2.kt @@ -0,0 +1,21 @@ +// TARGET_BACKEND: JVM +// FULL_JDK +// ISSUE: KT-45584 + +// FILE: PlaceholderExceptionSupport.java + +public interface PlaceholderExceptionSupport { + String getMessage(); +} + +// FILE: PlaceholderException.java + +public class PlaceholderException extends RuntimeException implements PlaceholderExceptionSupport { + public PlaceholderException(String x) { super(x); } +} + +// FILE: main.kt + +class KotlinTestFailure : PlaceholderException("OK") {} // <-- CONFLICTING_INHERITED_JVM_DECLARATIONS + +fun box(): String = KotlinTestFailure().message ?: "fail" diff --git a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableList.fir.kt b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableList.fir.kt index 014849f0c5d..a05a08eca6a 100644 --- a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableList.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/irrelevantImplMutableList.fir.kt @@ -108,7 +108,7 @@ public class A extends AImpl implements List { } // FILE: X.kt -class X : A() +class X : A() fun main() { val x = X() diff --git a/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/hashtableInheritance.fir.kt b/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/hashtableInheritance.fir.kt deleted file mode 100644 index 7ddd0df668f..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/hashtableInheritance.fir.kt +++ /dev/null @@ -1,6 +0,0 @@ -// FULL_JDK - -class C1 : java.util.Hashtable() -class C2 : java.util.Hashtable() { - override fun get(key: String) = 123 -} diff --git a/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/hashtableInheritance.kt b/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/hashtableInheritance.kt index 3fb99cd2976..6e915ccf91e 100644 --- a/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/hashtableInheritance.kt +++ b/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/hashtableInheritance.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FULL_JDK class C1 : java.util.Hashtable() diff --git a/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/securityProvider.fir.kt b/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/securityProvider.fir.kt deleted file mode 100644 index 7208e1f0612..00000000000 --- a/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/securityProvider.fir.kt +++ /dev/null @@ -1,5 +0,0 @@ -// FULL_JDK - -import java.security.Provider - -class Example : Provider("A", 1.0, "B") diff --git a/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/securityProvider.kt b/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/securityProvider.kt index 9a532723211..7849c5231ec 100644 --- a/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/securityProvider.kt +++ b/compiler/testData/diagnostics/tests/j+k/specialBuiltIns/securityProvider.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FULL_JDK import java.security.Provider diff --git a/compiler/testData/ir/irText/expressions/callableReferences/varargFunImportedFromObject.fir.txt b/compiler/testData/ir/irText/expressions/callableReferences/varargFunImportedFromObject.fir.txt index fa7bd228346..762905bf794 100644 --- a/compiler/testData/ir/irText/expressions/callableReferences/varargFunImportedFromObject.fir.txt +++ b/compiler/testData/ir/irText/expressions/callableReferences/varargFunImportedFromObject.fir.txt @@ -46,6 +46,7 @@ FILE fqName: fileName:/varargFunImportedFromObject.kt x: VARARG type=kotlin.Array varargElementType=kotlin.String GET_VAR 'p0: kotlin.String declared in .test1.foo' type=kotlin.String origin=null FUNCTION_REFERENCE 'local final fun foo (p0: kotlin.String): kotlin.String declared in .test1' type=kotlin.Function1 origin=ADAPTED_FUNCTION_REFERENCE reflectionTarget=null + $receiver: GET_OBJECT 'CLASS OBJECT name:Host modality:FINAL visibility:public superTypes:[kotlin.Any]' type=.Host FUN name:test2 visibility:public modality:FINAL <> () returnType:kotlin.String BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun test2 (): kotlin.String declared in ' diff --git a/compiler/testData/ir/irText/expressions/callableReferences/withAdaptedArguments.fir.kt.txt b/compiler/testData/ir/irText/expressions/callableReferences/withAdaptedArguments.fir.kt.txt index bd358b64efa..3940b664756 100644 --- a/compiler/testData/ir/irText/expressions/callableReferences/withAdaptedArguments.fir.kt.txt +++ b/compiler/testData/ir/irText/expressions/callableReferences/withAdaptedArguments.fir.kt.txt @@ -61,7 +61,7 @@ fun testImportedObjectMember(): String { return receiver.importedObjectMemberWithVarargs(xs = [p0]) } - ::importedObjectMemberWithVarargs + Host::importedObjectMemberWithVarargs }) } diff --git a/compiler/testData/ir/irText/expressions/callableReferences/withAdaptedArguments.fir.txt b/compiler/testData/ir/irText/expressions/callableReferences/withAdaptedArguments.fir.txt index c37272be7a3..a91455bbaf0 100644 --- a/compiler/testData/ir/irText/expressions/callableReferences/withAdaptedArguments.fir.txt +++ b/compiler/testData/ir/irText/expressions/callableReferences/withAdaptedArguments.fir.txt @@ -111,6 +111,7 @@ FILE fqName: fileName:/withAdaptedArguments.kt xs: VARARG type=kotlin.IntArray varargElementType=kotlin.Int GET_VAR 'p0: kotlin.Int declared in .testImportedObjectMember.importedObjectMemberWithVarargs' type=kotlin.Int origin=null FUNCTION_REFERENCE 'local final fun importedObjectMemberWithVarargs (p0: kotlin.Int): kotlin.String declared in .testImportedObjectMember' type=kotlin.Function1 origin=ADAPTED_FUNCTION_REFERENCE reflectionTarget=null + $receiver: GET_OBJECT 'CLASS OBJECT name:Host modality:FINAL visibility:public superTypes:[kotlin.Any]' type=.Host FUN name:testDefault0 visibility:public modality:FINAL <> () returnType:kotlin.String BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun testDefault0 (): kotlin.String declared in ' diff --git a/compiler/testData/ir/irText/expressions/callableReferences/withArgumentAdaptationAndReceiver.fir.kt.txt b/compiler/testData/ir/irText/expressions/callableReferences/withArgumentAdaptationAndReceiver.fir.kt.txt index 706b2504009..ccdc8454781 100644 --- a/compiler/testData/ir/irText/expressions/callableReferences/withArgumentAdaptationAndReceiver.fir.kt.txt +++ b/compiler/testData/ir/irText/expressions/callableReferences/withArgumentAdaptationAndReceiver.fir.kt.txt @@ -19,7 +19,7 @@ class Host { receiver.withVararg(xs = [p0]) } - Host::withVararg + ::withVararg }) } diff --git a/compiler/testData/ir/irText/expressions/callableReferences/withArgumentAdaptationAndReceiver.fir.txt b/compiler/testData/ir/irText/expressions/callableReferences/withArgumentAdaptationAndReceiver.fir.txt index 6243cc610d9..8ceeb35e6e2 100644 --- a/compiler/testData/ir/irText/expressions/callableReferences/withArgumentAdaptationAndReceiver.fir.txt +++ b/compiler/testData/ir/irText/expressions/callableReferences/withArgumentAdaptationAndReceiver.fir.txt @@ -31,6 +31,7 @@ FILE fqName: fileName:/withArgumentAdaptationAndReceiver.kt xs: VARARG type=kotlin.IntArray varargElementType=kotlin.Int GET_VAR 'p0: kotlin.Int declared in .Host.testImplicitThis.withVararg' type=kotlin.Int origin=null FUNCTION_REFERENCE 'local final fun withVararg (p0: kotlin.Int): kotlin.Unit declared in .Host.testImplicitThis' type=kotlin.Function1 origin=ADAPTED_FUNCTION_REFERENCE reflectionTarget=null + $receiver: GET_VAR ': .Host declared in .Host.testImplicitThis' type=.Host origin=null FUN name:testBoundReceiverLocalVal visibility:public modality:FINAL <> ($this:.Host) returnType:kotlin.Unit $this: VALUE_PARAMETER name: type:.Host BLOCK_BODY diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index e321fec6027..a0c25692a02 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -21202,6 +21202,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors.kt"); } + @Test + @TestMetadata("conflictingOverloadsForThrowableInheritors2.kt") + public void testConflictingOverloadsForThrowableInheritors2() throws Exception { + runTest("compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors2.kt"); + } + @Test @TestMetadata("genericSamProjectedOut.kt") public void testGenericSamProjectedOut() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index f80838c73ef..c11e0df58e6 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -21220,6 +21220,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors.kt"); } + @Test + @TestMetadata("conflictingOverloadsForThrowableInheritors2.kt") + public void testConflictingOverloadsForThrowableInheritors2() throws Exception { + runTest("compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors2.kt"); + } + @Test @TestMetadata("genericSamProjectedOut.kt") public void testGenericSamProjectedOut() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 532a5bf2754..71ec4448156 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -17757,6 +17757,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors.kt"); } + @TestMetadata("conflictingOverloadsForThrowableInheritors2.kt") + public void testConflictingOverloadsForThrowableInheritors2() throws Exception { + runTest("compiler/testData/codegen/box/javaInterop/conflictingOverloadsForThrowableInheritors2.kt"); + } + @TestMetadata("genericSamProjectedOut.kt") public void testGenericSamProjectedOut() throws Exception { runTest("compiler/testData/codegen/box/javaInterop/genericSamProjectedOut.kt");