From e84f56348c6bbbb05ff6c99593e70fe7fd40c76a Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Tue, 11 Oct 2016 15:36:42 +0300 Subject: [PATCH] Fix KT-13750, J2K const val serialVersionUID --- j2k/src/org/jetbrains/kotlin/j2k/Converter.kt | 14 ++++++-------- j2k/src/org/jetbrains/kotlin/j2k/ast/Modifier.kt | 5 +++++ .../fileOrElement/annotations/serialVersionUID.kt | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt index 4698e989245..ca8de8899cb 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt @@ -309,9 +309,9 @@ class Converter private constructor( val setMethod = propertyInfo.setMethod //TODO: annotations from getter/setter? - val annotations = field?.let { convertAnnotations(it) + specialAnnotationPropertyCases(it) } ?: Annotations.Empty + val annotations = field?.let { convertAnnotations(it) } ?: Annotations.Empty - val modifiers = propertyInfo.modifiers + val modifiers = propertyInfo.modifiers + (field?.let{ specialModifiersCase(field) } ?: Modifiers.Empty) val name = propertyInfo.identifier if (field is PsiEnumConstant) { @@ -432,21 +432,19 @@ class Converter private constructor( } - private fun specialAnnotationPropertyCases(field: PsiField): Annotations { + private fun specialModifiersCase(field: PsiField): Modifiers { val javaSerializableInterface = JavaPsiFacade.getInstance(project).findClass(CommonClassNames.JAVA_IO_SERIALIZABLE, field.resolveScope) - val output = mutableListOf() + val output = mutableListOf() if (javaSerializableInterface != null && field.name == "serialVersionUID" && field.hasModifierProperty(PsiModifier.FINAL) && field.hasModifierProperty(PsiModifier.STATIC) && field.containingClass?.isInheritor(javaSerializableInterface, false) ?: false ) { - output.add(Annotation(Identifier.withNoPrototype("JvmStatic"), - listOf(), - newLineAfter = false).assignNoPrototype()) + output.add(Modifier.CONST) } - return Annotations(output) + return Modifiers(output) } private fun combinedNullability(vararg psiElements: PsiElement?): Nullability { diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ast/Modifier.kt b/j2k/src/org/jetbrains/kotlin/j2k/ast/Modifier.kt index 0fad1c2639a..84bcfcaaebd 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/Modifier.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/Modifier.kt @@ -28,6 +28,7 @@ enum class Modifier(private val str: String) { OPEN("open"), OVERRIDE("override"), EXTERNAL("external"), + CONST("const"), INNER("inner"); fun toKotlin(): String = str @@ -66,6 +67,10 @@ class Modifiers(modifiers: Collection) : Element() { fun accessModifier(): Modifier? = modifiers.firstOrNull { it in ACCESS_MODIFIERS } + operator fun plus(other: Modifiers): Modifiers { + return Modifiers(this.modifiers + other.modifiers).assignNoPrototype() + } + companion object { val Empty = Modifiers(listOf()) } diff --git a/j2k/testData/fileOrElement/annotations/serialVersionUID.kt b/j2k/testData/fileOrElement/annotations/serialVersionUID.kt index cbd6e126919..e59693c808e 100644 --- a/j2k/testData/fileOrElement/annotations/serialVersionUID.kt +++ b/j2k/testData/fileOrElement/annotations/serialVersionUID.kt @@ -4,7 +4,7 @@ class Bar : Serializable { internal var foobar = 0 companion object { - @JvmStatic private val serialVersionUID: Long = 0 + private const val serialVersionUID: Long = 0 } }