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.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)