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.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)
|
||||||
|
|||||||
Reference in New Issue
Block a user