New J2K: Support 'override' modality

This commit is contained in:
Simon Ogorodnik
2018-08-27 21:05:47 +03:00
committed by Ilya Kirillov
parent dcffb60dc9
commit 3dbdb2b64d
4 changed files with 14 additions and 6 deletions
@@ -294,6 +294,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
parameterList.parameters.map { it.toJK() }, parameterList.parameters.map { it.toJK() },
body?.toJK() ?: JKBodyStub body?.toJK() ?: JKBodyStub
).also { ).also {
backAnnotation[it] = this
symbolProvider.provideUniverseSymbol(this, it) symbolProvider.provideUniverseSymbol(this, it)
} }
} }
@@ -82,6 +82,7 @@ class NewCodeBuilder {
JKModalityModifier.Modality.OPEN -> "open" JKModalityModifier.Modality.OPEN -> "open"
JKModalityModifier.Modality.FINAL -> "final" JKModalityModifier.Modality.FINAL -> "final"
JKModalityModifier.Modality.ABSTRACT -> "abstract" JKModalityModifier.Modality.ABSTRACT -> "abstract"
JKModalityModifier.Modality.OVERRIDE -> "override"
} }
) )
} }
@@ -6,18 +6,18 @@
package org.jetbrains.kotlin.j2k.conversions package org.jetbrains.kotlin.j2k.conversions
import com.intellij.psi.PsiClass import com.intellij.psi.PsiClass
import com.intellij.psi.PsiMethod
import org.jetbrains.kotlin.j2k.ConversionContext import org.jetbrains.kotlin.j2k.ConversionContext
import org.jetbrains.kotlin.j2k.tree.JKClass import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.JKModalityModifier
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
import org.jetbrains.kotlin.j2k.tree.impl.modality import org.jetbrains.kotlin.j2k.tree.impl.modality
class ModalityConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { class ModalityConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
override fun applyToElement(element: JKTreeElement): JKTreeElement { override fun applyToElement(element: JKTreeElement): JKTreeElement {
if (element is JKClass) { when (element) {
processClass(element) is JKClass -> processClass(element)
is JKJavaMethod -> processMethod(element)
} }
return recurse(element) return recurse(element)
} }
@@ -31,4 +31,10 @@ class ModalityConversion(private val context: ConversionContext) : RecursiveAppl
} }
} }
private fun processMethod(method: JKJavaMethod) {
if ((context.backAnnotator(method)!! as PsiMethod).findSuperMethods().isNotEmpty()) {
method.modifierList.modality = JKModalityModifier.Modality.OVERRIDE
}
}
} }
@@ -86,7 +86,7 @@ interface JKAccessModifier : JKModifier {
interface JKModalityModifier : JKModifier { interface JKModalityModifier : JKModifier {
enum class Modality { enum class Modality {
OPEN, FINAL, ABSTRACT OPEN, FINAL, ABSTRACT, OVERRIDE
} }
val modality: Modality val modality: Modality