hide add import fix if qualified name of imported class is not a valid qName (IDEA-137296)

(cherry picked from commit bfae9cef8ff0d4fd773d6ee66f952b324d5e01ec)
This commit is contained in:
Anna Kozlova
2015-03-11 20:25:55 +01:00
parent b36d3227cd
commit b73f7f9c7a
2 changed files with 18 additions and 2 deletions
@@ -119,7 +119,8 @@ public abstract class ImportClassFixBase<T extends PsiElement, R extends PsiRefe
}
boolean referenceHasTypeParameters = hasTypeParameters(myRef);
PsiClass[] classes = PsiShortNamesCache.getInstance(myElement.getProject()).getClassesByName(name, scope);
final Project project = myElement.getProject();
PsiClass[] classes = PsiShortNamesCache.getInstance(project).getClassesByName(name, scope);
if (classes.length == 0) return Collections.emptyList();
List<PsiClass> classList = new ArrayList<PsiClass>(classes.length);
boolean isAnnotationReference = myElement.getParent() instanceof PsiAnnotation;
@@ -130,7 +131,7 @@ public abstract class ImportClassFixBase<T extends PsiElement, R extends PsiRefe
if (referenceHasTypeParameters && !aClass.hasTypeParameters()) continue;
String qName = aClass.getQualifiedName();
if (qName != null) { //filter local classes
if (qName.indexOf('.') == -1) continue; //do not show classes from default package)
if (qName.indexOf('.') == -1 || !PsiNameHelper.getInstance(project).isQualifiedName(qName)) continue; //do not show classes from default or invalid package
if (qName.endsWith(name) && (file == null || ImportFilter.shouldImport(file, qName))) {
if (isAccessible(aClass, myElement)) {
classList.add(aClass);
@@ -278,6 +278,21 @@ class Test {
assert !myFixture.filterAvailableIntentions("Import class")
}
public void "test don't import class if qualified name is not valid"() {
myFixture.addClass('''
package a..p;
public class MMM {}
''')
myFixture.configureByText 'a.java', '''
class Test {
{
MM<caret>M m;
}
}
'''
assert !myFixture.filterAvailableIntentions("Import class")
}
public void "test don't import class in assignment"() {
myFixture.configureByText 'a.java', '''
class Test {