New J2K: Fix modality conversion

This commit is contained in:
Ilya Kirillov
2019-01-28 14:08:54 +03:00
committed by Ilya Kirillov
parent 936c43d2bc
commit 18e5c1b5f2
2 changed files with 21 additions and 32 deletions
@@ -1,19 +0,0 @@
/*
* 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.JKExpressionStatementImpl
import org.jetbrains.kotlin.j2k.tree.impl.JKKtThrowExpressionImpl
class EnumClassConversion : RecursiveApplicableConversionBase() {
override fun applyToElement(element: JKTreeElement): JKTreeElement {
if (element !is JKClass || element.classKind != JKClass.ClassKind.ENUM) return recurse(element)
element.modality = Modality.FINAL
return recurse(element)
}
}
@@ -21,24 +21,32 @@ class ModalityConversion(private val context: ConversionContext) : RecursiveAppl
}
private fun processClass(klass: JKClass) {
if (klass.classKind != JKClass.ClassKind.CLASS) return
if (klass.modality != Modality.OPEN) return
if (context.converter.settings.openByDefault) return
if (!context.converter.converterServices.oldServices.referenceSearcher.hasInheritors(klass.psi as PsiClass)) {
klass.modality = Modality.FINAL
klass.modality = when {
klass.classKind == JKClass.ClassKind.ENUM -> Modality.FINAL
klass.modality == Modality.OPEN
&& context.converter.settings.openByDefault -> Modality.OPEN
klass.modality == Modality.OPEN
&& context.converter.settings.openByDefault -> Modality.OPEN
klass.modality == Modality.OPEN
&& !context.converter.converterServices.oldServices.referenceSearcher.hasInheritors(klass.psi as PsiClass) ->
Modality.FINAL
else -> klass.modality
}
}
private fun processMethod(method: JKJavaMethod) {
val psi = method.psi<PsiMethod>()!!
if (method.modality == Modality.OPEN
&& !context.converter.converterServices.oldServices.referenceSearcher.hasOverrides(psi)
) {
method.modality = Modality.FINAL
}
if ((method.psi!! as PsiMethod).findSuperMethods().isNotEmpty()) {
method.modality = Modality.OVERRIDE
method.modality = when {
method.modality != Modality.ABSTRACT
&& (method.psi!! as PsiMethod).findSuperMethods().isNotEmpty() -> Modality.OVERRIDE
method.modality == Modality.OPEN
&& context.converter.settings.openByDefault
&& method.visibility != Visibility.PRIVATE -> Modality.OPEN
method.modality == Modality.OPEN
&& !context.converter.converterServices.oldServices.referenceSearcher.hasOverrides(psi) -> Modality.FINAL
else -> method.modality
}
}
}