J2K: got rid from Converter.convertElement + fixed local classes conversion
#KT-5202 Fixed
This commit is contained in:
@@ -218,7 +218,7 @@ public class Converter private(val project: Project, val settings: ConverterSett
|
||||
else -> throw IllegalArgumentException("Unknown member: $member")
|
||||
}
|
||||
|
||||
private fun convertClass(psiClass: PsiClass): Class {
|
||||
fun convertClass(psiClass: PsiClass): Class {
|
||||
val annotations = convertAnnotations(psiClass)
|
||||
var modifiers = convertModifiers(psiClass)
|
||||
val typeParameters = convertTypeParameterList(psiClass.getTypeParameterList())
|
||||
@@ -258,11 +258,12 @@ public class Converter private(val project: Project, val settings: ConverterSett
|
||||
val modifiers = convertModifiers(field)
|
||||
val name = field.declarationIdentifier()
|
||||
val converted = if (field is PsiEnumConstant) {
|
||||
val argumentList = field.getArgumentList()
|
||||
EnumConstant(name,
|
||||
annotations,
|
||||
modifiers,
|
||||
typeConverter.convertType(field.getType(), Nullability.NotNull),
|
||||
convertElement(field.getArgumentList()))
|
||||
ExpressionList(convertExpressions(argumentList?.getExpressions())).assignPrototype(argumentList))
|
||||
}
|
||||
else {
|
||||
val isVal = isVal(field)
|
||||
@@ -418,13 +419,16 @@ public class Converter private(val project: Project, val settings: ConverterSett
|
||||
return expressionVisitor.result.assignPrototype(expression)
|
||||
}
|
||||
|
||||
//TODO: drop this method - it has unclear semantics
|
||||
fun convertElement(element: PsiElement?): Element {
|
||||
if (element == null) return Element.Empty
|
||||
|
||||
val elementVisitor = ElementVisitor(this)
|
||||
element.accept(elementVisitor)
|
||||
return elementVisitor.result.assignPrototype(element)
|
||||
fun convertLocalVariable(variable: PsiLocalVariable): LocalVariable {
|
||||
val isVal = variable.hasModifierProperty(PsiModifier.FINAL) ||
|
||||
variable.getInitializer() == null/* we do not know actually and prefer val until we have better analysis*/ ||
|
||||
!variable.hasWriteAccesses(variable.getContainingMethod())
|
||||
return LocalVariable(variable.declarationIdentifier(),
|
||||
convertAnnotations(variable),
|
||||
convertModifiers(variable),
|
||||
variableTypeToDeclare(variable, settings.specifyLocalVariableTypeByDefault, isVal),
|
||||
convertExpression(variable.getInitializer(), variable.getType()),
|
||||
isVal).assignPrototype(variable)
|
||||
}
|
||||
|
||||
fun convertCodeReferenceElement(element: PsiJavaCodeReferenceElement, hasExternalQualifier: Boolean, typeArgsConverted: List<Element>? = null): ReferenceElement {
|
||||
|
||||
@@ -61,8 +61,9 @@ class TypeParameterList(val parameters: List<TypeParameter>) : Element() {
|
||||
}
|
||||
}
|
||||
|
||||
fun Converter.convertTypeParameter(psiTypeParameter: PsiTypeParameter): TypeParameter {
|
||||
return convertElement(psiTypeParameter) as TypeParameter
|
||||
private fun Converter.convertTypeParameter(typeParameter: PsiTypeParameter): TypeParameter {
|
||||
return TypeParameter(typeParameter.declarationIdentifier(),
|
||||
typeParameter.getExtendsListTypes().map { typeConverter.convertType(it) }).assignPrototype(typeParameter)
|
||||
}
|
||||
|
||||
fun Converter.convertTypeParameterList(typeParameterList: PsiTypeParameterList?): TypeParameterList {
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.j2k.visitors
|
||||
|
||||
import com.intellij.psi.*
|
||||
import org.jetbrains.jet.j2k.*
|
||||
import org.jetbrains.jet.j2k.ast.*
|
||||
|
||||
class ElementVisitor(private val converter: Converter) : JavaElementVisitor() {
|
||||
private val typeConverter = converter.typeConverter
|
||||
|
||||
public var result: Element = Element.Empty
|
||||
protected set
|
||||
|
||||
override fun visitLocalVariable(variable: PsiLocalVariable) {
|
||||
val isVal = variable.hasModifierProperty(PsiModifier.FINAL) ||
|
||||
variable.getInitializer() == null/* we do not know actually and prefer val until we have better analysis*/ ||
|
||||
!variable.hasWriteAccesses(variable.getContainingMethod())
|
||||
result = LocalVariable(variable.declarationIdentifier(),
|
||||
converter.convertAnnotations(variable),
|
||||
converter.convertModifiers(variable),
|
||||
converter.variableTypeToDeclare(variable, converter.settings.specifyLocalVariableTypeByDefault, isVal),
|
||||
converter.convertExpression(variable.getInitializer(), variable.getType()),
|
||||
isVal)
|
||||
}
|
||||
|
||||
override fun visitExpressionList(list: PsiExpressionList) {
|
||||
result = ExpressionList(converter.convertExpressions(list.getExpressions()))
|
||||
}
|
||||
|
||||
override fun visitTypeElement(`type`: PsiTypeElement) {
|
||||
result = TypeElement(typeConverter.convertType(`type`.getType()))
|
||||
}
|
||||
|
||||
override fun visitTypeParameter(classParameter: PsiTypeParameter) {
|
||||
result = TypeParameter(classParameter.declarationIdentifier(),
|
||||
classParameter.getExtendsListTypes().map { typeConverter.convertType(it) })
|
||||
}
|
||||
|
||||
override fun visitParameterList(list: PsiParameterList) {
|
||||
result = converter.convertParameterList(list)
|
||||
}
|
||||
}
|
||||
@@ -122,10 +122,6 @@ open class ExpressionVisitor(private val converter: Converter) : JavaElementVisi
|
||||
expression.isInSingleLine())
|
||||
}
|
||||
|
||||
override fun visitExpressionList(list: PsiExpressionList) {
|
||||
result = ExpressionList(converter.convertExpressions(list.getExpressions()))
|
||||
}
|
||||
|
||||
override fun visitInstanceOfExpression(expression: PsiInstanceOfExpression) {
|
||||
val checkType = expression.getCheckType()
|
||||
result = IsOperator(converter.convertExpression(expression.getOperand()),
|
||||
|
||||
@@ -73,7 +73,13 @@ open class StatementVisitor(public val converter: Converter) : JavaElementVisito
|
||||
}
|
||||
|
||||
override fun visitDeclarationStatement(statement: PsiDeclarationStatement) {
|
||||
result = DeclarationStatement(statement.getDeclaredElements().map { converter.convertElement(it) })
|
||||
result = DeclarationStatement(statement.getDeclaredElements().map {
|
||||
when (it) {
|
||||
is PsiLocalVariable -> converter.convertLocalVariable(it)
|
||||
is PsiClass -> converter.convertClass(it)
|
||||
else -> Element.Empty //what else can be here?
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun visitDoWhileStatement(statement: PsiDoWhileStatement) {
|
||||
|
||||
@@ -2364,6 +2364,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv
|
||||
doTest("j2k/tests/testData/ast/nullability/MethodReturnsNullInAnonymousClass.java");
|
||||
}
|
||||
|
||||
@TestMetadata("MethodReturnsNullInLocalClass.java")
|
||||
public void testMethodReturnsNullInLocalClass() throws Exception {
|
||||
doTest("j2k/tests/testData/ast/nullability/MethodReturnsNullInLocalClass.java");
|
||||
}
|
||||
|
||||
@TestMetadata("MethodReturnsTernaryNull.java")
|
||||
public void testMethodReturnsTernaryNull() throws Exception {
|
||||
doTest("j2k/tests/testData/ast/nullability/MethodReturnsTernaryNull.java");
|
||||
|
||||
+1
-2
@@ -1,9 +1,8 @@
|
||||
//file
|
||||
class C {
|
||||
String foo() {
|
||||
class Local {
|
||||
String foo() { return null; }
|
||||
};
|
||||
}
|
||||
new Local().foo();
|
||||
return "";
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
class C {
|
||||
fun foo(): String {
|
||||
class Local {
|
||||
fun foo(): String? {
|
||||
return null
|
||||
}
|
||||
}
|
||||
Local().foo()
|
||||
return ""
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user