New J2K: Add annotations for JKField

This commit is contained in:
Ilya Kirillov
2018-12-05 15:28:09 +03:00
committed by Ilya Kirillov
parent 2633834741
commit 213aa9a86d
9 changed files with 46 additions and 4 deletions
@@ -24,7 +24,8 @@ object ConversionsRunner {
private fun createRootConversion(context: ConversionContext) = private fun createRootConversion(context: ConversionContext) =
batchPipe { batchPipe {
//Java --> Kotlin conversions //Java --> Kotlin conversions
+JavaModifiersConversion() +JavaModifiersConversion(context)
+JavaAnnotationsConversion()
+InternalClassConversion(context) +InternalClassConversion(context)
+ModalityConversion(context) +ModalityConversion(context)
+AssignmentAsExpressionToAlsoConversion(context) +AssignmentAsExpressionToAlsoConversion(context)
@@ -372,6 +372,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
with(expressionTreeMapper) { typeElement?.toJK() } ?: JKTypeElementImpl(JKNoTypeImpl), with(expressionTreeMapper) { typeElement?.toJK() } ?: JKTypeElementImpl(JKNoTypeImpl),
JKNameIdentifierImpl(name), JKNameIdentifierImpl(name),
with(expressionTreeMapper) { initializer.toJK() }, with(expressionTreeMapper) { initializer.toJK() },
JKAnnotationListImpl(annotations.map { it.toJK() }),
modifiers(), modifiers(),
visibility(), visibility(),
modality(), modality(),
@@ -382,6 +383,15 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
} }
} }
fun PsiAnnotation.toJK(): JKAnnotation =
JKAnnotationImpl(
symbolProvider.provideSymbol(nameReferenceElement!!),
with(expressionTreeMapper) {
JKExpressionListImpl(parameterList.attributes.map { (it.value as? PsiExpression).toJK() })
}
)
fun PsiMethod.toJK(): JKJavaMethod { fun PsiMethod.toJK(): JKJavaMethod {
return JKJavaMethodImpl( return JKJavaMethodImpl(
with(expressionTreeMapper) { with(expressionTreeMapper) {
@@ -220,6 +220,10 @@ class NewCodeBuilder {
override fun visitKtProperty(ktProperty: JKKtProperty) { override fun visitKtProperty(ktProperty: JKKtProperty) {
ktProperty.annotationList.accept(this)
if (ktProperty.annotationList.annotations.isNotEmpty()) {
printer.println()
}
renderModifiersList(ktProperty) renderModifiersList(ktProperty)
printer.printWithNoIndent(" ") printer.printWithNoIndent(" ")
@@ -45,6 +45,7 @@ class FieldToPropertyConversion(private val context: ConversionContext) : Recurs
JKTypeElementImpl(it.returnType.type), JKTypeElementImpl(it.returnType.type),
JKNameIdentifierImpl(propertyNameFromGet(it)!!), JKNameIdentifierImpl(propertyNameFromGet(it)!!),
JKStubExpressionImpl(), JKStubExpressionImpl(),
JKAnnotationListImpl(),
emptyList(), emptyList(),
Visibility.PRIVATE, Visibility.PRIVATE,
Modality.OPEN, Modality.OPEN,
@@ -104,6 +105,7 @@ class FieldToPropertyConversion(private val context: ConversionContext) : Recurs
propertyField.initializer, propertyField.initializer,
ktGetter, ktGetter,
ktSetter, ktSetter,
propertyField.annotationList,
propertyField.extraModifiers, propertyField.extraModifiers,
visibility, visibility,
propertyField.modality, propertyField.modality,
@@ -0,0 +1,19 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.j2k.conversions
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.impl.JKKtLiteralExpressionImpl
class JavaAnnotationsConversion : RecursiveApplicableConversionBase() {
override fun applyToElement(element: JKTreeElement): JKTreeElement {
if (element !is JKAnnotation) return recurse(element)
if (element.classSymbol.name == "Deprecated" && element.arguments.expressions.isEmpty()) {
element.arguments.expressions += JKKtLiteralExpressionImpl("\"\"", JKLiteralExpression.LiteralType.STRING)
}
return recurse(element)
}
}
@@ -28,7 +28,10 @@ import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
class JKJavaFieldImpl( class JKJavaFieldImpl(
type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression, type: JKTypeElement,
name: JKNameIdentifier,
initializer: JKExpression,
annotationList: JKAnnotationList,
override var extraModifiers: List<ExtraModifier>, override var extraModifiers: List<ExtraModifier>,
override var visibility: Visibility, override var visibility: Visibility,
override var modality: Modality, override var modality: Modality,
@@ -37,6 +40,7 @@ class JKJavaFieldImpl(
JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaField(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaField(this, data)
override var annotationList: JKAnnotationList by child(annotationList)
override var initializer: JKExpression by child(initializer) override var initializer: JKExpression by child(initializer)
override var type by child(type) override var type by child(type)
override var name: JKNameIdentifier by child(name) override var name: JKNameIdentifier by child(name)
@@ -501,7 +501,7 @@ class JKAnnotationListImpl(annotations: List<JKAnnotation> = emptyList()) : JKAn
class JKAnnotationImpl( class JKAnnotationImpl(
override val classSymbol: JKClassSymbol, override val classSymbol: JKClassSymbol,
arguments: JKExpressionList arguments: JKExpressionList = JKExpressionListImpl()
) : JKAnnotation, JKBranchElementBase() { ) : JKAnnotation, JKBranchElementBase() {
override var arguments: JKExpressionList by child(arguments) override var arguments: JKExpressionList by child(arguments)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAnnotation(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAnnotation(this, data)
@@ -31,6 +31,7 @@ class JKKtPropertyImpl(
initializer: JKExpression, initializer: JKExpression,
getter: JKKtGetterOrSetter, getter: JKKtGetterOrSetter,
setter: JKKtGetterOrSetter, setter: JKKtGetterOrSetter,
annotationList: JKAnnotationList,
override var extraModifiers: List<ExtraModifier>, override var extraModifiers: List<ExtraModifier>,
override var visibility: Visibility, override var visibility: Visibility,
override var modality: Modality, override var modality: Modality,
@@ -38,6 +39,7 @@ class JKKtPropertyImpl(
) : JKBranchElementBase(), JKKtProperty { ) : JKBranchElementBase(), JKKtProperty {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtProperty(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtProperty(this, data)
override var annotationList: JKAnnotationList by child(annotationList)
override var type by child(type) override var type by child(type)
override var name: JKNameIdentifier by child(name) override var name: JKNameIdentifier by child(name)
override var initializer: JKExpression by child(initializer) override var initializer: JKExpression by child(initializer)
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.j2k.tree
import org.jetbrains.kotlin.idea.search.usagesSearch.constructor import org.jetbrains.kotlin.idea.search.usagesSearch.constructor
import org.jetbrains.kotlin.j2k.tree.impl.* import org.jetbrains.kotlin.j2k.tree.impl.*
interface JKField : JKVariable, JKVisibilityOwner, JKMutabilityOwner, JKModalityOwner, JKExtraModifiersOwner interface JKField : JKVariable, JKVisibilityOwner, JKMutabilityOwner, JKModalityOwner, JKExtraModifiersOwner, JKAnnotationListOwner
interface JKJavaField : JKField, JKBranchElement interface JKJavaField : JKField, JKBranchElement