CharsetObjectCanBeUsedInspection: remove qualifier in static import

Fixes IDEA-193573 IDEA doesn't recornize static import on replacing by StandardCharsets
This commit is contained in:
Tagir Valeev
2018-06-09 16:20:46 +07:00
parent aee389ebae
commit cda259d255
5 changed files with 57 additions and 2 deletions
@@ -5,6 +5,7 @@ import com.intellij.codeInsight.ExceptionUtil;
import com.intellij.codeInsight.daemon.impl.quickfix.DeleteCatchFix;
import com.intellij.codeInsight.daemon.impl.quickfix.DeleteMultiCatchFix;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.util.PsiTreeUtil;
@@ -13,6 +14,7 @@ import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.ig.psiutils.CommentTracker;
import com.siyeh.ig.psiutils.ExpressionUtils;
import com.siyeh.ig.psiutils.ImportUtils;
import one.util.streamex.StreamEx;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.Nls;
@@ -230,8 +232,17 @@ public class CharsetObjectCanBeUsedInspection extends AbstractBaseJavaLocalInspe
PsiElement anchor = PsiTreeUtil.getParentOfType(expression, PsiCallExpression.class);
if (anchor == null) return;
CommentTracker ct = new CommentTracker();
JavaCodeStyleManager.getInstance(project)
.shortenClassReferences(ct.replaceAndRestoreComments(expression, "java.nio.charset." + myConstantName));
String replacement = "java.nio.charset." + myConstantName;
PsiReferenceExpression ref = (PsiReferenceExpression)ct.replaceAndRestoreComments(expression, replacement);
PsiField field = ObjectUtils.tryCast(ref.resolve(), PsiField.class);
PsiExpression qualifier = ref.getQualifierExpression();
if (field != null && qualifier != null && ImportUtils.isStaticallyImported(field, ref)) {
PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(project).getResolveHelper();
if (field.equals(resolveHelper.resolveAccessibleReferencedVariable(StringUtil.getShortName(myConstantName), ref))) {
qualifier.delete();
}
}
JavaCodeStyleManager.getInstance(project).shortenClassReferences(ref);
while (true) {
PsiTryStatement tryStatement =
PsiTreeUtil.getParentOfType(anchor, PsiTryStatement.class, true, PsiMember.class, PsiLambdaExpression.class);
@@ -0,0 +1,10 @@
// "Replace with 'StandardCharsets.UTF_8'" "true"
import static java.nio.charset.StandardCharsets.*;
class Test {
void test(byte[] bytes) throws Exception {
String string = new String(bytes, UTF_8);
System.out.println(string);
string.getBytes(UTF_8);
}
}
@@ -0,0 +1,13 @@
// "Replace with 'StandardCharsets.UTF_8'" "true"
import java.nio.charset.StandardCharsets;
import static java.nio.charset.StandardCharsets.*;
class Test {
void test(byte[] bytes) throws Exception {
int UTF_8 = 1;
String string = new String(bytes, StandardCharsets.UTF_8);
System.out.println(string);
string.getBytes(UTF_16);
}
}
@@ -0,0 +1,10 @@
// "Replace with 'StandardCharsets.UTF_8'" "true"
import static java.nio.charset.StandardCharsets.*;
class Test {
void test(byte[] bytes) throws Exception {
String string = new String(bytes, "UTF<caret>-8");
System.out.println(string);
string.getBytes(UTF_8);
}
}
@@ -0,0 +1,11 @@
// "Replace with 'StandardCharsets.UTF_8'" "true"
import static java.nio.charset.StandardCharsets.*;
class Test {
void test(byte[] bytes) throws Exception {
int UTF_8 = 1;
String string = new String(bytes, "UTF<caret>-8");
System.out.println(string);
string.getBytes(UTF_16);
}
}