diff --git a/j2k/src/org/jetbrains/jet/j2k/usageProcessing/FieldToPropertyProcessing.kt b/j2k/src/org/jetbrains/jet/j2k/usageProcessing/FieldToPropertyProcessing.kt index 447fc335d27..2d982e09a9b 100644 --- a/j2k/src/org/jetbrains/jet/j2k/usageProcessing/FieldToPropertyProcessing.kt +++ b/j2k/src/org/jetbrains/jet/j2k/usageProcessing/FieldToPropertyProcessing.kt @@ -19,6 +19,7 @@ package org.jetbrains.jet.j2k.usageProcessing import com.intellij.psi.* import org.jetbrains.jet.j2k.CodeConverter import org.jetbrains.jet.j2k.ast.* +import com.intellij.util.IncorrectOperationException class FieldToPropertyProcessing(val field: PsiField, val propertyName: String, val isNullable: Boolean) : UsageProcessing { override val targetElement: PsiElement get() = field @@ -29,14 +30,19 @@ class FieldToPropertyProcessing(val field: PsiField, val propertyName: String, v val identifier = Identifier(propertyName, isNullable).assignNoPrototype() val qualifier = expression.getQualifierExpression() - return if (qualifier != null) { - QualifiedExpression(codeConverter.convertExpression(qualifier), identifier) + if (qualifier != null) { + return QualifiedExpression(codeConverter.convertExpression(qualifier), identifier) } else { // check if field name is shadowed val elementFactory = PsiElementFactory.SERVICE.getInstance(expression.getProject()) - val refExpr = elementFactory.createExpressionFromText(propertyName, expression) as PsiReferenceExpression - if (refExpr.resolve() == null) + val refExpr = try { + elementFactory.createExpressionFromText(propertyName, expression) as? PsiReferenceExpression ?: return identifier + } + catch(e: IncorrectOperationException) { + return identifier + } + return if (refExpr.resolve() == null) identifier else QualifiedExpression(ThisExpression(Identifier.Empty).assignNoPrototype(), identifier) //TODO: this is not correct in case of nested/anonymous classes diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterForWebDemoTestGenerated.java index afbe0a81e7f..c23ff1e26d9 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -1419,6 +1419,18 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("JavaKeywordPropertyName.java") + public void testJavaKeywordPropertyName() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/tests/testData/fileOrElement/dropAccessors/JavaKeywordPropertyName.java"); + doTest(fileName); + } + + @TestMetadata("KeywordPropertyName.java") + public void testKeywordPropertyName() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/tests/testData/fileOrElement/dropAccessors/KeywordPropertyName.java"); + doTest(fileName); + } + @TestMetadata("SetterTypeNotMatch.java") public void testSetterTypeNotMatch() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/tests/testData/fileOrElement/dropAccessors/SetterTypeNotMatch.java"); diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterSingleFileTestGenerated.java index ab23ce16666..c7d9cf9c745 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterSingleFileTestGenerated.java @@ -1419,6 +1419,18 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("JavaKeywordPropertyName.java") + public void testJavaKeywordPropertyName() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/tests/testData/fileOrElement/dropAccessors/JavaKeywordPropertyName.java"); + doTest(fileName); + } + + @TestMetadata("KeywordPropertyName.java") + public void testKeywordPropertyName() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/tests/testData/fileOrElement/dropAccessors/KeywordPropertyName.java"); + doTest(fileName); + } + @TestMetadata("SetterTypeNotMatch.java") public void testSetterTypeNotMatch() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/tests/testData/fileOrElement/dropAccessors/SetterTypeNotMatch.java"); diff --git a/j2k/tests/testData/fileOrElement/dropAccessors/JavaKeywordPropertyName.java b/j2k/tests/testData/fileOrElement/dropAccessors/JavaKeywordPropertyName.java new file mode 100644 index 00000000000..91fee573f4a --- /dev/null +++ b/j2k/tests/testData/fileOrElement/dropAccessors/JavaKeywordPropertyName.java @@ -0,0 +1,11 @@ +class C { + private int field = 0; + + public int getDefault() { + return field; + } + + void foo() { + System.out.println(field); + } +} \ No newline at end of file diff --git a/j2k/tests/testData/fileOrElement/dropAccessors/JavaKeywordPropertyName.kt b/j2k/tests/testData/fileOrElement/dropAccessors/JavaKeywordPropertyName.kt new file mode 100644 index 00000000000..a597f9cb32e --- /dev/null +++ b/j2k/tests/testData/fileOrElement/dropAccessors/JavaKeywordPropertyName.kt @@ -0,0 +1,7 @@ +class C { + public val default: Int = 0 + + fun foo() { + System.out.println(default) + } +} diff --git a/j2k/tests/testData/fileOrElement/dropAccessors/KeywordPropertyName.java b/j2k/tests/testData/fileOrElement/dropAccessors/KeywordPropertyName.java new file mode 100644 index 00000000000..de1d19b5482 --- /dev/null +++ b/j2k/tests/testData/fileOrElement/dropAccessors/KeywordPropertyName.java @@ -0,0 +1,11 @@ +class C { + private int field = 0; + + public int getThis() { + return field; + } + + void foo() { + System.out.println(field); + } +} \ No newline at end of file diff --git a/j2k/tests/testData/fileOrElement/dropAccessors/KeywordPropertyName.kt b/j2k/tests/testData/fileOrElement/dropAccessors/KeywordPropertyName.kt new file mode 100644 index 00000000000..d34c5328537 --- /dev/null +++ b/j2k/tests/testData/fileOrElement/dropAccessors/KeywordPropertyName.kt @@ -0,0 +1,7 @@ +class C { + public val `this`: Int = 0 + + fun foo() { + System.out.println(`this`) + } +} \ No newline at end of file