Use package part context for class generation
This commit is contained in:
committed by
Max Kammerer
parent
3e64baad78
commit
7022d84ec1
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+6
-1
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user