JVM: refactor JvmDefaultMode, remove/rename some entries
- remove ENABLE/COMPATIBILITY because they can no longer be used - remove forAllMethodsWithBody because its behavior is now equivalent to isEnabled - inline isCompatibility - inline DEFAULT - rename ALL_INCOMPATIBLE -> ALL
This commit is contained in:
committed by
Space Team
parent
6219806ab9
commit
28797a31b4
@@ -715,9 +715,9 @@ public class FunctionCodegen {
|
||||
}
|
||||
|
||||
private static boolean isCompiledInCompatibilityMode(JvmDefaultMode mode, CallableMemberDescriptor descriptor) {
|
||||
return mode.isCompatibility() ||
|
||||
(mode == JvmDefaultMode.ALL_INCOMPATIBLE &&
|
||||
JvmAnnotationUtilKt.hasJvmDefaultWithCompatibilityAnnotation(descriptor.getContainingDeclaration()));
|
||||
return mode == JvmDefaultMode.ALL_COMPATIBILITY ||
|
||||
(mode == JvmDefaultMode.ALL &&
|
||||
JvmAnnotationUtilKt.hasJvmDefaultWithCompatibilityAnnotation(descriptor.getContainingDeclaration()));
|
||||
}
|
||||
|
||||
private static void generateLocalVariableTable(
|
||||
@@ -1681,7 +1681,7 @@ public class FunctionCodegen {
|
||||
// Fake overrides in interfaces should be expanded to implementation to make proper default check
|
||||
if (JvmAnnotationUtilKt.checkIsImplementationCompiledToJvmDefault(memberDescriptor, mode)) {
|
||||
boolean isCompatibilityMode = isCompiledInCompatibilityMode(mode, memberDescriptor);
|
||||
boolean isSyntheticInCompatibilityOrJvmDefault = isSynthetic && (isCompatibilityMode || mode == JvmDefaultMode.ENABLE);
|
||||
boolean isSyntheticInCompatibilityOrJvmDefault = isSynthetic && isCompatibilityMode;
|
||||
return (kind != OwnerKind.DEFAULT_IMPLS && !isSyntheticInCompatibilityOrJvmDefault) ||
|
||||
(kind == OwnerKind.DEFAULT_IMPLS &&
|
||||
(isSyntheticInCompatibilityOrJvmDefault ||
|
||||
|
||||
+1
-1
@@ -591,7 +591,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
|
||||
}
|
||||
|
||||
return AsmUtil.asmTypeByClassId(
|
||||
DescriptorUtils.isInterface(descriptor) && !jvmDefaultMode.getForAllMethodsWithBody()
|
||||
DescriptorUtils.isInterface(descriptor) && !jvmDefaultMode.isEnabled()
|
||||
? classId.createNestedClassId(Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME))
|
||||
: classId
|
||||
);
|
||||
|
||||
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.codegen.*;
|
||||
import org.jetbrains.kotlin.codegen.binding.MutableClosure;
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
|
||||
import org.jetbrains.kotlin.config.JvmDefaultMode;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
@@ -652,13 +651,6 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
//in other default modes there shouldn't be any accessors form DefaultImpls to Interface cause all compiled inside interface
|
||||
if (getState().getJvmDefaultMode() == JvmDefaultMode.ENABLE &&
|
||||
JvmAnnotationUtilKt.hasJvmDefaultAnnotation(descriptor) &&
|
||||
descriptorContext instanceof DefaultImplsClassContext) {
|
||||
descriptorContext = ((DefaultImplsClassContext) descriptorContext).getInterfaceContext();
|
||||
}
|
||||
|
||||
if (descriptor instanceof PropertyDescriptor) {
|
||||
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
|
||||
int propertyAccessFlag = getVisibilityAccessFlag(descriptor);
|
||||
|
||||
+5
-5
@@ -75,17 +75,17 @@ class JvmSerializerExtension @JvmOverloads constructor(
|
||||
}
|
||||
//TODO: support local delegated properties in new defaults scheme
|
||||
val containerAsmType =
|
||||
if (isInterface(descriptor) && !jvmDefaultMode.forAllMethodsWithBody) typeMapper.mapDefaultImpls(descriptor) else typeMapper.mapClass(descriptor)
|
||||
if (isInterface(descriptor) && !jvmDefaultMode.isEnabled) typeMapper.mapDefaultImpls(descriptor) else typeMapper.mapClass(descriptor)
|
||||
writeLocalProperties(proto, containerAsmType, JvmProtoBuf.classLocalVariable)
|
||||
writeVersionRequirementForJvmDefaultIfNeeded(descriptor, proto, versionRequirementTable)
|
||||
|
||||
if (jvmDefaultMode.forAllMethodsWithBody && isInterface(descriptor)) {
|
||||
if (jvmDefaultMode.isEnabled && isInterface(descriptor)) {
|
||||
proto.setExtension(
|
||||
JvmProtoBuf.jvmClassFlags,
|
||||
JvmFlags.getClassFlags(
|
||||
jvmDefaultMode.forAllMethodsWithBody,
|
||||
true,
|
||||
(JvmDefaultMode.ALL_COMPATIBILITY == jvmDefaultMode && !descriptor.hasJvmDefaultNoCompatibilityAnnotation()) ||
|
||||
(JvmDefaultMode.ALL_INCOMPATIBLE == jvmDefaultMode && descriptor.hasJvmDefaultWithCompatibilityAnnotation())
|
||||
(JvmDefaultMode.ALL == jvmDefaultMode && descriptor.hasJvmDefaultWithCompatibilityAnnotation())
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -99,7 +99,7 @@ class JvmSerializerExtension @JvmOverloads constructor(
|
||||
versionRequirementTable: MutableVersionRequirementTable
|
||||
) {
|
||||
if (isInterface(classDescriptor)) {
|
||||
if (jvmDefaultMode == JvmDefaultMode.ALL_INCOMPATIBLE) {
|
||||
if (jvmDefaultMode == JvmDefaultMode.ALL) {
|
||||
builder.addVersionRequirement(
|
||||
writeVersionRequirement(1, 4, 0, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, versionRequirementTable)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user