Fix @JvmMultifileClass in ClassBuilderMode=LIGHT_CLASSES
This commit is contained in:
@@ -20,11 +20,18 @@ public class ClassBuilderMode {
|
||||
public final boolean generateBodies;
|
||||
public final boolean generateMetadata;
|
||||
public final boolean generateSourceRetentionAnnotations;
|
||||
public final boolean generateMultiFileFacadePartClasses;
|
||||
|
||||
private ClassBuilderMode(boolean generateBodies, boolean generateMetadata, boolean generateSourceRetentionAnnotations) {
|
||||
private ClassBuilderMode(
|
||||
boolean generateBodies,
|
||||
boolean generateMetadata,
|
||||
boolean generateSourceRetentionAnnotations,
|
||||
boolean generateMultiFileFacadePartClasses
|
||||
) {
|
||||
this.generateBodies = generateBodies;
|
||||
this.generateMetadata = generateMetadata;
|
||||
this.generateSourceRetentionAnnotations = generateSourceRetentionAnnotations;
|
||||
this.generateMultiFileFacadePartClasses = generateMultiFileFacadePartClasses;
|
||||
}
|
||||
|
||||
public static ClassBuilderMode full(boolean generateSourceRetentionAnnotations) {
|
||||
@@ -37,7 +44,8 @@ public class ClassBuilderMode {
|
||||
private final static ClassBuilderMode FULL = new ClassBuilderMode(
|
||||
/* bodies = */ true,
|
||||
/* metadata = */ true,
|
||||
/* sourceRetention = */ false);
|
||||
/* sourceRetention = */ false,
|
||||
/* generateMultiFileFacadePartClasses = */ true);
|
||||
|
||||
/**
|
||||
* Full function bodies, write annotations with the "source" retention.
|
||||
@@ -45,7 +53,8 @@ public class ClassBuilderMode {
|
||||
private final static ClassBuilderMode KAPT2 = new ClassBuilderMode(
|
||||
/* bodies = */ true,
|
||||
/* metadata = */ true,
|
||||
/* sourceRetention = */ true);
|
||||
/* sourceRetention = */ true,
|
||||
/* generateMultiFileFacadePartClasses = */ false);
|
||||
|
||||
/**
|
||||
* Generating light classes: Only function signatures
|
||||
@@ -53,7 +62,8 @@ public class ClassBuilderMode {
|
||||
public final static ClassBuilderMode LIGHT_CLASSES = new ClassBuilderMode(
|
||||
/* bodies = */ false,
|
||||
/* metadata = */ false,
|
||||
/* sourceRetention = */ true);
|
||||
/* sourceRetention = */ true,
|
||||
/* generateMultiFileFacadePartClasses = */ false);
|
||||
|
||||
/**
|
||||
* Function signatures + metadata (to support incremental compilation with kapt)
|
||||
@@ -61,7 +71,8 @@ public class ClassBuilderMode {
|
||||
public final static ClassBuilderMode KAPT = new ClassBuilderMode(
|
||||
/* bodies = */ false,
|
||||
/* metadata = */ true,
|
||||
/* sourceRetention = */ true);
|
||||
/* sourceRetention = */ true,
|
||||
/* generateMultiFileFacadePartClasses = */ false);
|
||||
|
||||
/**
|
||||
* Function signatures + metadata (to support incremental compilation with kapt)
|
||||
@@ -69,5 +80,6 @@ public class ClassBuilderMode {
|
||||
public final static ClassBuilderMode KAPT3 = new ClassBuilderMode(
|
||||
/* bodies = */ false,
|
||||
/* metadata = */ true,
|
||||
/* sourceRetention = */ true);
|
||||
/* sourceRetention = */ true,
|
||||
/* generateMultiFileFacadePartClasses = */ true);
|
||||
}
|
||||
|
||||
@@ -78,17 +78,21 @@ class MultifileClassPartCodegen(
|
||||
}
|
||||
|
||||
override fun generate() {
|
||||
if (!state.classBuilderMode.generateBodies) return
|
||||
if (!state.classBuilderMode.generateMultiFileFacadePartClasses) return
|
||||
|
||||
super.generate()
|
||||
|
||||
val generateBodies = state.classBuilderMode.generateBodies
|
||||
|
||||
if (shouldGeneratePartHierarchy) {
|
||||
v.newMethod(OtherOrigin(packageFragment), Opcodes.ACC_PUBLIC, "<init>", "()V", null, null).apply {
|
||||
visitCode()
|
||||
visitVarInsn(Opcodes.ALOAD, 0)
|
||||
visitMethodInsn(Opcodes.INVOKESPECIAL, superClassInternalName, "<init>", "()V", false)
|
||||
visitInsn(Opcodes.RETURN)
|
||||
visitMaxs(1, 1)
|
||||
if (generateBodies) {
|
||||
visitCode()
|
||||
visitVarInsn(Opcodes.ALOAD, 0)
|
||||
visitMethodInsn(Opcodes.INVOKESPECIAL, superClassInternalName, "<init>", "()V", false)
|
||||
visitInsn(Opcodes.RETURN)
|
||||
visitMaxs(1, 1)
|
||||
}
|
||||
visitEnd()
|
||||
}
|
||||
}
|
||||
@@ -99,20 +103,24 @@ class MultifileClassPartCodegen(
|
||||
CLINIT_SYNC_NAME, "I", null, null)
|
||||
|
||||
newSpecialMethod(packageFragment, CLINIT_TRIGGER_NAME).apply {
|
||||
visitCode()
|
||||
visitFieldInsn(Opcodes.GETSTATIC, staticInitClassType.internalName, CLINIT_SYNC_NAME, "I")
|
||||
visitInsn(Opcodes.RETURN)
|
||||
visitMaxs(1, 0)
|
||||
if (generateBodies) {
|
||||
visitCode()
|
||||
visitFieldInsn(Opcodes.GETSTATIC, staticInitClassType.internalName, CLINIT_SYNC_NAME, "I")
|
||||
visitInsn(Opcodes.RETURN)
|
||||
visitMaxs(1, 0)
|
||||
}
|
||||
visitEnd()
|
||||
}
|
||||
|
||||
newSpecialMethod(packageFragment, "<clinit>").apply {
|
||||
visitCode()
|
||||
visitMethodInsn(Opcodes.INVOKESTATIC, partType.internalName, DEFERRED_PART_CLINIT_NAME, "()V", false)
|
||||
visitInsn(Opcodes.ICONST_0)
|
||||
visitFieldInsn(Opcodes.PUTSTATIC, staticInitClassType.internalName, CLINIT_SYNC_NAME, "I")
|
||||
visitInsn(Opcodes.RETURN)
|
||||
visitMaxs(1, 0)
|
||||
if (generateBodies) {
|
||||
visitCode()
|
||||
visitMethodInsn(Opcodes.INVOKESTATIC, partType.internalName, DEFERRED_PART_CLINIT_NAME, "()V", false)
|
||||
visitInsn(Opcodes.ICONST_0)
|
||||
visitFieldInsn(Opcodes.PUTSTATIC, staticInitClassType.internalName, CLINIT_SYNC_NAME, "I")
|
||||
visitInsn(Opcodes.RETURN)
|
||||
visitMaxs(1, 0)
|
||||
}
|
||||
visitEnd()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user