Minor: IrFileElementFactory -> IrDeclarationFactory

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