diff --git a/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java b/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java index 864c9ab4d06..62341585e1e 100644 --- a/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java +++ b/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java @@ -224,29 +224,31 @@ public class JetImportOptimizer implements ImportOptimizer { return new FqName(qualifiedName); } } + + if (element instanceof PsiField) { + PsiField field = (PsiField) element; + + FqName classFQN = getFqNameOfContainingClassForPsiMember(field); + if (classFQN == null) { + return null; + } + + return combineClassFqNameWithMemberName(classFQN, field.getName()); + } // TODO: Still problem with kotlin global properties imported from class files if (element instanceof PsiMethod) { PsiMethod method = (PsiMethod) element; - PsiClass containingClass = method.getContainingClass(); - - if (containingClass != null) { - String classFQNStr = containingClass.getQualifiedName(); - if (classFQNStr != null) { - if (method.isConstructor()) { - return new FqName(classFQNStr); - } - - FqName classFQN = new FqName(classFQNStr); - if (classFQN.shortName().getName().equals(JvmAbi.PACKAGE_CLASS)) { - return QualifiedNamesUtil.combine(classFQN.parent(), Name.identifier(method.getName())); - } - else { - return QualifiedNamesUtil.combine(classFQN, Name.identifier(method.getName())); - } - } + FqName classFQN = getFqNameOfContainingClassForPsiMember(method); + if (classFQN == null) { + return null; } + if (method.isConstructor()) { + return classFQN; + } + + return combineClassFqNameWithMemberName(classFQN, method.getName()); } if (element instanceof PsiPackage) { @@ -256,6 +258,31 @@ public class JetImportOptimizer implements ImportOptimizer { return null; } + @Nullable + private static FqName combineClassFqNameWithMemberName(FqName classFQN, String memberName) { + if (memberName == null) { + return null; + } + if (classFQN.shortName().getName().equals(JvmAbi.PACKAGE_CLASS)) { + return QualifiedNamesUtil.combine(classFQN.parent(), Name.identifier(memberName)); + } + else { + return QualifiedNamesUtil.combine(classFQN, Name.identifier(memberName)); + } + } + + @Nullable + private static FqName getFqNameOfContainingClassForPsiMember(PsiMember member) { + PsiClass containingClass = member.getContainingClass(); + if (containingClass != null) { + String classFQNStr = containingClass.getQualifiedName(); + if (classFQNStr != null) { + return new FqName(classFQNStr); + } + } + return null; + } + private static PsiElement getWithPreviousWhitespaces(PsiElement element) { PsiElement result = element; diff --git a/idea/testData/editor/optimizeImports/multifile/JavaStaticField/JavaStaticField_after.kt b/idea/testData/editor/optimizeImports/multifile/JavaStaticField/JavaStaticField_after.kt new file mode 100644 index 00000000000..e26e7610a1b --- /dev/null +++ b/idea/testData/editor/optimizeImports/multifile/JavaStaticField/JavaStaticField_after.kt @@ -0,0 +1,5 @@ +import MyJavaClass.TEST + +fun main() { + TEST +} diff --git a/idea/testData/editor/optimizeImports/multifile/JavaStaticField/MyJavaClass.java b/idea/testData/editor/optimizeImports/multifile/JavaStaticField/MyJavaClass.java new file mode 100644 index 00000000000..3662b9546a5 --- /dev/null +++ b/idea/testData/editor/optimizeImports/multifile/JavaStaticField/MyJavaClass.java @@ -0,0 +1,3 @@ +public class MyJavaClass { + public static String TEST = "test"; +} diff --git a/idea/testData/editor/optimizeImports/multifile/JavaStaticField/main.kt b/idea/testData/editor/optimizeImports/multifile/JavaStaticField/main.kt new file mode 100644 index 00000000000..7e051f9f6ff --- /dev/null +++ b/idea/testData/editor/optimizeImports/multifile/JavaStaticField/main.kt @@ -0,0 +1,6 @@ +import MyJavaClass +import MyJavaClass.TEST + +fun main() { + TEST +} diff --git a/idea/tests/org/jetbrains/jet/plugin/importOptimizer/OptimizeImportsMultiFileTest.java b/idea/tests/org/jetbrains/jet/plugin/importOptimizer/OptimizeImportsMultiFileTest.java index cd110350735..8131fa95ebe 100644 --- a/idea/tests/org/jetbrains/jet/plugin/importOptimizer/OptimizeImportsMultiFileTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/importOptimizer/OptimizeImportsMultiFileTest.java @@ -33,6 +33,10 @@ public class OptimizeImportsMultiFileTest extends CodeInsightTestCase { doTest(getTestName(false) + "/main.kt", getTestName(false) + "/kotlinClass.kt"); } + public void testJavaStaticField() throws Exception { + doTest(getTestName(false) + "/main.kt", getTestName(false) + "/MyJavaClass.java"); + } + public void doTest(String... fileNames) throws Exception { configureByFiles(null, fileNames); invokeFormatFile();