Force resolve companion in light class generation
This commit is contained in:
@@ -282,11 +282,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
|||||||
}
|
}
|
||||||
ClassContext classContext = new ClassContext(state.getTypeMapper(), descriptor, kind, this, null);
|
ClassContext classContext = new ClassContext(state.getTypeMapper(), descriptor, kind, this, null);
|
||||||
|
|
||||||
//We can't call descriptor.getCompanionObjectDescriptor() on light class generation
|
if (descriptor.getCompanionObjectDescriptor() != null) {
|
||||||
// because it triggers companion light class generation via putting it to BindingContext.CLASS
|
|
||||||
// (so MemberCodegen doesn't skip it in genClassOrObject).
|
|
||||||
if (state.getTypeMapper().getClassBuilderMode() != ClassBuilderMode.LIGHT_CLASSES &&
|
|
||||||
descriptor.getCompanionObjectDescriptor() != null) {
|
|
||||||
//We need to create companion object context ahead of time
|
//We need to create companion object context ahead of time
|
||||||
// because otherwise we can't generate synthetic accessor for private members in companion object
|
// because otherwise we can't generate synthetic accessor for private members in companion object
|
||||||
classContext.intoClass(descriptor.getCompanionObjectDescriptor(), OwnerKind.IMPLEMENTATION, state);
|
classContext.intoClass(descriptor.getCompanionObjectDescriptor(), OwnerKind.IMPLEMENTATION, state);
|
||||||
|
|||||||
+4
-2
@@ -80,11 +80,13 @@ public class CliLightClassGenerationSupport(project: Project) : LightClassGenera
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getContextForPackage(files: Collection<KtFile>): LightClassConstructionContext {
|
override fun getContextForPackage(files: Collection<KtFile>): LightClassConstructionContext {
|
||||||
return getContext()
|
return LightClassConstructionContext(bindingContext, module)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getContextForClassOrObject(classOrObject: KtClassOrObject): LightClassConstructionContext {
|
override fun getContextForClassOrObject(classOrObject: KtClassOrObject): LightClassConstructionContext {
|
||||||
return getContext()
|
//force resolve companion for light class generation
|
||||||
|
bindingContext.get(BindingContext.CLASS, classOrObject)?.companionObjectDescriptor
|
||||||
|
return LightClassConstructionContext(bindingContext, module)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getContext(): LightClassConstructionContext {
|
private fun getContext(): LightClassConstructionContext {
|
||||||
|
|||||||
Reference in New Issue
Block a user