Add GenerationState to CodegenContext
This commit is contained in:
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.codegen.binding.CalculatedClosure;
|
||||
import org.jetbrains.kotlin.codegen.context.CodegenContext;
|
||||
import org.jetbrains.kotlin.codegen.context.MethodContext;
|
||||
import org.jetbrains.kotlin.codegen.context.PackageContext;
|
||||
import org.jetbrains.kotlin.codegen.context.RootContext;
|
||||
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor;
|
||||
@@ -108,7 +109,7 @@ public class JvmCodegenUtil {
|
||||
@NotNull CodegenContext context,
|
||||
@Nullable File outDirectory
|
||||
) {
|
||||
if (context == CodegenContext.STATIC) {
|
||||
if (context instanceof RootContext) {
|
||||
return true;
|
||||
}
|
||||
DeclarationDescriptor contextDescriptor = context.getContextDescriptor();
|
||||
|
||||
@@ -169,7 +169,7 @@ public class PackageCodegen {
|
||||
generateCallableMemberTasks.put(member, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
FieldOwnerContext context = CodegenContext.STATIC.intoPackageFacade(
|
||||
FieldOwnerContext context = state.getRootContext().intoPackageFacade(
|
||||
AsmUtil.asmTypeByFqNameWithoutInnerClasses(PackagePartClassUtils.getPackagePartFqName(member)),
|
||||
compiledPackageFragment
|
||||
);
|
||||
@@ -313,7 +313,7 @@ public class PackageCodegen {
|
||||
private ClassBuilder generate(@NotNull JetFile file, @NotNull Map<CallableMemberDescriptor, Runnable> generateCallableMemberTasks) {
|
||||
boolean generatePackagePart = false;
|
||||
Type packagePartType = state.getFileClassesProvider().getFileClassType(file);
|
||||
PackageContext packagePartContext = CodegenContext.STATIC.intoPackagePart(packageFragment, packagePartType);
|
||||
PackageContext packagePartContext = state.getRootContext().intoPackagePart(packageFragment, packagePartType);
|
||||
|
||||
for (JetDeclaration declaration : file.getDeclarations()) {
|
||||
if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) {
|
||||
@@ -345,7 +345,7 @@ public class PackageCodegen {
|
||||
|
||||
new PackagePartCodegen(builder, file, packagePartType, packagePartContext, state).generate();
|
||||
|
||||
FieldOwnerContext packageFacade = CodegenContext.STATIC.intoPackageFacade(packagePartType, packageFragment);
|
||||
FieldOwnerContext packageFacade = state.getRootContext().intoPackageFacade(packagePartType, packageFragment);
|
||||
|
||||
final MemberCodegen<?> memberCodegen = createCodegenForPartOfPackageFacade(packageFacade);
|
||||
|
||||
@@ -415,7 +415,7 @@ public class PackageCodegen {
|
||||
public void generateClassOrObject(@NotNull JetClassOrObject classOrObject) {
|
||||
JetFile file = classOrObject.getContainingJetFile();
|
||||
Type packagePartType = state.getFileClassesProvider().getFileClassType(file);
|
||||
CodegenContext context = CodegenContext.STATIC.intoPackagePart(packageFragment, packagePartType);
|
||||
CodegenContext context = state.getRootContext().intoPackagePart(packageFragment, packagePartType);
|
||||
MemberCodegen.genClassOrObject(context, classOrObject, state, null);
|
||||
}
|
||||
|
||||
|
||||
@@ -144,8 +144,8 @@ public class SamWrapperCodegen {
|
||||
SimpleFunctionDescriptor erasedInterfaceFunction,
|
||||
JetType functionJetType
|
||||
) {
|
||||
// using static context to avoid creating ClassDescriptor and everything else
|
||||
FunctionCodegen codegen = new FunctionCodegen(CodegenContext.STATIC.intoClass(
|
||||
// using root context to avoid creating ClassDescriptor and everything else
|
||||
FunctionCodegen codegen = new FunctionCodegen(state.getRootContext().intoClass(
|
||||
(ClassDescriptor) erasedInterfaceFunction.getContainingDeclaration(), OwnerKind.IMPLEMENTATION, state), cv, state, parentCodegen);
|
||||
|
||||
FunctionDescriptor invokeFunction =
|
||||
|
||||
@@ -39,8 +39,6 @@ import static org.jetbrains.org.objectweb.asm.Opcodes.ACC_PRIVATE;
|
||||
import static org.jetbrains.org.objectweb.asm.Opcodes.ACC_PROTECTED;
|
||||
|
||||
public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
public static final CodegenContext STATIC = new RootContext();
|
||||
|
||||
private final T contextDescriptor;
|
||||
private final OwnerKind contextKind;
|
||||
private final CodegenContext parentContext;
|
||||
@@ -78,6 +76,11 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public GenerationState getState() {
|
||||
return parentContext.getState();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public final ClassDescriptor getThisDescriptor() {
|
||||
if (thisDescriptor == null) {
|
||||
|
||||
@@ -17,16 +17,14 @@
|
||||
package org.jetbrains.kotlin.codegen.context;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.codegen.OwnerKind;
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
|
||||
import org.jetbrains.org.objectweb.asm.Type;
|
||||
|
||||
public class PackageContext extends FieldOwnerContext<PackageFragmentDescriptor> {
|
||||
|
||||
private final Type packagePartType;
|
||||
|
||||
public PackageContext(@NotNull PackageFragmentDescriptor contextDescriptor, @Nullable CodegenContext parent, Type packagePartType) {
|
||||
public PackageContext(@NotNull PackageFragmentDescriptor contextDescriptor, @NotNull CodegenContext parent, Type packagePartType) {
|
||||
super(contextDescriptor, OwnerKind.PACKAGE, parent, null, null, null);
|
||||
this.packagePartType = packagePartType;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.kotlin.codegen.context;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
|
||||
import org.jetbrains.org.objectweb.asm.Type;
|
||||
|
||||
@@ -25,7 +24,7 @@ public class PackageFacadeContext extends PackageContext {
|
||||
|
||||
public PackageFacadeContext(
|
||||
@NotNull PackageFragmentDescriptor contextDescriptor,
|
||||
@Nullable CodegenContext parent,
|
||||
@NotNull CodegenContext parent,
|
||||
@NotNull Type delegateTo
|
||||
) {
|
||||
super(contextDescriptor, parent, delegateTo);
|
||||
|
||||
@@ -18,15 +18,25 @@ package org.jetbrains.kotlin.codegen.context;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.codegen.OwnerKind;
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorVisitor;
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor;
|
||||
|
||||
class RootContext extends CodegenContext<RootContext.FakeDescriptor> {
|
||||
public RootContext() {
|
||||
public class RootContext extends CodegenContext<RootContext.FakeDescriptor> {
|
||||
private final GenerationState state;
|
||||
|
||||
public RootContext(@NotNull GenerationState state) {
|
||||
super(new FakeDescriptor(), OwnerKind.PACKAGE, null, null, null, null);
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public GenerationState getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -589,7 +589,7 @@ public class InlineCodegen extends CallGenerator {
|
||||
|
||||
public static CodegenContext getContext(DeclarationDescriptor descriptor, GenerationState state) {
|
||||
if (descriptor instanceof PackageFragmentDescriptor) {
|
||||
return new PackageContext((PackageFragmentDescriptor) descriptor, null, null);
|
||||
return new PackageContext((PackageFragmentDescriptor) descriptor, state.getRootContext(), null);
|
||||
}
|
||||
|
||||
CodegenContext parent = getContext(descriptor.getContainingDeclaration(), state);
|
||||
|
||||
@@ -21,6 +21,8 @@ import org.jetbrains.kotlin.builtins.ReflectionTypes
|
||||
import org.jetbrains.kotlin.codegen.*
|
||||
import org.jetbrains.kotlin.codegen.`when`.MappingsClassesForWhenByEnum
|
||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
||||
import org.jetbrains.kotlin.codegen.context.CodegenContext
|
||||
import org.jetbrains.kotlin.codegen.context.RootContext
|
||||
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
|
||||
import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods
|
||||
import org.jetbrains.kotlin.codegen.optimization.OptimizationClassBuilderFactory
|
||||
@@ -60,9 +62,6 @@ public class GenerationState jvmOverloads constructor(
|
||||
public val incrementalCompilationComponents: IncrementalCompilationComponents? = null,
|
||||
public val progress: Progress = Progress.DEAF
|
||||
) {
|
||||
|
||||
public val moduleName: String = moduleName ?: JvmCodegenUtil.getModuleName(module)
|
||||
|
||||
public interface GenerateClassFilter {
|
||||
public fun shouldAnnotateClass(classOrObject: JetClassOrObject): Boolean
|
||||
public fun shouldGenerateClass(classOrObject: JetClassOrObject): Boolean
|
||||
@@ -111,6 +110,10 @@ public class GenerationState jvmOverloads constructor(
|
||||
public val isInlineEnabled: Boolean = !disableInline
|
||||
@jvmName("isInlineEnabled") get
|
||||
|
||||
public val moduleName: String = moduleName ?: JvmCodegenUtil.getModuleName(module)
|
||||
|
||||
public val rootContext: CodegenContext<*> = RootContext(this)
|
||||
|
||||
init {
|
||||
val optimizationClassBuilderFactory = OptimizationClassBuilderFactory(builderFactory, disableOptimization)
|
||||
var interceptedBuilderFactory: ClassBuilderFactory = BuilderFactoryForDuplicateSignatureDiagnostics(
|
||||
|
||||
Reference in New Issue
Block a user