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) =
batchPipe {
//Java --> Kotlin conversions
+JavaModifiersConversion()
+JavaModifiersConversion(context)
+JavaAnnotationsConversion()
+InternalClassConversion(context)
+ModalityConversion(context)
+AssignmentAsExpressionToAlsoConversion(context)
@@ -372,6 +372,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
with(expressionTreeMapper) { typeElement?.toJK() } ?: JKTypeElementImpl(JKNoTypeImpl),
JKNameIdentifierImpl(name),
with(expressionTreeMapper) { initializer.toJK() },
JKAnnotationListImpl(annotations.map { it.toJK() }),
modifiers(),
visibility(),
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 {
return JKJavaMethodImpl(
with(expressionTreeMapper) {
@@ -220,6 +220,10 @@ class NewCodeBuilder {
override fun visitKtProperty(ktProperty: JKKtProperty) {
ktProperty.annotationList.accept(this)
if (ktProperty.annotationList.annotations.isNotEmpty()) {
printer.println()
}
renderModifiersList(ktProperty)
printer.printWithNoIndent(" ")
@@ -45,6 +45,7 @@ class FieldToPropertyConversion(private val context: ConversionContext) : Recurs
JKTypeElementImpl(it.returnType.type),
JKNameIdentifierImpl(propertyNameFromGet(it)!!),
JKStubExpressionImpl(),
JKAnnotationListImpl(),
emptyList(),
Visibility.PRIVATE,
Modality.OPEN,
@@ -104,6 +105,7 @@ class FieldToPropertyConversion(private val context: ConversionContext) : Recurs
propertyField.initializer,
ktGetter,
ktSetter,
propertyField.annotationList,
propertyField.extraModifiers,
visibility,
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
class JKJavaFieldImpl(
type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression,
type: JKTypeElement,
name: JKNameIdentifier,
initializer: JKExpression,
annotationList: JKAnnotationList,
override var extraModifiers: List<ExtraModifier>,
override var visibility: Visibility,
override var modality: Modality,
@@ -37,6 +40,7 @@ class JKJavaFieldImpl(
JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
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 type by child(type)
override var name: JKNameIdentifier by child(name)
@@ -501,7 +501,7 @@ class JKAnnotationListImpl(annotations: List<JKAnnotation> = emptyList()) : JKAn
class JKAnnotationImpl(
override val classSymbol: JKClassSymbol,
arguments: JKExpressionList
arguments: JKExpressionList = JKExpressionListImpl()
) : JKAnnotation, JKBranchElementBase() {
override var arguments: JKExpressionList by child(arguments)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAnnotation(this, data)
@@ -31,6 +31,7 @@ class JKKtPropertyImpl(
initializer: JKExpression,
getter: JKKtGetterOrSetter,
setter: JKKtGetterOrSetter,
annotationList: JKAnnotationList,
override var extraModifiers: List<ExtraModifier>,
override var visibility: Visibility,
override var modality: Modality,
@@ -38,6 +39,7 @@ class JKKtPropertyImpl(
) : JKBranchElementBase(), JKKtProperty {
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 name: JKNameIdentifier by child(name)
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.j2k.tree.impl.*
interface JKField : JKVariable, JKVisibilityOwner, JKMutabilityOwner, JKModalityOwner, JKExtraModifiersOwner
interface JKField : JKVariable, JKVisibilityOwner, JKMutabilityOwner, JKModalityOwner, JKExtraModifiersOwner, JKAnnotationListOwner
interface JKJavaField : JKField, JKBranchElement