JVM IR: fix flags of $default methods in multi-file facades
Do not change origin of multifile class bridges to something else because, as it turns out, there are numerous origin-specific checks in the codegen that start to behave differently for multifile bridges. Instead of the method-targeted origin MULTIFILE_BRIDGE, use new class origin JVM_MULTIFILE_CLASS to detect whether a declaration is a multifile bridge. #KT-40198 Fixed #KT-43145 Fixed
This commit is contained in:
@@ -18,7 +18,6 @@ interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin {
|
||||
object DEFAULT_IMPLS_BRIDGE_FOR_COMPATIBILITY : IrDeclarationOriginImpl("DEFAULT_IMPLS_BRIDGE_FOR_COMPATIBILITY")
|
||||
object DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC : IrDeclarationOriginImpl("DEFAULT_IMPLS_BRIDGE_TO_SYNTHETIC", isSynthetic = true)
|
||||
object DEFAULT_IMPLS_BRIDGE_FOR_COMPATIBILITY_SYNTHETIC : IrDeclarationOriginImpl("DEFAULT_IMPLS_BRIDGE_FOR_COMPATIBILITY_SYNTHETIC", isSynthetic = true)
|
||||
object MULTIFILE_BRIDGE : IrDeclarationOriginImpl("MULTIFILE_BRIDGE")
|
||||
object FIELD_FOR_OUTER_THIS : IrDeclarationOriginImpl("FIELD_FOR_OUTER_THIS")
|
||||
object LAMBDA_IMPL : IrDeclarationOriginImpl("LAMBDA_IMPL")
|
||||
object FUNCTION_REFERENCE_IMPL : IrDeclarationOriginImpl("FUNCTION_REFERENCE_IMPL", isSynthetic = true)
|
||||
|
||||
+3
-4
@@ -65,11 +65,10 @@ class JvmGeneratorExtensions(private val generateFacades: Boolean = true) : Gene
|
||||
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB
|
||||
|
||||
override fun generateFacadeClass(irFactory: IrFactory, source: DeserializedContainerSource): IrClass? {
|
||||
if (!generateFacades) return null
|
||||
val jvmPackagePartSource = source as? JvmPackagePartSource ?: return null
|
||||
val facadeName = jvmPackagePartSource.facadeClassName ?: jvmPackagePartSource.className
|
||||
if (!generateFacades || source !is JvmPackagePartSource) return null
|
||||
val facadeName = source.facadeClassName ?: source.className
|
||||
return irFactory.buildClass {
|
||||
origin = IrDeclarationOrigin.FILE_CLASS
|
||||
origin = if (source.facadeClassName != null) IrDeclarationOrigin.JVM_MULTIFILE_CLASS else IrDeclarationOrigin.FILE_CLASS
|
||||
name = facadeName.fqNameForTopLevelClassMaybeWithDollars.shortName()
|
||||
}.also {
|
||||
it.createParameterDeclarations()
|
||||
|
||||
+3
-2
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
||||
import org.jetbrains.kotlin.backend.jvm.ir.isStaticInlineClassReplacement
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.InlineClassAbi
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.unboxInlineClass
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.isMultifileBridge
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.suspendFunctionOriginal
|
||||
import org.jetbrains.kotlin.codegen.ClassBuilder
|
||||
import org.jetbrains.kotlin.codegen.coroutines.CoroutineTransformerMethodVisitor
|
||||
@@ -143,7 +144,6 @@ internal fun IrFunction.shouldContainSuspendMarkers(): Boolean = !isInvokeSuspen
|
||||
// These are tail-call bridges and do not require any bytecode modifications.
|
||||
origin != IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER &&
|
||||
origin != JvmLoweredDeclarationOrigin.JVM_OVERLOADS_WRAPPER &&
|
||||
origin != JvmLoweredDeclarationOrigin.MULTIFILE_BRIDGE &&
|
||||
origin != JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR &&
|
||||
origin != JvmLoweredDeclarationOrigin.SYNTHETIC_ACCESSOR_FOR_HIDDEN_CONSTRUCTOR &&
|
||||
origin != JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE &&
|
||||
@@ -153,6 +153,7 @@ internal fun IrFunction.shouldContainSuspendMarkers(): Boolean = !isInvokeSuspen
|
||||
origin != IrDeclarationOrigin.BRIDGE &&
|
||||
origin != IrDeclarationOrigin.BRIDGE_SPECIAL &&
|
||||
origin != IrDeclarationOrigin.DELEGATED_MEMBER &&
|
||||
!isMultifileBridge() &&
|
||||
!isInvokeOfSuspendCallableReference() &&
|
||||
!isBridgeToSuspendImplMethod() &&
|
||||
!isStaticInlineClassReplacementDelegatingCall()
|
||||
@@ -199,4 +200,4 @@ internal fun IrFunction.originalReturnTypeOfSuspendFunctionReturningUnboxedInlin
|
||||
} != false) return null
|
||||
// Don't box other inline classes
|
||||
return returnType
|
||||
}
|
||||
}
|
||||
|
||||
+18
-18
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.backend.jvm.intrinsics.JavaClassProperty
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.MultifileFacadeFileEntry
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.constantValue
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.unboxInlineClass
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.isMultifileBridge
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.suspendFunctionOriginal
|
||||
import org.jetbrains.kotlin.codegen.*
|
||||
import org.jetbrains.kotlin.codegen.AsmUtil.*
|
||||
@@ -213,7 +214,7 @@ class ExpressionCodegen(
|
||||
fun generate() {
|
||||
mv.visitCode()
|
||||
val startLabel = markNewLabel()
|
||||
if (irFunction.origin == JvmLoweredDeclarationOrigin.MULTIFILE_BRIDGE) {
|
||||
if (irFunction.isMultifileBridge()) {
|
||||
// Multifile bridges need to have line number 1 to be filtered out by the intellij debugging filters.
|
||||
mv.visitLineNumber(1, startLabel)
|
||||
}
|
||||
@@ -279,23 +280,22 @@ class ExpressionCodegen(
|
||||
if (state.isParamAssertionsDisabled)
|
||||
return
|
||||
|
||||
val notCallableFromJava = inlinedInto != null ||
|
||||
(DescriptorVisibilities.isPrivate(irFunction.visibility) && !(irFunction is IrSimpleFunction && irFunction.isOperator)) ||
|
||||
irFunction.origin.isSynthetic ||
|
||||
// TODO: refine this condition to not generate nullability assertions on parameters
|
||||
// corresponding to captured variables and anonymous object super constructor arguments
|
||||
(irFunction is IrConstructor && irFunction.parentAsClass.isAnonymousObject) ||
|
||||
// TODO: Implement this as a lowering, so that we can more easily exclude generated methods.
|
||||
irFunction.origin == JvmLoweredDeclarationOrigin.INLINE_CLASS_GENERATED_IMPL_METHOD ||
|
||||
// Although these are accessible from Java, the functions they bridge to already have the assertions.
|
||||
irFunction.origin == IrDeclarationOrigin.BRIDGE_SPECIAL ||
|
||||
irFunction.origin == JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE ||
|
||||
irFunction.origin == JvmLoweredDeclarationOrigin.JVM_STATIC_WRAPPER ||
|
||||
irFunction.origin == JvmLoweredDeclarationOrigin.MULTIFILE_BRIDGE ||
|
||||
irFunction.parentAsClass.origin == JvmLoweredDeclarationOrigin.CONTINUATION_CLASS ||
|
||||
irFunction.parentAsClass.origin == JvmLoweredDeclarationOrigin.SUSPEND_LAMBDA
|
||||
|
||||
if (notCallableFromJava)
|
||||
if (inlinedInto != null ||
|
||||
(DescriptorVisibilities.isPrivate(irFunction.visibility) && !(irFunction is IrSimpleFunction && irFunction.isOperator)) ||
|
||||
irFunction.origin.isSynthetic ||
|
||||
// TODO: refine this condition to not generate nullability assertions on parameters
|
||||
// corresponding to captured variables and anonymous object super constructor arguments
|
||||
(irFunction is IrConstructor && irFunction.parentAsClass.isAnonymousObject) ||
|
||||
// TODO: Implement this as a lowering, so that we can more easily exclude generated methods.
|
||||
irFunction.origin == JvmLoweredDeclarationOrigin.INLINE_CLASS_GENERATED_IMPL_METHOD ||
|
||||
// Although these are accessible from Java, the functions they bridge to already have the assertions.
|
||||
irFunction.origin == IrDeclarationOrigin.BRIDGE_SPECIAL ||
|
||||
irFunction.origin == JvmLoweredDeclarationOrigin.DEFAULT_IMPLS_BRIDGE ||
|
||||
irFunction.origin == JvmLoweredDeclarationOrigin.JVM_STATIC_WRAPPER ||
|
||||
irFunction.parentAsClass.origin == JvmLoweredDeclarationOrigin.CONTINUATION_CLASS ||
|
||||
irFunction.parentAsClass.origin == JvmLoweredDeclarationOrigin.SUSPEND_LAMBDA ||
|
||||
irFunction.isMultifileBridge()
|
||||
)
|
||||
return
|
||||
|
||||
// Do not generate non-null checks for suspend functions. When resumed the arguments
|
||||
|
||||
+5
-3
@@ -116,7 +116,7 @@ private fun generateMultifileFacades(
|
||||
}.apply {
|
||||
parent = file
|
||||
createImplicitParameterDeclarationWithWrappedDescriptor()
|
||||
origin = IrDeclarationOrigin.FILE_CLASS
|
||||
origin = IrDeclarationOrigin.JVM_MULTIFILE_CLASS
|
||||
if (jvmClassName.packageFqName != kotlinPackageFqName) {
|
||||
context.classNameOverride[this] = jvmClassName
|
||||
}
|
||||
@@ -230,7 +230,6 @@ private fun IrSimpleFunction.createMultifileDelegateIfNeeded(
|
||||
function.body = null
|
||||
function.overriddenSymbols = listOf(symbol)
|
||||
} else {
|
||||
function.origin = JvmLoweredDeclarationOrigin.MULTIFILE_BRIDGE
|
||||
function.overriddenSymbols = overriddenSymbols.toList()
|
||||
function.body = context.createIrBuilder(function.symbol).irBlockBody {
|
||||
+irReturn(irCall(target).also { call ->
|
||||
@@ -261,7 +260,7 @@ private class UpdateFunctionCallSites(
|
||||
super.visitFunction(declaration, declaration)
|
||||
|
||||
override fun visitCall(expression: IrCall, data: IrFunction?): IrElement {
|
||||
if (data?.origin == JvmLoweredDeclarationOrigin.MULTIFILE_BRIDGE)
|
||||
if (data != null && data.isMultifileBridge())
|
||||
return super.visitCall(expression, data)
|
||||
|
||||
val newFunction = functionDelegates[expression.symbol.owner]
|
||||
@@ -318,3 +317,6 @@ private class UpdateConstantFacadePropertyReferences(
|
||||
) facadeClass else null
|
||||
}
|
||||
}
|
||||
|
||||
internal fun IrFunction.isMultifileBridge(): Boolean =
|
||||
(parent as? IrClass)?.origin == IrDeclarationOrigin.JVM_MULTIFILE_CLASS
|
||||
|
||||
+3
-6
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.backend.jvm.lower
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrModulePhase
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
||||
import org.jetbrains.kotlin.backend.jvm.codegen.isInlineFunctionCall
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
@@ -40,7 +39,7 @@ class ResolveInlineCalls(val context: JvmBackendContext) : IrElementTransformerV
|
||||
val maybeFakeOverrideOfMultiFileBridge = expression.symbol.owner as? IrSimpleFunction
|
||||
?: return super.visitCall(expression)
|
||||
val resolved =
|
||||
maybeFakeOverrideOfMultiFileBridge.resolveMultiFileFacades() ?: maybeFakeOverrideOfMultiFileBridge.resolveFakeOverride()
|
||||
maybeFakeOverrideOfMultiFileBridge.resolveMultiFileFacadeMember() ?: maybeFakeOverrideOfMultiFileBridge.resolveFakeOverride()
|
||||
?: return super.visitCall(expression)
|
||||
return super.visitCall(with(expression) {
|
||||
IrCallImpl(
|
||||
@@ -69,8 +68,6 @@ class ResolveInlineCalls(val context: JvmBackendContext) : IrElementTransformerV
|
||||
})
|
||||
}
|
||||
|
||||
private fun IrFunction.resolveMultiFileFacades(): IrSimpleFunction? =
|
||||
if (origin == JvmLoweredDeclarationOrigin.MULTIFILE_BRIDGE) {
|
||||
context.multifileFacadeMemberToPartMember[this]
|
||||
} else null
|
||||
private fun IrFunction.resolveMultiFileFacadeMember(): IrSimpleFunction? =
|
||||
if (isMultifileBridge()) context.multifileFacadeMemberToPartMember[this] else null
|
||||
}
|
||||
|
||||
@@ -38,6 +38,8 @@ interface IrDeclarationOrigin {
|
||||
|
||||
object FILE_CLASS : IrDeclarationOriginImpl("FILE_CLASS")
|
||||
object SYNTHETIC_FILE_CLASS : IrDeclarationOriginImpl("SYNTHETIC_FILE_CLASS", isSynthetic = true)
|
||||
object JVM_MULTIFILE_CLASS : IrDeclarationOriginImpl("JVM_MULTIFILE_CLASS")
|
||||
|
||||
object SCRIPT_CLASS : IrDeclarationOriginImpl("SCRIPT_CLASS")
|
||||
object SCRIPT_STATEMENT : IrDeclarationOriginImpl("SCRIPT_STATEMENT")
|
||||
object SCRIPT_CALL_PARAMETER : IrDeclarationOriginImpl("SCRIPT_CALL_PARAMETER")
|
||||
|
||||
@@ -529,7 +529,10 @@ val IrFunctionAccessExpression.typeSubstitutionMap: Map<IrTypeParameterSymbol, I
|
||||
get() = getTypeSubstitutionMap(symbol.owner)
|
||||
|
||||
val IrDeclaration.isFileClass: Boolean
|
||||
get() = origin == IrDeclarationOrigin.FILE_CLASS || origin == IrDeclarationOrigin.SYNTHETIC_FILE_CLASS
|
||||
get() =
|
||||
origin == IrDeclarationOrigin.FILE_CLASS ||
|
||||
origin == IrDeclarationOrigin.SYNTHETIC_FILE_CLASS ||
|
||||
origin == IrDeclarationOrigin.JVM_MULTIFILE_CLASS
|
||||
|
||||
val IrValueDeclaration.isImmutable: Boolean
|
||||
get() = this is IrValueParameter || this is IrVariable && !isVar
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// WITH_RUNTIME
|
||||
// The difference of JVM and JVM_IR in generating privateFunction here is reported at KT-41841.
|
||||
// FILE: test.kt
|
||||
|
||||
@file:JvmMultifileClass
|
||||
@file:JvmName("A")
|
||||
|
||||
private fun private(x: String = "") {}
|
||||
|
||||
private inline fun privateInline(x: String, y: Int = 0) {}
|
||||
|
||||
internal fun internal(x: String = "") {}
|
||||
|
||||
internal inline fun internalInline(x: String, y: Int = 0) {}
|
||||
|
||||
@PublishedApi
|
||||
internal fun published(x: String = "") {}
|
||||
|
||||
@PublishedApi
|
||||
internal fun publishedInline(x: String = "") {}
|
||||
|
||||
public fun public(x: String = "") {}
|
||||
|
||||
public inline fun publicInline(x: String, y: Int = 0) {}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
@kotlin.Metadata
|
||||
public final class A {
|
||||
// source: 'test.kt'
|
||||
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class A__TestKt {
|
||||
// source: 'test.kt'
|
||||
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
synthetic static method private$A__TestKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
private final static method private$A__TestKt(p0: java.lang.String): void
|
||||
synthetic static method privateInline$A__TestKt$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
private final static method privateInline$A__TestKt(p0: java.lang.String, p1: int): void
|
||||
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// WITH_RUNTIME
|
||||
// !INHERIT_MULTIFILE_PARTS
|
||||
// FILE: test.kt
|
||||
|
||||
@file:JvmMultifileClass
|
||||
@file:JvmName("A")
|
||||
|
||||
private fun private(x: String = "") {}
|
||||
|
||||
private inline fun privateInline(x: String, y: Int = 0) {}
|
||||
|
||||
internal fun internal(x: String = "") {}
|
||||
|
||||
internal inline fun internalInline(x: String, y: Int = 0) {}
|
||||
|
||||
@PublishedApi
|
||||
internal fun published(x: String = "") {}
|
||||
|
||||
@PublishedApi
|
||||
internal fun publishedInline(x: String = "") {}
|
||||
|
||||
public fun public(x: String = "") {}
|
||||
|
||||
public inline fun publicInline(x: String, y: Int = 0) {}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
@kotlin.Metadata
|
||||
public final class A {
|
||||
// source: 'test.kt'
|
||||
private method <init>(): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
class A__TestKt {
|
||||
// source: 'test.kt'
|
||||
public method <init>(): void
|
||||
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
synthetic static method private$A__TestKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
private final static method private$A__TestKt(p0: java.lang.String): void
|
||||
synthetic static method privateInline$A__TestKt$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
private final static method privateInline$A__TestKt(p0: java.lang.String, p1: int): void
|
||||
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
@kotlin.Metadata
|
||||
public final class A {
|
||||
// source: 'test.kt'
|
||||
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
synthetic static method private$A__TestKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
synthetic static method privateInline$A__TestKt$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class A__TestKt {
|
||||
// source: 'test.kt'
|
||||
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
synthetic static method private$A__TestKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
private final static method private$A__TestKt(p0: java.lang.String): void
|
||||
synthetic static method privateInline$A__TestKt$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
private final static method privateInline$A__TestKt(p0: java.lang.String, p1: int): void
|
||||
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
|
||||
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
|
||||
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
|
||||
}
|
||||
Vendored
-7
@@ -1,7 +0,0 @@
|
||||
// WITH_RUNTIME
|
||||
// The remaining difference of JVM and JVM_IR here is reported at KT-41841.
|
||||
|
||||
@file:JvmMultifileClass
|
||||
@file:JvmName("A")
|
||||
|
||||
private fun foo(x: String = "") {}
|
||||
Vendored
-11
@@ -1,11 +0,0 @@
|
||||
@kotlin.Metadata
|
||||
public final class A {
|
||||
// source: 'privateFunctionInMultifilePart.kt'
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class A__PrivateFunctionInMultifilePartKt {
|
||||
// source: 'privateFunctionInMultifilePart.kt'
|
||||
synthetic static method foo$A__PrivateFunctionInMultifilePartKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
private final static method foo$A__PrivateFunctionInMultifilePartKt(p0: java.lang.String): void
|
||||
}
|
||||
Vendored
-12
@@ -1,12 +0,0 @@
|
||||
@kotlin.Metadata
|
||||
public final class A {
|
||||
// source: 'privateFunctionInMultifilePart.kt'
|
||||
final static method foo$A__PrivateFunctionInMultifilePartKt$default(@org.jetbrains.annotations.Nullable p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class A__PrivateFunctionInMultifilePartKt {
|
||||
// source: 'privateFunctionInMultifilePart.kt'
|
||||
synthetic static method foo$A__PrivateFunctionInMultifilePartKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
|
||||
private final static method foo$A__PrivateFunctionInMultifilePartKt(p0: java.lang.String): void
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
@kotlin.Metadata
|
||||
public final class Hello/Foo {
|
||||
// source: 'multifileSuspend.kt'
|
||||
public final static method main(@org.jetbrains.annotations.NotNull p0: java.lang.String[]): void
|
||||
public final static @org.jetbrains.annotations.Nullable method main(@org.jetbrains.annotations.NotNull p0: java.lang.String[], @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.Continuation): java.lang.Object
|
||||
public synthetic final static method main(p0: java.lang.String[]): void
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
|
||||
+10
-5
@@ -700,15 +700,20 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeListing/defaultArguments"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
||||
}
|
||||
|
||||
@TestMetadata("functionInMultifileClass.kt")
|
||||
public void testFunctionInMultifileClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/defaultArguments/functionInMultifileClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("functionInMultifileClassWithInheritedParts.kt")
|
||||
public void testFunctionInMultifileClassWithInheritedParts() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/defaultArguments/functionInMultifileClassWithInheritedParts.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("internalNameMangling.kt")
|
||||
public void testInternalNameMangling() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/defaultArguments/internalNameMangling.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("privateFunctionInMultifilePart.kt")
|
||||
public void testPrivateFunctionInMultifilePart() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/defaultArguments/privateFunctionInMultifilePart.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/bytecodeListing/deprecated")
|
||||
|
||||
+10
-5
@@ -670,15 +670,20 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeListing/defaultArguments"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@TestMetadata("functionInMultifileClass.kt")
|
||||
public void testFunctionInMultifileClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/defaultArguments/functionInMultifileClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("functionInMultifileClassWithInheritedParts.kt")
|
||||
public void testFunctionInMultifileClassWithInheritedParts() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/defaultArguments/functionInMultifileClassWithInheritedParts.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("internalNameMangling.kt")
|
||||
public void testInternalNameMangling() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/defaultArguments/internalNameMangling.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("privateFunctionInMultifilePart.kt")
|
||||
public void testPrivateFunctionInMultifilePart() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/defaultArguments/privateFunctionInMultifilePart.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/bytecodeListing/deprecated")
|
||||
|
||||
Reference in New Issue
Block a user