mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-04-19 08:31:29 +00:00
Generate light classes for single-file facades using PackageCodegen.
This commit is contained in:
@@ -116,8 +116,6 @@ public class MultifileClassCodegen(
|
||||
tasks: Map<CallableMemberDescriptor, () -> Unit>,
|
||||
partFqNames: List<FqName>
|
||||
) {
|
||||
if (files.size() == 1 && state.classBuilderMode == ClassBuilderMode.LIGHT_CLASSES) return
|
||||
|
||||
generateKotlinPackageReflectionField()
|
||||
MemberCodegen.generateModuleNameField(state, classBuilder)
|
||||
|
||||
|
||||
@@ -43,6 +43,10 @@ public class MultifileClassPartCodegen(
|
||||
partContext: FieldOwnerContext<*>,
|
||||
state: GenerationState
|
||||
) : MemberCodegen<JetFile>(state, null, partContext, file, v) {
|
||||
override fun generate() {
|
||||
if (state.classBuilderMode == ClassBuilderMode.LIGHT_CLASSES) return
|
||||
super.generate()
|
||||
}
|
||||
|
||||
override fun generateDeclaration() {
|
||||
v.defineClass(element, Opcodes.V1_6,
|
||||
|
||||
@@ -47,6 +47,8 @@ import org.jetbrains.kotlin.codegen.PackageCodegen;
|
||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding;
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.psi.JetClassOrObject;
|
||||
import org.jetbrains.kotlin.psi.JetFile;
|
||||
@@ -215,6 +217,17 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
|
||||
|
||||
@Override
|
||||
public void generate(@NotNull GenerationState state, @NotNull Collection<JetFile> files) {
|
||||
if (!files.isEmpty()) {
|
||||
JetFile representativeFile = files.iterator().next();
|
||||
JvmFileClassInfo fileClassInfo = NoResolveFileClassesProvider.INSTANCE$.getFileClassInfo(representativeFile);
|
||||
if (!fileClassInfo.getIsMultifileClass()) {
|
||||
PackageCodegen codegen = state.getFactory().forPackage(representativeFile.getPackageFqName(), files);
|
||||
codegen.generate(CompilationErrorHandler.THROW_EXCEPTION);
|
||||
state.getFactory().asList();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
MultifileClassCodegen codegen = state.getFactory().forMultifileClass(facadeFqName, files);
|
||||
codegen.generate(CompilationErrorHandler.THROW_EXCEPTION);
|
||||
state.getFactory().asList();
|
||||
|
||||
Reference in New Issue
Block a user