From e0ff7281b4bf8745fcd3e2c86b99de8b12b2ca56 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 21 Dec 2018 10:54:29 +0300 Subject: [PATCH] Minor. Introduce FunctionHandle::mightBeIncorrectCode --- .../kotlin/backend/common/bridges/bridges.kt | 2 ++ .../kotlin/codegen/ClassBuilderMode.java | 20 +++++++++++++------ .../kotlin/codegen/JvmBridgesImpl.kt | 3 +++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/bridges/bridges.kt b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/bridges/bridges.kt index 49123d24cd6..ef205d59729 100644 --- a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/bridges/bridges.kt +++ b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/bridges/bridges.kt @@ -30,6 +30,8 @@ interface FunctionHandle { val mayBeUsedAsSuperImplementation: Boolean fun getOverridden(): Iterable + + val mightBeIncorrectCode: Boolean get() = false } data class Bridge( diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBuilderMode.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBuilderMode.java index 1e9d6ed8054..50245ff9983 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBuilderMode.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBuilderMode.java @@ -23,17 +23,20 @@ public class ClassBuilderMode { public final boolean generateMetadata; public final boolean generateSourceRetentionAnnotations; public final boolean generateMultiFileFacadePartClasses; + public final boolean mightBeIncorrectCode; private ClassBuilderMode( boolean generateBodies, boolean generateMetadata, boolean generateSourceRetentionAnnotations, - boolean generateMultiFileFacadePartClasses + boolean generateMultiFileFacadePartClasses, + boolean mightBeIncorrectCode ) { this.generateBodies = generateBodies; this.generateMetadata = generateMetadata; this.generateSourceRetentionAnnotations = generateSourceRetentionAnnotations; this.generateMultiFileFacadePartClasses = generateMultiFileFacadePartClasses; + this.mightBeIncorrectCode = mightBeIncorrectCode; } /** @@ -43,7 +46,8 @@ public class ClassBuilderMode { /* bodies = */ true, /* metadata = */ true, /* sourceRetention = */ false, - /* generateMultiFileFacadePartClasses = */ true); + /* generateMultiFileFacadePartClasses = */ true, + /* mightBeIncorrectCode = */ false); /** * ABI for compilation (non-private signatures + inline function bodies) @@ -52,7 +56,8 @@ public class ClassBuilderMode { /* bodies = */ true, /* metadata = */ true, /* sourceRetention = */ false, - /* generateMultiFileFacadePartClasses = */ true); + /* generateMultiFileFacadePartClasses = */ true, + /* mightBeIncorrectCode = */ false); /** * Generating light classes: Only function signatures @@ -61,7 +66,8 @@ public class ClassBuilderMode { /* bodies = */ false, /* metadata = */ false, /* sourceRetention = */ true, - /* generateMultiFileFacadePartClasses = */ false); + /* generateMultiFileFacadePartClasses = */ false, + /* mightBeIncorrectCode = */ true); /** * Function signatures + metadata (to support incremental compilation with kapt) @@ -70,12 +76,14 @@ public class ClassBuilderMode { /* bodies = */ false, /* metadata = */ true, /* sourceRetention = */ true, - /* generateMultiFileFacadePartClasses = */ true); + /* generateMultiFileFacadePartClasses = */ true, + /* mightBeIncorrectCode = */ true); @TestOnly public final static ClassBuilderMode LIGHT_ANALYSIS_FOR_TESTS = new ClassBuilderMode( /* bodies = */ false, /* metadata = */ true, /* sourceRetention = */ false, - /* generateMultiFileFacadePartClasses = */ true); + /* generateMultiFileFacadePartClasses = */ true, + /* mightBeIncorrectCode = */ true); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmBridgesImpl.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmBridgesImpl.kt index a27ff951832..f027639a518 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmBridgesImpl.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmBridgesImpl.kt @@ -34,6 +34,9 @@ class DescriptorBasedFunctionHandleForJvm( override val isDeclaration: Boolean = descriptor.kind.isReal || needToGenerateDelegationToDefaultImpls(descriptor) + + override val mightBeIncorrectCode: Boolean + get() = state.classBuilderMode.mightBeIncorrectCode } private fun CallableMemberDescriptor.isJvmDefaultOrPlatformDependent() =