Generate light classes for single-file facades using PackageCodegen.

This commit is contained in:
Dmitry Petrov
2015-09-15 10:25:40 +03:00
parent d499103468
commit 47b8853051
3 changed files with 17 additions and 2 deletions

View File

@@ -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)

View File

@@ -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,

View File

@@ -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();