Minor: IrFileElementFactory -> IrDeclarationFactory
This commit is contained in:
committed by
Dmitry Petrov
parent
7b3ae8ffec
commit
dc7a90a081
+4
-4
@@ -23,13 +23,13 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
|
||||
class IrFileElementFactory private constructor(
|
||||
class IrDeclarationFactory private constructor(
|
||||
val fileEntry: PsiSourceManager.PsiFileEntry,
|
||||
val irFileImpl: IrFileImpl,
|
||||
val containingDeclaration: IrCompoundDeclaration
|
||||
) {
|
||||
fun createChild(containingDeclaration: IrCompoundDeclaration) =
|
||||
IrFileElementFactory(fileEntry, irFileImpl, containingDeclaration)
|
||||
IrDeclarationFactory(fileEntry, irFileImpl, containingDeclaration)
|
||||
|
||||
private fun <D : IrMemberDeclaration> D.addToContainer(): D =
|
||||
apply { containingDeclaration.addChildDeclaration(this) }
|
||||
@@ -67,13 +67,13 @@ class IrFileElementFactory private constructor(
|
||||
.addToContainer()
|
||||
|
||||
companion object {
|
||||
fun create(irModule: IrModuleImpl, sourceManager: PsiSourceManager, ktFile: KtFile, descriptor: PackageFragmentDescriptor): IrFileElementFactory {
|
||||
fun create(irModule: IrModuleImpl, sourceManager: PsiSourceManager, ktFile: KtFile, descriptor: PackageFragmentDescriptor): IrDeclarationFactory {
|
||||
val fileEntry = sourceManager.getOrCreateFileEntry(ktFile)
|
||||
val fileName = fileEntry.getRecognizableName()
|
||||
val irFile = IrFileImpl(fileEntry, fileName, descriptor)
|
||||
sourceManager.putFileEntry(irFile, fileEntry)
|
||||
irModule.addFile(irFile)
|
||||
return IrFileElementFactory(fileEntry, irFile, irFile)
|
||||
return IrDeclarationFactory(fileEntry, irFile, irFile)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -38,11 +38,11 @@ abstract class IrDeclarationGeneratorBase(
|
||||
override val context: IrGeneratorContext,
|
||||
override val irDeclaration: IrDeclaration,
|
||||
override val parent: IrDeclarationGenerator,
|
||||
val fileElementFactory: IrFileElementFactory
|
||||
val declarationFactory: IrDeclarationFactory
|
||||
) : IrDeclarationGenerator {
|
||||
val irExpressionGenerator = IrExpressionGenerator(context, fileElementFactory)
|
||||
val irExpressionGenerator = IrExpressionGenerator(context, declarationFactory)
|
||||
|
||||
val containingDeclaration: IrCompoundDeclaration get() = fileElementFactory.containingDeclaration
|
||||
val containingDeclaration: IrCompoundDeclaration get() = declarationFactory.containingDeclaration
|
||||
|
||||
fun generateAnnotationEntries(annotationEntries: List<KtAnnotationEntry>) {
|
||||
// TODO create IrAnnotation's for each KtAnnotationEntry
|
||||
@@ -65,25 +65,25 @@ abstract class IrDeclarationGeneratorBase(
|
||||
fun generateFunctionDeclaration(ktNamedFunction: KtNamedFunction) {
|
||||
val functionDescriptor = getOrFail(BindingContext.FUNCTION, ktNamedFunction) { "unresolved fun" }
|
||||
val body = generateExpressionBody(ktNamedFunction.bodyExpression ?: TODO("function without body expression"))
|
||||
fileElementFactory.createFunction(ktNamedFunction, functionDescriptor, body)
|
||||
declarationFactory.createFunction(ktNamedFunction, functionDescriptor, body)
|
||||
}
|
||||
|
||||
fun generatePropertyDeclaration(ktProperty: KtProperty) {
|
||||
val propertyDescriptor = getPropertyDescriptor(ktProperty)
|
||||
if (ktProperty.hasDelegate()) TODO("handle delegated property")
|
||||
val initializer = ktProperty.initializer?.let { generateExpressionBody(it) }
|
||||
val irProperty = fileElementFactory.createSimpleProperty(ktProperty, propertyDescriptor, initializer)
|
||||
val irProperty = declarationFactory.createSimpleProperty(ktProperty, propertyDescriptor, initializer)
|
||||
ktProperty.getter?.let { ktGetter ->
|
||||
val accessorDescriptor = getOrFail(BindingContext.PROPERTY_ACCESSOR, ktGetter) { "unresolved getter" }
|
||||
val getterDescriptor = accessorDescriptor as? PropertyGetterDescriptor ?: TODO("not a getter?")
|
||||
val getterBody = generateExpressionBody(ktGetter.bodyExpression ?: TODO("default getter"))
|
||||
fileElementFactory.createPropertyGetter(ktGetter, irProperty, getterDescriptor, getterBody)
|
||||
declarationFactory.createPropertyGetter(ktGetter, irProperty, getterDescriptor, getterBody)
|
||||
}
|
||||
ktProperty.setter?.let { ktSetter ->
|
||||
val accessorDescriptor = getOrFail(BindingContext.PROPERTY_ACCESSOR, ktSetter) { "unresolved setter" }
|
||||
val setterDescriptor = accessorDescriptor as? PropertySetterDescriptor ?: TODO("not a setter?")
|
||||
val setterBody = generateExpressionBody(ktSetter.bodyExpression ?: TODO("default setter"))
|
||||
fileElementFactory.createPropertySetter(ktSetter, irProperty, setterDescriptor, setterBody)
|
||||
declarationFactory.createPropertySetter(ktSetter, irProperty, setterDescriptor, setterBody)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluat
|
||||
|
||||
class IrExpressionGenerator(
|
||||
override val context: IrGeneratorContext,
|
||||
val fileElementFactory: IrFileElementFactory
|
||||
val declarationFactory: IrDeclarationFactory
|
||||
) : KtVisitor<IrExpressionBase, Nothing?>(), IrGenerator {
|
||||
fun generateExpression(ktExpression: KtExpression) = ktExpression.generate()
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ class IrFileGenerator(
|
||||
context: IrGeneratorContext,
|
||||
irDeclaration: IrFileImpl,
|
||||
parent: IrModuleGenerator,
|
||||
fileFileElementFactory: IrFileElementFactory
|
||||
) : IrDeclarationGeneratorBase(context, irDeclaration, parent, fileFileElementFactory) {
|
||||
declarationFactory: IrDeclarationFactory
|
||||
) : IrDeclarationGeneratorBase(context, irDeclaration, parent, declarationFactory) {
|
||||
fun generateFileContent() {
|
||||
generateAnnotationEntries(ktFile.annotationEntries)
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ class IrModuleGenerator(override val context: IrGeneratorContext) : IrDeclaratio
|
||||
fun generateModuleContent() {
|
||||
for (ktFile in context.inputFiles) {
|
||||
val packageFragmentDescriptor = getOrFail(BindingContext.FILE_TO_PACKAGE_FRAGMENT, ktFile) { "no package fragment for file" }
|
||||
val irFileElementFactory = IrFileElementFactory.create(context.irModule, context.sourceManager, ktFile, packageFragmentDescriptor)
|
||||
val irFileElementFactory = IrDeclarationFactory.create(context.irModule, context.sourceManager, ktFile, packageFragmentDescriptor)
|
||||
val irFile = irFileElementFactory.irFileImpl
|
||||
context.irModule.addFile(irFile)
|
||||
val generator = IrFileGenerator(ktFile, context, irFile, this, irFileElementFactory)
|
||||
|
||||
Reference in New Issue
Block a user