New J2K: Add basic annotations support

This commit is contained in:
Ilya Kirillov
2018-11-14 17:14:49 +03:00
committed by Ilya Kirillov
parent f752796408
commit 2f1a8831b2
9 changed files with 68 additions and 13 deletions
@@ -304,7 +304,8 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
JKNameIdentifierImpl(name), JKNameIdentifierImpl(name),
parameterList.parameters.map { it.toJK() }, parameterList.parameters.map { it.toJK() },
body?.toJK() ?: JKBodyStub, body?.toJK() ?: JKBodyStub,
typeParameterList?.toJK() ?: JKTypeParameterListImpl() typeParameterList?.toJK() ?: JKTypeParameterListImpl(),
JKAnnotationListImpl()//TODO get real annotations
).also { ).also {
it.psi = this it.psi = this
symbolProvider.provideUniverseSymbol(this, it) symbolProvider.provideUniverseSymbol(this, it)
@@ -311,6 +311,10 @@ class NewCodeBuilder {
override fun visitKtFunction(ktFunction: JKKtFunction) { override fun visitKtFunction(ktFunction: JKKtFunction) {
printer.printIndent() printer.printIndent()
if (ktFunction.annotationList.annotations.isNotEmpty()) {
ktFunction.annotationList.accept(this)
printer.printlnWithNoIndent(" ")
}
ktFunction.modifierList.accept(this) ktFunction.modifierList.accept(this)
printer.printWithNoIndent(" fun ") printer.printWithNoIndent(" fun ")
ktFunction.typeParameterList.accept(this) ktFunction.typeParameterList.accept(this)
@@ -714,6 +718,17 @@ class NewCodeBuilder {
} }
} }
override fun visitAnnotationList(annotationList: JKAnnotationList) {
renderList(annotationList.annotations, " ") {
it.accept(this)
}
}
override fun visitAnnotation(annotation: JKAnnotation) {
printer.printWithNoIndent("@")
annotation.name.accept(this)
}
override fun visitKtWhenCase(ktWhenCase: JKKtWhenCase) { override fun visitKtWhenCase(ktWhenCase: JKKtWhenCase) {
renderList(ktWhenCase.labels, ", ") { renderList(ktWhenCase.labels, ", ") {
it.accept(this) it.accept(this)
@@ -37,7 +37,8 @@ class JavaMethodToKotlinFunctionConversion : TransformerBasedConversion() {
it.parameters, it.parameters,
it.block, it.block,
it.modifierList, it.modifierList,
it.typeParameterList it.typeParameterList,
it.annotationList
) )
} else { } else {
it it
@@ -43,7 +43,8 @@ class JKJavaMethodImpl(
name: JKNameIdentifier, name: JKNameIdentifier,
parameters: List<JKParameter>, parameters: List<JKParameter>,
block: JKBlock, block: JKBlock,
typeParameterList: JKTypeParameterList typeParameterList: JKTypeParameterList,
annotationList: JKAnnotationList
) : JKJavaMethod, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { ) : JKJavaMethod, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data)
@@ -53,6 +54,7 @@ class JKJavaMethodImpl(
override var parameters: List<JKParameter> by children(parameters) override var parameters: List<JKParameter> by children(parameters)
override var block: JKBlock by child(block) override var block: JKBlock by child(block)
override var typeParameterList: JKTypeParameterList by child(typeParameterList) override var typeParameterList: JKTypeParameterList by child(typeParameterList)
override var annotationList: JKAnnotationList by child(annotationList)
} }
class JKJavaLiteralExpressionImpl( class JKJavaLiteralExpressionImpl(
@@ -273,7 +273,7 @@ class JKLocalVariableImpl(modifierList: JKModifierList, type: JKTypeElement, nam
override var modifierList by child(modifierList) override var modifierList by child(modifierList)
override var initializer by child(initializer) override var initializer by child(initializer)
override var name by child(name) override var name by child(name)
override val type by child(type) override var type by child(type)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLocalVariable(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLocalVariable(this, data)
} }
@@ -478,7 +478,7 @@ class JKEnumConstantImpl(
) : JKEnumConstant, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { ) : JKEnumConstant, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
override var name: JKNameIdentifier by child(name) override var name: JKNameIdentifier by child(name)
override val arguments: JKExpressionList by child(arguments) override val arguments: JKExpressionList by child(arguments)
override val type: JKTypeElement by child(type) override var type: JKTypeElement by child(type)
override var initializer: JKExpression by child(JKStubExpressionImpl()) override var initializer: JKExpression by child(JKStubExpressionImpl())
override var modifierList: JKModifierList by child(modifierList) override var modifierList: JKModifierList by child(modifierList)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitEnumConstant(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitEnumConstant(this, data)
@@ -507,3 +507,13 @@ class JKPackageDeclarationImpl(packageName: JKNameIdentifier) : JKPackageDeclara
override var packageName: JKNameIdentifier by child(packageName) override var packageName: JKNameIdentifier by child(packageName)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPackageDeclaration(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPackageDeclaration(this, data)
} }
class JKAnnotationListImpl(annotations: List<JKAnnotation> = emptyList()) : JKAnnotationList, JKBranchElementBase() {
override var annotations: List<JKAnnotation> by children(annotations)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAnnotationList(this, data)
}
class JKAnnotationImpl(name: JKNameIdentifier) : JKAnnotation, JKBranchElementBase() {
override var name: JKNameIdentifier by child(name)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAnnotation(this, data)
}
@@ -49,7 +49,8 @@ class JKKtFunctionImpl(
parameters: List<JKParameter>, parameters: List<JKParameter>,
block: JKBlock, block: JKBlock,
modifierList: JKModifierList, modifierList: JKModifierList,
typeParameterList: JKTypeParameterList typeParameterList: JKTypeParameterList,
annotationList: JKAnnotationList
) : JKBranchElementBase(), JKKtFunction { ) : JKBranchElementBase(), JKKtFunction {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtFunction(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtFunction(this, data)
@@ -59,6 +60,7 @@ class JKKtFunctionImpl(
override var block: JKBlock by child(block) override var block: JKBlock by child(block)
override var modifierList: JKModifierList by child(modifierList) override var modifierList: JKModifierList by child(modifierList)
override var typeParameterList: JKTypeParameterList by child(typeParameterList) override var typeParameterList: JKTypeParameterList by child(typeParameterList)
override var annotationList: JKAnnotationList by child(annotationList)
} }
sealed class JKKtQualifierImpl : JKQualifier, JKElementBase() { sealed class JKKtQualifierImpl : JKQualifier, JKElementBase() {
@@ -169,6 +171,8 @@ class JKKtConstructorImpl(
override var modifierList: JKModifierList by child(modifierList) override var modifierList: JKModifierList by child(modifierList)
override var delegationCall: JKExpression by child(delegationCall) override var delegationCall: JKExpression by child(delegationCall)
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl()) override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
override var annotationList: JKAnnotationList by child(JKAnnotationListImpl())
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtConstructor(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtConstructor(this, data)
} }
@@ -187,6 +191,7 @@ class JKKtPrimaryConstructorImpl(
override var modifierList: JKModifierList by child(modifierList) override var modifierList: JKModifierList by child(modifierList)
override var delegationCall: JKExpression by child(delegationCall) override var delegationCall: JKExpression by child(delegationCall)
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl()) override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
override var annotationList: JKAnnotationList by child(JKAnnotationListImpl())
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtPrimaryConstructor(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtPrimaryConstructor(this, data)
} }
+14 -2
View File
@@ -62,7 +62,19 @@ interface JKInheritanceInfo : JKTreeElement, JKBranchElement {
val inherit: List<JKTypeElement> val inherit: List<JKTypeElement>
} }
interface JKMethod : JKDeclaration, JKModifierListOwner, JKTypeParameterListOwner { interface JKAnnotationList : JKTreeElement {
var annotations: List<JKAnnotation>
}
interface JKAnnotation : JKTreeElement {
var name: JKNameIdentifier//TODO
}
interface JKAnnotationListOwner : JKTreeElement {
var annotationList: JKAnnotationList
}
interface JKMethod : JKDeclaration, JKModifierListOwner, JKTypeParameterListOwner, JKAnnotationListOwner {
val name: JKNameIdentifier val name: JKNameIdentifier
var parameters: List<JKParameter> var parameters: List<JKParameter>
val returnType: JKTypeElement val returnType: JKTypeElement
@@ -70,7 +82,7 @@ interface JKMethod : JKDeclaration, JKModifierListOwner, JKTypeParameterListOwne
} }
interface JKField : JKDeclaration, JKModifierListOwner { interface JKField : JKDeclaration, JKModifierListOwner {
val type: JKTypeElement var type: JKTypeElement
var name: JKNameIdentifier var name: JKNameIdentifier
var initializer: JKExpression var initializer: JKExpression
} }
@@ -8,6 +8,9 @@ interface JKVisitor<out R, in D> {
fun visitFile(file: JKFile, data: D): R = visitTreeElement(file, data) fun visitFile(file: JKFile, data: D): R = visitTreeElement(file, data)
fun visitClass(klass: JKClass, data: D): R = visitDeclaration(klass, data) fun visitClass(klass: JKClass, data: D): R = visitDeclaration(klass, data)
fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo, data: D): R = visitTreeElement(inheritanceInfo, data) fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo, data: D): R = visitTreeElement(inheritanceInfo, data)
fun visitAnnotationList(annotationList: JKAnnotationList, data: D): R = visitTreeElement(annotationList, data)
fun visitAnnotation(annotation: JKAnnotation, data: D): R = visitTreeElement(annotation, data)
fun visitAnnotationListOwner(annotationListOwner: JKAnnotationListOwner, data: D): R = visitTreeElement(annotationListOwner, data)
fun visitMethod(method: JKMethod, data: D): R = visitDeclaration(method, data) fun visitMethod(method: JKMethod, data: D): R = visitDeclaration(method, data)
fun visitField(field: JKField, data: D): R = visitDeclaration(field, data) fun visitField(field: JKField, data: D): R = visitDeclaration(field, data)
fun visitLocalVariable(localVariable: JKLocalVariable, data: D): R = visitField(localVariable, data) fun visitLocalVariable(localVariable: JKLocalVariable, data: D): R = visitField(localVariable, data)
@@ -85,11 +88,11 @@ interface JKVisitor<out R, in D> {
fun visitJavaThrowStatement(javaThrowStatement: JKJavaThrowStatement, data: D): R = visitStatement(javaThrowStatement, data) fun visitJavaThrowStatement(javaThrowStatement: JKJavaThrowStatement, data: D): R = visitStatement(javaThrowStatement, data)
fun visitJavaTryStatement(javaTryStatement: JKJavaTryStatement, data: D): R = visitStatement(javaTryStatement, data) fun visitJavaTryStatement(javaTryStatement: JKJavaTryStatement, data: D): R = visitStatement(javaTryStatement, data)
fun visitJavaTryCatchSection(javaTryCatchSection: JKJavaTryCatchSection, data: D): R = visitTreeElement(javaTryCatchSection, data) fun visitJavaTryCatchSection(javaTryCatchSection: JKJavaTryCatchSection, data: D): R = visitTreeElement(javaTryCatchSection, data)
fun visitJavaContinueStatement(javaContinueStatement: JKJavaContinueStatement, data: D): R = visitStatement(javaContinueStatement, data)
fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: D): R = visitStatement(javaSwitchStatement, data) fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: D): R = visitStatement(javaSwitchStatement, data)
fun visitJavaSwitchCase(javaSwitchCase: JKJavaSwitchCase, data: D): R = visitTreeElement(javaSwitchCase, data) fun visitJavaSwitchCase(javaSwitchCase: JKJavaSwitchCase, data: D): R = visitTreeElement(javaSwitchCase, data)
fun visitJavaDefaultSwitchCase(javaDefaultSwitchCase: JKJavaDefaultSwitchCase, data: D): R = visitJavaSwitchCase(javaDefaultSwitchCase, data) fun visitJavaDefaultSwitchCase(javaDefaultSwitchCase: JKJavaDefaultSwitchCase, data: D): R = visitJavaSwitchCase(javaDefaultSwitchCase, data)
fun visitJavaLabelSwitchCase(javaLabelSwitchCase: JKJavaLabelSwitchCase, data: D): R = visitJavaSwitchCase(javaLabelSwitchCase, data) fun visitJavaLabelSwitchCase(javaLabelSwitchCase: JKJavaLabelSwitchCase, data: D): R = visitJavaSwitchCase(javaLabelSwitchCase, data)
fun visitJavaContinueStatement(javaContinueStatement: JKJavaContinueStatement, data: D): R = visitStatement(javaContinueStatement, data)
fun visitKtProperty(ktProperty: JKKtProperty, data: D): R = visitField(ktProperty, data) fun visitKtProperty(ktProperty: JKKtProperty, data: D): R = visitField(ktProperty, data)
fun visitKtFunction(ktFunction: JKKtFunction, data: D): R = visitMethod(ktFunction, data) fun visitKtFunction(ktFunction: JKKtFunction, data: D): R = visitMethod(ktFunction, data)
fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitDeclaration(ktConstructor, data) fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitDeclaration(ktConstructor, data)
@@ -13,6 +13,12 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitClass(klass: JKClass, data: Nothing?) = visitClass(klass) override fun visitClass(klass: JKClass, data: Nothing?) = visitClass(klass)
fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo) = visitTreeElement(inheritanceInfo, null) fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo) = visitTreeElement(inheritanceInfo, null)
override fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo, data: Nothing?) = visitInheritanceInfo(inheritanceInfo) override fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo, data: Nothing?) = visitInheritanceInfo(inheritanceInfo)
fun visitAnnotationList(annotationList: JKAnnotationList) = visitTreeElement(annotationList, null)
override fun visitAnnotationList(annotationList: JKAnnotationList, data: Nothing?) = visitAnnotationList(annotationList)
fun visitAnnotation(annotation: JKAnnotation) = visitTreeElement(annotation, null)
override fun visitAnnotation(annotation: JKAnnotation, data: Nothing?) = visitAnnotation(annotation)
fun visitAnnotationListOwner(annotationListOwner: JKAnnotationListOwner) = visitTreeElement(annotationListOwner, null)
override fun visitAnnotationListOwner(annotationListOwner: JKAnnotationListOwner, data: Nothing?) = visitAnnotationListOwner(annotationListOwner)
fun visitMethod(method: JKMethod) = visitDeclaration(method, null) fun visitMethod(method: JKMethod) = visitDeclaration(method, null)
override fun visitMethod(method: JKMethod, data: Nothing?) = visitMethod(method) override fun visitMethod(method: JKMethod, data: Nothing?) = visitMethod(method)
fun visitField(field: JKField) = visitDeclaration(field, null) fun visitField(field: JKField) = visitDeclaration(field, null)
@@ -163,6 +169,10 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?) = visitJavaAssignmentExpression(javaAssignmentExpression) override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?) = visitJavaAssignmentExpression(javaAssignmentExpression)
fun visitJavaThrowStatement(javaThrowStatement: JKJavaThrowStatement) = visitStatement(javaThrowStatement, null) fun visitJavaThrowStatement(javaThrowStatement: JKJavaThrowStatement) = visitStatement(javaThrowStatement, null)
override fun visitJavaThrowStatement(javaThrowStatement: JKJavaThrowStatement, data: Nothing?) = visitJavaThrowStatement(javaThrowStatement) override fun visitJavaThrowStatement(javaThrowStatement: JKJavaThrowStatement, data: Nothing?) = visitJavaThrowStatement(javaThrowStatement)
fun visitJavaTryStatement(javaTryStatement: JKJavaTryStatement) = visitStatement(javaTryStatement, null)
override fun visitJavaTryStatement(javaTryStatement: JKJavaTryStatement, data: Nothing?) = visitJavaTryStatement(javaTryStatement)
fun visitJavaTryCatchSection(javaTryCatchSection: JKJavaTryCatchSection) = visitTreeElement(javaTryCatchSection, null)
override fun visitJavaTryCatchSection(javaTryCatchSection: JKJavaTryCatchSection, data: Nothing?) = visitJavaTryCatchSection(javaTryCatchSection)
fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement) = visitStatement(javaSwitchStatement, null) fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement) = visitStatement(javaSwitchStatement, null)
override fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: Nothing?) = visitJavaSwitchStatement(javaSwitchStatement) override fun visitJavaSwitchStatement(javaSwitchStatement: JKJavaSwitchStatement, data: Nothing?) = visitJavaSwitchStatement(javaSwitchStatement)
fun visitJavaSwitchCase(javaSwitchCase: JKJavaSwitchCase) = visitTreeElement(javaSwitchCase, null) fun visitJavaSwitchCase(javaSwitchCase: JKJavaSwitchCase) = visitTreeElement(javaSwitchCase, null)
@@ -173,10 +183,6 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitJavaLabelSwitchCase(javaLabelSwitchCase: JKJavaLabelSwitchCase, data: Nothing?) = visitJavaLabelSwitchCase(javaLabelSwitchCase) override fun visitJavaLabelSwitchCase(javaLabelSwitchCase: JKJavaLabelSwitchCase, data: Nothing?) = visitJavaLabelSwitchCase(javaLabelSwitchCase)
fun visitJavaContinueStatement(javaContinueStatement: JKJavaContinueStatement) = visitStatement(javaContinueStatement, null) fun visitJavaContinueStatement(javaContinueStatement: JKJavaContinueStatement) = visitStatement(javaContinueStatement, null)
override fun visitJavaContinueStatement(javaContinueStatement: JKJavaContinueStatement, data: Nothing?) = visitJavaContinueStatement(javaContinueStatement) override fun visitJavaContinueStatement(javaContinueStatement: JKJavaContinueStatement, data: Nothing?) = visitJavaContinueStatement(javaContinueStatement)
fun visitJavaTryStatement(javaTryStatement: JKJavaTryStatement) = visitStatement(javaTryStatement, null)
override fun visitJavaTryStatement(javaTryStatement: JKJavaTryStatement, data: Nothing?) = visitJavaTryStatement(javaTryStatement)
fun visitJavaTryCatchSection(javaTryCatchSection: JKJavaTryCatchSection) = visitTreeElement(javaTryCatchSection, null)
override fun visitJavaTryCatchSection(javaTryCatchSection: JKJavaTryCatchSection, data: Nothing?) = visitJavaTryCatchSection(javaTryCatchSection)
fun visitKtProperty(ktProperty: JKKtProperty) = visitField(ktProperty, null) fun visitKtProperty(ktProperty: JKKtProperty) = visitField(ktProperty, null)
override fun visitKtProperty(ktProperty: JKKtProperty, data: Nothing?) = visitKtProperty(ktProperty) override fun visitKtProperty(ktProperty: JKKtProperty, data: Nothing?) = visitKtProperty(ktProperty)
fun visitKtFunction(ktFunction: JKKtFunction) = visitMethod(ktFunction, null) fun visitKtFunction(ktFunction: JKKtFunction) = visitMethod(ktFunction, null)