Minor. Introduce FunctionHandle::mightBeIncorrectCode

This commit is contained in:
Denis Zharkov
2018-12-21 10:54:29 +03:00
parent cd51658976
commit e0ff7281b4
3 changed files with 19 additions and 6 deletions
@@ -30,6 +30,8 @@ interface FunctionHandle {
val mayBeUsedAsSuperImplementation: Boolean val mayBeUsedAsSuperImplementation: Boolean
fun getOverridden(): Iterable<FunctionHandle> fun getOverridden(): Iterable<FunctionHandle>
val mightBeIncorrectCode: Boolean get() = false
} }
data class Bridge<out Signature>( data class Bridge<out Signature>(
@@ -23,17 +23,20 @@ public class ClassBuilderMode {
public final boolean generateMetadata; public final boolean generateMetadata;
public final boolean generateSourceRetentionAnnotations; public final boolean generateSourceRetentionAnnotations;
public final boolean generateMultiFileFacadePartClasses; public final boolean generateMultiFileFacadePartClasses;
public final boolean mightBeIncorrectCode;
private ClassBuilderMode( private ClassBuilderMode(
boolean generateBodies, boolean generateBodies,
boolean generateMetadata, boolean generateMetadata,
boolean generateSourceRetentionAnnotations, boolean generateSourceRetentionAnnotations,
boolean generateMultiFileFacadePartClasses boolean generateMultiFileFacadePartClasses,
boolean mightBeIncorrectCode
) { ) {
this.generateBodies = generateBodies; this.generateBodies = generateBodies;
this.generateMetadata = generateMetadata; this.generateMetadata = generateMetadata;
this.generateSourceRetentionAnnotations = generateSourceRetentionAnnotations; this.generateSourceRetentionAnnotations = generateSourceRetentionAnnotations;
this.generateMultiFileFacadePartClasses = generateMultiFileFacadePartClasses; this.generateMultiFileFacadePartClasses = generateMultiFileFacadePartClasses;
this.mightBeIncorrectCode = mightBeIncorrectCode;
} }
/** /**
@@ -43,7 +46,8 @@ public class ClassBuilderMode {
/* bodies = */ true, /* bodies = */ true,
/* metadata = */ true, /* metadata = */ true,
/* sourceRetention = */ false, /* sourceRetention = */ false,
/* generateMultiFileFacadePartClasses = */ true); /* generateMultiFileFacadePartClasses = */ true,
/* mightBeIncorrectCode = */ false);
/** /**
* ABI for compilation (non-private signatures + inline function bodies) * ABI for compilation (non-private signatures + inline function bodies)
@@ -52,7 +56,8 @@ public class ClassBuilderMode {
/* bodies = */ true, /* bodies = */ true,
/* metadata = */ true, /* metadata = */ true,
/* sourceRetention = */ false, /* sourceRetention = */ false,
/* generateMultiFileFacadePartClasses = */ true); /* generateMultiFileFacadePartClasses = */ true,
/* mightBeIncorrectCode = */ false);
/** /**
* Generating light classes: Only function signatures * Generating light classes: Only function signatures
@@ -61,7 +66,8 @@ public class ClassBuilderMode {
/* bodies = */ false, /* bodies = */ false,
/* metadata = */ false, /* metadata = */ false,
/* sourceRetention = */ true, /* sourceRetention = */ true,
/* generateMultiFileFacadePartClasses = */ false); /* generateMultiFileFacadePartClasses = */ false,
/* mightBeIncorrectCode = */ true);
/** /**
* Function signatures + metadata (to support incremental compilation with kapt) * Function signatures + metadata (to support incremental compilation with kapt)
@@ -70,12 +76,14 @@ public class ClassBuilderMode {
/* bodies = */ false, /* bodies = */ false,
/* metadata = */ true, /* metadata = */ true,
/* sourceRetention = */ true, /* sourceRetention = */ true,
/* generateMultiFileFacadePartClasses = */ true); /* generateMultiFileFacadePartClasses = */ true,
/* mightBeIncorrectCode = */ true);
@TestOnly @TestOnly
public final static ClassBuilderMode LIGHT_ANALYSIS_FOR_TESTS = new ClassBuilderMode( public final static ClassBuilderMode LIGHT_ANALYSIS_FOR_TESTS = new ClassBuilderMode(
/* bodies = */ false, /* bodies = */ false,
/* metadata = */ true, /* metadata = */ true,
/* sourceRetention = */ false, /* sourceRetention = */ false,
/* generateMultiFileFacadePartClasses = */ true); /* generateMultiFileFacadePartClasses = */ true,
/* mightBeIncorrectCode = */ true);
} }
@@ -34,6 +34,9 @@ class DescriptorBasedFunctionHandleForJvm(
override val isDeclaration: Boolean = override val isDeclaration: Boolean =
descriptor.kind.isReal || needToGenerateDelegationToDefaultImpls(descriptor) descriptor.kind.isReal || needToGenerateDelegationToDefaultImpls(descriptor)
override val mightBeIncorrectCode: Boolean
get() = state.classBuilderMode.mightBeIncorrectCode
} }
private fun CallableMemberDescriptor.isJvmDefaultOrPlatformDependent() = private fun CallableMemberDescriptor.isJvmDefaultOrPlatformDependent() =