Use package part context for class generation

This commit is contained in:
Michael Bogdanov
2015-10-15 13:37:58 +03:00
committed by Max Kammerer
parent 3e64baad78
commit 7022d84ec1
3 changed files with 16 additions and 13 deletions
@@ -147,11 +147,8 @@ public class MultifileClassCodegen(
writeKotlinMultifileFacadeAnnotationIfNeeded(partFqNames)
}
public fun generateClassOrObject(classOrObject: JetClassOrObject) {
val file = classOrObject.getContainingJetFile()
val partType = state.fileClassesProvider.getFileClassType(file)
val context = state.rootContext.intoMultifileClassPart(packageFragment!!, facadeClassType, partType)
MemberCodegen.genClassOrObject(context, classOrObject, state, null)
public fun generateClassOrObject(classOrObject: JetClassOrObject, packagePartContext: FieldOwnerContext<PackageFragmentDescriptor>) {
MemberCodegen.genClassOrObject(packagePartContext, classOrObject, state, null)
}
private fun generatePart(
@@ -173,7 +170,7 @@ public class MultifileClassCodegen(
}
else if (declaration is JetClassOrObject) {
if (state.generateDeclaredClassFilter.shouldGenerateClass(declaration)) {
generateClassOrObject(declaration)
generateClassOrObject(declaration, partContext)
}
}
else if (declaration is JetScript) {
@@ -316,7 +316,7 @@ public class PackageCodegen {
else if (declaration instanceof JetClassOrObject) {
JetClassOrObject classOrObject = (JetClassOrObject) declaration;
if (state.getGenerateDeclaredClassFilter().shouldGenerateClass(classOrObject)) {
generateClassOrObject(classOrObject);
generateClassOrObject(classOrObject, packagePartContext);
}
}
else if (declaration instanceof JetScript) {
@@ -415,11 +415,8 @@ public class PackageCodegen {
return fragments.get(0);
}
public void generateClassOrObject(@NotNull JetClassOrObject classOrObject) {
JetFile file = classOrObject.getContainingJetFile();
Type packagePartType = FileClasses.getFileClassType(state.getFileClassesProvider(), file);
CodegenContext context = state.getRootContext().intoPackagePart(packageFragment, packagePartType);
MemberCodegen.genClassOrObject(context, classOrObject, state, null);
public void generateClassOrObject(@NotNull JetClassOrObject classOrObject, @NotNull PackageContext packagePartContext) {
MemberCodegen.genClassOrObject(packagePartContext, classOrObject, state, null);
}
public void done() {
@@ -433,4 +430,8 @@ public class PackageCodegen {
public Collection<JetFile> getFiles() {
return files;
}
public PackageFragmentDescriptor getPackageFragment() {
return packageFragment;
}
}
@@ -45,8 +45,10 @@ import org.jetbrains.kotlin.codegen.KotlinCodegenFacade;
import org.jetbrains.kotlin.codegen.MultifileClassCodegen;
import org.jetbrains.kotlin.codegen.PackageCodegen;
import org.jetbrains.kotlin.codegen.binding.CodegenBinding;
import org.jetbrains.kotlin.codegen.context.PackageContext;
import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.fileClasses.FileClasses;
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider;
import org.jetbrains.kotlin.name.FqName;
@@ -374,7 +376,10 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
@Override
public void generate(@NotNull GenerationState state, @NotNull Collection<JetFile> files) {
PackageCodegen packageCodegen = state.getFactory().forPackage(getPackageFqName(), files);
packageCodegen.generateClassOrObject(classOrObject);
JetFile file = classOrObject.getContainingJetFile();
Type packagePartType = FileClasses.getFileClassType(state.getFileClassesProvider(), file);
PackageContext context = state.getRootContext().intoPackagePart(packageCodegen.getPackageFragment(), packagePartType);
packageCodegen.generateClassOrObject(classOrObject, context);
state.getFactory().asList();
}