import: ensure imported classes are not lost after on demand folding (IDEA-132190)

This commit is contained in:
Anna Kozlova
2014-11-04 17:44:36 +01:00
parent 5ec5fe4885
commit 3975e10ec8
2 changed files with 59 additions and 3 deletions
@@ -362,7 +362,11 @@ public class ImportHelper{
* Adds import if it is needed.
* @return false when the FQ-name have to be used in code (e.g. when conflicting imports already exist)
*/
public boolean addImport(@NotNull PsiJavaFile file, @NotNull PsiClass refClass){
public boolean addImport(@NotNull PsiJavaFile file, @NotNull PsiClass refClass) {
return addImport(file, refClass, false);
}
private boolean addImport(@NotNull PsiJavaFile file, @NotNull PsiClass refClass, boolean forceReimport){
final JavaPsiFacade facade = JavaPsiFacade.getInstance(file.getProject());
PsiElementFactory factory = facade.getElementFactory();
PsiResolveHelper helper = facade.getResolveHelper();
@@ -377,7 +381,7 @@ public class ImportHelper{
String shortName = PsiNameHelper.getShortClassName(className);
PsiClass conflictSingleRef = findSingleImportByShortName(file, shortName);
if (conflictSingleRef != null){
if (conflictSingleRef != null && !forceReimport){
return className.equals(conflictSingleRef.getQualifiedName());
}
@@ -449,7 +453,7 @@ public class ImportHelper{
for (PsiClass aClass : classesToReimport) {
if (aClass != null) {
addImport(file, aClass);
addImport(file, aClass, true);
}
}
}
@@ -115,6 +115,58 @@ public class Foo extends goo.Super {
'''
}
public void testImportFoldingWithConflicts() {
myFixture.addClass 'package p1; public class B {}'
myFixture.addClass 'package p1; public class A1 {}'
myFixture.addClass 'package p1; public class A2 {}'
myFixture.addClass 'package p1; public class A3 {}'
myFixture.addClass 'package p1; public class A4 {}'
myFixture.addClass 'package p1; public class A5 {}'
myFixture.addClass 'package p2; public class B {}'
myFixture.configureByText 'C.java', '''package p2;
import p1.A1;
import p1.A2;
import p1.A3;
import p1.A4;
import p1.B;
class C {
A1 a1;
A2 a2;
A3 a3;
A4 a4;
A<caret>5 a5;
B b;
}
'''
importClass()
myFixture.checkResult '''package p2;
import p1.*;
import p1.B;
class C {
A1 a1;
A2 a2;
A3 a3;
A4 a4;
A5 a5;
B b;
}
'''
}
public void testAnnotatedImport() {
myFixture.configureByText 'a.java', '''
import java.lang.annotation.*;