diff --git a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt index cf8eb23a761..eb6fad87623 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt @@ -451,6 +451,8 @@ class Converter private constructor( } fun shouldDeclareVariableType(variable: PsiVariable, type: Type, canChangeType: Boolean): Boolean { + assert(inConversionScope(variable)) + val initializer = variable.initializer if (initializer == null || initializer.isNullLiteral()) return true if (initializer.type is PsiPrimitiveType && type is PrimitiveType) { diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt index cc3724834cd..cb7ffd7c64d 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt @@ -535,6 +535,8 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter { fun isNullable(target: PsiVariable): Boolean { if (typeConverter.variableNullability(target).isNullable(codeConverter.settings)) return true + if (!converter.inConversionScope(target)) return false + val canChangeType = when (target) { is PsiLocalVariable -> codeConverter.canChangeType(target) is PsiField -> target.hasModifierProperty(PsiModifier.PRIVATE) diff --git a/j2k/testData/multiFile/KT11952/Foo.java b/j2k/testData/multiFile/KT11952/Foo.java new file mode 100644 index 00000000000..c04acb0b640 --- /dev/null +++ b/j2k/testData/multiFile/KT11952/Foo.java @@ -0,0 +1,7 @@ +import test.Bar; + +public class Foo { + public static void foo() { + Object o = Bar.SET; + } +} \ No newline at end of file diff --git a/j2k/testData/multiFile/KT11952/Foo.kt b/j2k/testData/multiFile/KT11952/Foo.kt new file mode 100644 index 00000000000..5583cebf975 --- /dev/null +++ b/j2k/testData/multiFile/KT11952/Foo.kt @@ -0,0 +1,7 @@ +import test.Bar + +object Foo { + fun foo() { + val o = Bar.SET + } +} diff --git a/j2k/testData/multiFile/KT11952/external/Bar.java b/j2k/testData/multiFile/KT11952/external/Bar.java new file mode 100644 index 00000000000..e052375a01b --- /dev/null +++ b/j2k/testData/multiFile/KT11952/external/Bar.java @@ -0,0 +1,8 @@ +package test; + +import java.util.HashSet; +import java.util.Set; + +public interface Bar { + Set SET = new HashSet() { }; +} \ No newline at end of file diff --git a/j2k/testData/multiFile/KT11952/external/Bar.java.expected b/j2k/testData/multiFile/KT11952/external/Bar.java.expected new file mode 100644 index 00000000000..981b983d771 --- /dev/null +++ b/j2k/testData/multiFile/KT11952/external/Bar.java.expected @@ -0,0 +1,8 @@ +package test; + +import java.util.HashSet; +import java.util.Set; + +public interface Bar { + Set SET = new HashSet() { }; +} diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterMultiFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterMultiFileTestGenerated.java index 1f8b77168bf..ed4c7e776b5 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterMultiFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterMultiFileTestGenerated.java @@ -47,6 +47,12 @@ public class JavaToKotlinConverterMultiFileTestGenerated extends AbstractJavaToK doTest(fileName); } + @TestMetadata("KT11952") + public void testKT11952() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/multiFile/KT11952/"); + doTest(fileName); + } + @TestMetadata("ProtectedVisibility") public void testProtectedVisibility() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/multiFile/ProtectedVisibility/");