diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt index 5c58846f36e..631fde382ae 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt @@ -538,6 +538,15 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter { val qualifier = expression.qualifierExpression var identifier = Identifier.withNoPrototype(referenceName, isNullable) + + + expression.getContainingClass()?.getParentOfType(false)?.let { + if (it == expression.qualifierExpression?.reference?.resolve()) { + result = QualifiedExpression(ThisExpression(Identifier.Empty).assignNoPrototype(), identifier) + return + } + } + if (qualifier != null && qualifier.type is PsiArrayType && referenceName == "length") { identifier = Identifier.withNoPrototype("size", isNullable) } diff --git a/j2k/testData/fileOrElement/anonymousClass/kt-13146.java b/j2k/testData/fileOrElement/anonymousClass/kt-13146.java new file mode 100644 index 00000000000..e5bb4583d91 --- /dev/null +++ b/j2k/testData/fileOrElement/anonymousClass/kt-13146.java @@ -0,0 +1,17 @@ +public class Test { + public Runnable someRunnable = new Runnable() { + @Override + public void run() { + someRunnable.run(); + } + }; +} + +public class Test2 { + private Runnable someRunnable = new Runnable() { + @Override + public void run() { + someRunnable.run(); + } + }; +} diff --git a/j2k/testData/fileOrElement/anonymousClass/kt-13146.kt b/j2k/testData/fileOrElement/anonymousClass/kt-13146.kt new file mode 100644 index 00000000000..6014d4f9ab8 --- /dev/null +++ b/j2k/testData/fileOrElement/anonymousClass/kt-13146.kt @@ -0,0 +1,15 @@ +class Test { + var someRunnable: Runnable = object : Runnable { + override fun run() { + this.run() + } + } +} + +class Test2 { + private val someRunnable = object : Runnable { + override fun run() { + this.run() + } + } +} diff --git a/j2k/testData/fileOrElement/anonymousClass/localSelfReference.java b/j2k/testData/fileOrElement/anonymousClass/localSelfReference.java new file mode 100644 index 00000000000..0ebea91b0f2 --- /dev/null +++ b/j2k/testData/fileOrElement/anonymousClass/localSelfReference.java @@ -0,0 +1,11 @@ + +public class Test { + public void someMethod() { + Runnable someRunnable = new Runnable() { + @Override + public void run() { + someRunnable.run(); + } + }; + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/anonymousClass/localSelfReference.kt b/j2k/testData/fileOrElement/anonymousClass/localSelfReference.kt new file mode 100644 index 00000000000..938171968a2 --- /dev/null +++ b/j2k/testData/fileOrElement/anonymousClass/localSelfReference.kt @@ -0,0 +1,9 @@ +class Test { + fun someMethod() { + val someRunnable = object : Runnable { + override fun run() { + this.run() + } + } + } +} \ No newline at end of file diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index d8643390d4e..f5df543c5eb 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -149,6 +149,27 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo } } + @TestMetadata("j2k/testData/fileOrElement/anonymousClass") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class AnonymousClass extends AbstractJavaToKotlinConverterForWebDemoTest { + public void testAllFilesPresentInAnonymousClass() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/anonymousClass"), Pattern.compile("^(.+)\\.java$"), true); + } + + @TestMetadata("kt-13146.java") + public void testKt_13146() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/anonymousClass/kt-13146.java"); + doTest(fileName); + } + + @TestMetadata("localSelfReference.java") + public void testLocalSelfReference() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/anonymousClass/localSelfReference.java"); + doTest(fileName); + } + } + @TestMetadata("j2k/testData/fileOrElement/arrayAccessExpression") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 93a71395711..f985d4bdad9 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -149,6 +149,27 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo } } + @TestMetadata("j2k/testData/fileOrElement/anonymousClass") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class AnonymousClass extends AbstractJavaToKotlinConverterSingleFileTest { + public void testAllFilesPresentInAnonymousClass() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/anonymousClass"), Pattern.compile("^(.+)\\.java$"), true); + } + + @TestMetadata("kt-13146.java") + public void testKt_13146() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/anonymousClass/kt-13146.java"); + doTest(fileName); + } + + @TestMetadata("localSelfReference.java") + public void testLocalSelfReference() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/anonymousClass/localSelfReference.java"); + doTest(fileName); + } + } + @TestMetadata("j2k/testData/fileOrElement/arrayAccessExpression") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/TypeAliasesTestsGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/TypeAliasesTestsGenerated.java index 6242d7cd0db..d39ff29d207 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/TypeAliasesTestsGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/TypeAliasesTestsGenerated.java @@ -71,6 +71,12 @@ public class TypeAliasesTestsGenerated extends AbstractTypeAliasesTests { doTest(fileName); } + @TestMetadata("typeAliasConstructorAccessor.kt") + public void testTypeAliasConstructorAccessor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/typealias/typeAliasConstructorAccessor.kt"); + doTest(fileName); + } + @TestMetadata("typeAliasObject.kt") public void testTypeAliasObject() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/typealias/typeAliasObject.kt");