Java to Kotlin converter: fixed conversion of access to Kotlin property declared as constructor parameter

This commit is contained in:
Valentin Kipyatkov
2014-06-24 00:52:57 +04:00
parent 51ecfe2a09
commit 52994d69ca
5 changed files with 30 additions and 4 deletions
@@ -20,7 +20,6 @@ import com.intellij.psi.*
import com.intellij.psi.tree.IElementType
import org.jetbrains.jet.j2k.ast.*
import org.jetbrains.jet.lang.types.expressions.OperatorConventions
import java.util.ArrayList
import com.intellij.psi.CommonClassNames.*
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.jet.lang.types.lang.PrimitiveType
@@ -34,6 +33,8 @@ import org.jetbrains.jet.lang.psi.psiUtil.isExtensionDeclaration
import org.jetbrains.jet.lang.psi.JetPropertyAccessor
import com.intellij.psi.impl.light.LightField
import org.jetbrains.jet.lang.resolve.java.JvmAbi
import org.jetbrains.jet.lang.psi.JetParameter
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
class ExpressionVisitor(private val converter: Converter,
private val usageReplacementMap: Map<PsiVariable, String> = mapOf()) : JavaElementVisitor() {
@@ -165,8 +166,11 @@ class ExpressionVisitor(private val converter: Converter,
if (target is KotlinLightMethod) {
val origin = target.origin
val isTopLevel = origin?.getParentByType(javaClass<JetClassOrObject>(), true) == null
if (origin is JetProperty || origin is JetPropertyAccessor) {
val property = if (origin is JetProperty) origin else origin.getParent() as JetProperty
if (origin is JetProperty || origin is JetPropertyAccessor || origin is JetParameter) {
val property = if (origin is JetPropertyAccessor)
origin.getParent() as JetProperty
else
origin as JetNamedDeclaration
val parameterCount = target.getParameterList().getParameters().size
if (parameterCount == arguments.size) {
val propertyName = Identifier(property.getName()!!, isNullable)
@@ -1770,6 +1770,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv
doTest("j2k/tests/testData/ast/kotlinApiAccess/Property.java");
}
@TestMetadata("Property2.java")
public void testProperty2() throws Exception {
doTest("j2k/tests/testData/ast/kotlinApiAccess/Property2.java");
}
}
@TestMetadata("j2k/tests/testData/ast/labelStatement")
+1 -1
View File
@@ -1,6 +1,6 @@
package kotlinApi
public open class KotlinClass {
public open class KotlinClass(public var field: Int) {
public var property: String = ""
public var nullableProperty: String? = ""
@@ -0,0 +1,9 @@
//file
import kotlinApi.*
class C {
void foo(KotlinClass k) {
System.out.println(k.getField());
k.setField(1);
}
}
@@ -0,0 +1,8 @@
import kotlinApi.*
class C() {
fun foo(k: KotlinClass) {
System.out.println(k.field)
k.field = 1
}
}