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)
|
writeKotlinMultifileFacadeAnnotationIfNeeded(partFqNames)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun generateClassOrObject(classOrObject: JetClassOrObject) {
|
public fun generateClassOrObject(classOrObject: JetClassOrObject, packagePartContext: FieldOwnerContext<PackageFragmentDescriptor>) {
|
||||||
val file = classOrObject.getContainingJetFile()
|
MemberCodegen.genClassOrObject(packagePartContext, classOrObject, state, null)
|
||||||
val partType = state.fileClassesProvider.getFileClassType(file)
|
|
||||||
val context = state.rootContext.intoMultifileClassPart(packageFragment!!, facadeClassType, partType)
|
|
||||||
MemberCodegen.genClassOrObject(context, classOrObject, state, null)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generatePart(
|
private fun generatePart(
|
||||||
@@ -173,7 +170,7 @@ public class MultifileClassCodegen(
|
|||||||
}
|
}
|
||||||
else if (declaration is JetClassOrObject) {
|
else if (declaration is JetClassOrObject) {
|
||||||
if (state.generateDeclaredClassFilter.shouldGenerateClass(declaration)) {
|
if (state.generateDeclaredClassFilter.shouldGenerateClass(declaration)) {
|
||||||
generateClassOrObject(declaration)
|
generateClassOrObject(declaration, partContext)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (declaration is JetScript) {
|
else if (declaration is JetScript) {
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ public class PackageCodegen {
|
|||||||
else if (declaration instanceof JetClassOrObject) {
|
else if (declaration instanceof JetClassOrObject) {
|
||||||
JetClassOrObject classOrObject = (JetClassOrObject) declaration;
|
JetClassOrObject classOrObject = (JetClassOrObject) declaration;
|
||||||
if (state.getGenerateDeclaredClassFilter().shouldGenerateClass(classOrObject)) {
|
if (state.getGenerateDeclaredClassFilter().shouldGenerateClass(classOrObject)) {
|
||||||
generateClassOrObject(classOrObject);
|
generateClassOrObject(classOrObject, packagePartContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (declaration instanceof JetScript) {
|
else if (declaration instanceof JetScript) {
|
||||||
@@ -415,11 +415,8 @@ public class PackageCodegen {
|
|||||||
return fragments.get(0);
|
return fragments.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateClassOrObject(@NotNull JetClassOrObject classOrObject) {
|
public void generateClassOrObject(@NotNull JetClassOrObject classOrObject, @NotNull PackageContext packagePartContext) {
|
||||||
JetFile file = classOrObject.getContainingJetFile();
|
MemberCodegen.genClassOrObject(packagePartContext, classOrObject, state, null);
|
||||||
Type packagePartType = FileClasses.getFileClassType(state.getFileClassesProvider(), file);
|
|
||||||
CodegenContext context = state.getRootContext().intoPackagePart(packageFragment, packagePartType);
|
|
||||||
MemberCodegen.genClassOrObject(context, classOrObject, state, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void done() {
|
public void done() {
|
||||||
@@ -433,4 +430,8 @@ public class PackageCodegen {
|
|||||||
public Collection<JetFile> getFiles() {
|
public Collection<JetFile> getFiles() {
|
||||||
return files;
|
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.MultifileClassCodegen;
|
||||||
import org.jetbrains.kotlin.codegen.PackageCodegen;
|
import org.jetbrains.kotlin.codegen.PackageCodegen;
|
||||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding;
|
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.codegen.state.GenerationState;
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||||
|
import org.jetbrains.kotlin.fileClasses.FileClasses;
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider;
|
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
@@ -374,7 +376,10 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
|
|||||||
@Override
|
@Override
|
||||||
public void generate(@NotNull GenerationState state, @NotNull Collection<JetFile> files) {
|
public void generate(@NotNull GenerationState state, @NotNull Collection<JetFile> files) {
|
||||||
PackageCodegen packageCodegen = state.getFactory().forPackage(getPackageFqName(), 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();
|
state.getFactory().asList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user