mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
qualify with all containing classes not just the first one
This commit is contained in:
+17
-5
@@ -23,6 +23,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.siyeh.InspectionGadgetsBundle;
|
||||
import com.siyeh.ig.InspectionGadgetsFix;
|
||||
import com.siyeh.ig.psiutils.ClassUtils;
|
||||
import com.siyeh.ig.psiutils.HighlightUtils;
|
||||
import com.siyeh.ig.psiutils.ImportUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -68,8 +69,8 @@ public class UnqualifiedInnerClassAccessInspection extends UnqualifiedInnerClass
|
||||
if (!(target instanceof PsiClass)) {
|
||||
return;
|
||||
}
|
||||
final PsiClass aClass = (PsiClass)target;
|
||||
final PsiClass containingClass = aClass.getContainingClass();
|
||||
final PsiClass innerClass = (PsiClass)target;
|
||||
final PsiClass containingClass = innerClass.getContainingClass();
|
||||
if (containingClass == null) {
|
||||
return;
|
||||
}
|
||||
@@ -82,7 +83,7 @@ public class UnqualifiedInnerClassAccessInspection extends UnqualifiedInnerClass
|
||||
return;
|
||||
}
|
||||
final PsiJavaFile javaFile = (PsiJavaFile)containingFile;
|
||||
final String innerClassName = aClass.getQualifiedName();
|
||||
final String innerClassName = innerClass.getQualifiedName();
|
||||
if (innerClassName == null) {
|
||||
return;
|
||||
}
|
||||
@@ -132,7 +133,8 @@ public class UnqualifiedInnerClassAccessInspection extends UnqualifiedInnerClass
|
||||
if (referenceImportStatement != null) {
|
||||
referenceImportStatement.delete();
|
||||
}
|
||||
ImportUtils.addImportIfNeeded(containingClass, referenceElement);
|
||||
final PsiClass outerClass = ClassUtils.getOutermostContainingClass(containingClass);
|
||||
ImportUtils.addImportIfNeeded(outerClass, referenceElement);
|
||||
final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project);
|
||||
final Document document = documentManager.getDocument(containingFile);
|
||||
if (document == null) {
|
||||
@@ -158,7 +160,7 @@ public class UnqualifiedInnerClassAccessInspection extends UnqualifiedInnerClass
|
||||
}
|
||||
//noinspection SuspiciousMethodCalls
|
||||
if (references.contains(element)) {
|
||||
final String shortClassName = aClass.getName();
|
||||
final String shortClassName = getShortClassName(aClass, new StringBuilder()).toString();
|
||||
if (isReferenceToTargetClass(shortClassName, aClass, element)) {
|
||||
out.append(shortClassName);
|
||||
}
|
||||
@@ -178,6 +180,16 @@ public class UnqualifiedInnerClassAccessInspection extends UnqualifiedInnerClass
|
||||
return out;
|
||||
}
|
||||
|
||||
private static StringBuilder getShortClassName(@NotNull PsiClass aClass, @NotNull StringBuilder builder) {
|
||||
final PsiClass containingClass = aClass.getContainingClass();
|
||||
if (containingClass != null) {
|
||||
getShortClassName(containingClass, builder);
|
||||
builder.append('.');
|
||||
}
|
||||
builder.append(aClass.getName());
|
||||
return builder;
|
||||
}
|
||||
|
||||
private static boolean isReferenceToTargetClass(String referenceText, PsiClass targetClass, PsiElement context) {
|
||||
final PsiManager manager = targetClass.getManager();
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject());
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package unqualified_inner_class_access;
|
||||
|
||||
class Deep {
|
||||
public static class One {
|
||||
public static class Two {
|
||||
public static class Three {}
|
||||
}
|
||||
}
|
||||
}
|
||||
class User {
|
||||
public static void main(String[] args) {
|
||||
new Deep.One.Two.Three();
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package unqualified_inner_class_access;
|
||||
|
||||
import unqualified_inner_class_access.Deep.One.Two.Three;
|
||||
|
||||
class Deep {
|
||||
public static class One {
|
||||
public static class Two {
|
||||
public static class Three {}
|
||||
}
|
||||
}
|
||||
}
|
||||
class User {
|
||||
public static void main(String[] args) {
|
||||
new <caret>Three();
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.siyeh.ig.fixes.style;
|
||||
|
||||
import com.siyeh.InspectionGadgetsBundle;
|
||||
import com.siyeh.ig.IGQuickFixesTestCase;
|
||||
import com.siyeh.ig.style.UnqualifiedInnerClassAccessInspection;
|
||||
|
||||
/**
|
||||
* @author Bas Leijdekkers
|
||||
*/
|
||||
public class UnqualifiedInnerClassAccessFixTest extends IGQuickFixesTestCase {
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
myFixture.enableInspections(new UnqualifiedInnerClassAccessInspection());
|
||||
myRelativePath = "style/unqualified_inner_class_access";
|
||||
myDefaultHint = InspectionGadgetsBundle.message("unqualified.inner.class.access.quickfix");
|
||||
}
|
||||
|
||||
public void testDeep() { doTest(); }
|
||||
}
|
||||
Reference in New Issue
Block a user