mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IG: introduce convenience methods and cleanup
This commit is contained in:
@@ -59,6 +59,10 @@ public class UnusedSymbolUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isImplicitRead(@NotNull PsiVariable variable) {
|
||||
return isImplicitRead(variable.getProject(), variable, null);
|
||||
}
|
||||
|
||||
public static boolean isImplicitRead(@NotNull Project project, @NotNull PsiVariable element, @Nullable ProgressIndicator progress) {
|
||||
for(ImplicitUsageProvider provider: Extensions.getExtensions(ImplicitUsageProvider.EP_NAME)) {
|
||||
checkCanceled(progress);
|
||||
@@ -69,6 +73,10 @@ public class UnusedSymbolUtil {
|
||||
return isInjected(project, element);
|
||||
}
|
||||
|
||||
public static boolean isImplicitWrite(@NotNull PsiVariable variable) {
|
||||
return isImplicitWrite(variable.getProject(), variable, null);
|
||||
}
|
||||
|
||||
public static boolean isImplicitWrite(@NotNull Project project,
|
||||
@NotNull PsiVariable element,
|
||||
@Nullable ProgressIndicator progress) {
|
||||
|
||||
+1
-1
@@ -93,7 +93,7 @@ public class MismatchedArrayReadWriteInspection extends BaseInspection {
|
||||
final ArrayReadWriteVisitor visitor = new ArrayReadWriteVisitor(field, !isZeroSizeArrayExpression(field.getInitializer()));
|
||||
containingClass.accept(visitor);
|
||||
final boolean written = visitor.isWritten();
|
||||
if (!visitor.isReferenced() || written == visitor.isRead() || UnusedSymbolUtil.isImplicitWrite(field.getProject(), field, null)) {
|
||||
if (!visitor.isReferenced() || written == visitor.isRead() || UnusedSymbolUtil.isImplicitWrite(field)) {
|
||||
return;
|
||||
}
|
||||
registerFieldError(field, Boolean.valueOf(written));
|
||||
|
||||
+12
-12
@@ -39,8 +39,8 @@ import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class MismatchedCollectionQueryUpdateInspectionBase extends BaseInspection {
|
||||
private static final Set<String> QUERY_EXCLUDES = Collections.singleton("java.util.Collections");
|
||||
private static final Set<String> UPDATE_EXCLUDES = new HashSet<>(CollectionUtils.getAllCollectionNames());
|
||||
static final Set<String> QUERY_EXCLUDES = Collections.singleton("java.util.Collections");
|
||||
static final Set<String> UPDATE_EXCLUDES = new HashSet<>(CollectionUtils.getAllCollectionNames());
|
||||
static {
|
||||
UPDATE_EXCLUDES.add("java.util.Collections");
|
||||
}
|
||||
@@ -57,7 +57,7 @@ public class MismatchedCollectionQueryUpdateInspectionBase extends BaseInspectio
|
||||
@SuppressWarnings("PublicField")
|
||||
public final ExternalizableStringSet ignoredClasses = new ExternalizableStringSet();
|
||||
|
||||
private static boolean isEmptyCollectionInitializer(PsiExpression initializer) {
|
||||
static boolean isEmptyCollectionInitializer(PsiExpression initializer) {
|
||||
if (!(initializer instanceof PsiNewExpression)) {
|
||||
return ConstructionUtils.isEmptyCollectionInitializer(initializer);
|
||||
}
|
||||
@@ -82,12 +82,6 @@ public class MismatchedCollectionQueryUpdateInspectionBase extends BaseInspectio
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean collectionQueriedByAssignment(@NotNull PsiVariable variable, @NotNull PsiElement context) {
|
||||
final CollectionQueriedByAssignmentVisitor visitor = new CollectionQueriedByAssignmentVisitor(variable);
|
||||
context.accept(visitor);
|
||||
return visitor.mayBeQueried();
|
||||
}
|
||||
|
||||
@Pattern(VALID_ID_PATTERN)
|
||||
@Override
|
||||
@NotNull
|
||||
@@ -132,7 +126,7 @@ public class MismatchedCollectionQueryUpdateInspectionBase extends BaseInspectio
|
||||
private boolean mayBeQueried;
|
||||
@NotNull private final PsiVariable variable;
|
||||
|
||||
private CollectionQueriedByAssignmentVisitor(@NotNull PsiVariable variable) {
|
||||
CollectionQueriedByAssignmentVisitor(@NotNull PsiVariable variable) {
|
||||
this.variable = variable;
|
||||
}
|
||||
|
||||
@@ -187,7 +181,7 @@ public class MismatchedCollectionQueryUpdateInspectionBase extends BaseInspectio
|
||||
mayBeQueried = true;
|
||||
}
|
||||
|
||||
private boolean mayBeQueried() {
|
||||
boolean mayBeQueried() {
|
||||
return mayBeQueried;
|
||||
}
|
||||
}
|
||||
@@ -206,7 +200,7 @@ public class MismatchedCollectionQueryUpdateInspectionBase extends BaseInspectio
|
||||
}
|
||||
final boolean written = collectionContentsAreUpdated(field, containingClass);
|
||||
final boolean read = collectionContentsAreQueried(field, containingClass);
|
||||
if (read == written || UnusedSymbolUtil.isImplicitWrite(field.getProject(), field, null)) {
|
||||
if (read == written || UnusedSymbolUtil.isImplicitWrite(field)) {
|
||||
return;
|
||||
}
|
||||
registerFieldError(field, Boolean.valueOf(written));
|
||||
@@ -295,6 +289,12 @@ public class MismatchedCollectionQueryUpdateInspectionBase extends BaseInspectio
|
||||
context.accept(visitor);
|
||||
return visitor.isQueriedUpdated();
|
||||
}
|
||||
|
||||
private boolean collectionQueriedByAssignment(@NotNull PsiVariable variable, @NotNull PsiElement context) {
|
||||
final CollectionQueriedByAssignmentVisitor visitor = new CollectionQueriedByAssignmentVisitor(variable);
|
||||
context.accept(visitor);
|
||||
return visitor.mayBeQueried();
|
||||
}
|
||||
}
|
||||
|
||||
private static class QueryCallProcessor implements Processor<PsiCall> {
|
||||
|
||||
+48
-57
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2011-2014 Bas Leijdekkers
|
||||
* Copyright 2011-2017 Bas Leijdekkers
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -35,7 +35,7 @@ import java.util.Set;
|
||||
public class MismatchedStringBuilderQueryUpdateInspection extends BaseInspection {
|
||||
|
||||
@NonNls
|
||||
private static final Set<String> returnSelfNames =
|
||||
static final Set<String> returnSelfNames =
|
||||
ContainerUtil.set("append", "appendCodePoint", "delete", "deleteCharAt", "insert", "replace", "reverse");
|
||||
|
||||
@Pattern(VALID_ID_PATTERN)
|
||||
@@ -93,9 +93,9 @@ public class MismatchedStringBuilderQueryUpdateInspection extends BaseInspection
|
||||
if (!checkVariable(field, containingClass)) {
|
||||
return;
|
||||
}
|
||||
final boolean queried = stringBuilderContentsAreQueried(field, containingClass);
|
||||
final boolean updated = stringBuilderContentsAreUpdated(field, containingClass);
|
||||
if (queried == updated || UnusedSymbolUtil.isImplicitWrite(field.getProject(), field, null)) {
|
||||
final boolean queried = isStringBuilderQueried(field, containingClass);
|
||||
final boolean updated = isStringBuilderUpdated(field, containingClass);
|
||||
if (queried == updated || UnusedSymbolUtil.isImplicitWrite(field)) {
|
||||
return;
|
||||
}
|
||||
registerFieldError(field, Boolean.valueOf(updated), field.getType());
|
||||
@@ -108,8 +108,8 @@ public class MismatchedStringBuilderQueryUpdateInspection extends BaseInspection
|
||||
if (!checkVariable(variable, codeBlock)) {
|
||||
return;
|
||||
}
|
||||
final boolean queried = stringBuilderContentsAreQueried(variable, codeBlock);
|
||||
final boolean updated = stringBuilderContentsAreUpdated(variable, codeBlock);
|
||||
final boolean queried = isStringBuilderQueried(variable, codeBlock);
|
||||
final boolean updated = isStringBuilderUpdated(variable, codeBlock);
|
||||
if (queried == updated) {
|
||||
return;
|
||||
}
|
||||
@@ -141,26 +141,23 @@ public class MismatchedStringBuilderQueryUpdateInspection extends BaseInspection
|
||||
return !VariableAccessUtils.variableIsUsedInArrayInitializer(variable, context);
|
||||
}
|
||||
|
||||
private static boolean stringBuilderContentsAreUpdated(
|
||||
PsiVariable variable, PsiElement context) {
|
||||
private static boolean isStringBuilderUpdated(PsiVariable variable, PsiElement context) {
|
||||
final PsiExpression initializer = variable.getInitializer();
|
||||
if (initializer != null && !ConstructionUtils.isEmptyStringBuilderInitializer(initializer)) {
|
||||
return true;
|
||||
}
|
||||
return isStringBuilderUpdated(variable, context);
|
||||
final StringBuilderUpdateCalledVisitor visitor = new StringBuilderUpdateCalledVisitor(variable);
|
||||
context.accept(visitor);
|
||||
return visitor.isUpdated();
|
||||
}
|
||||
|
||||
private static boolean stringBuilderContentsAreQueried(PsiVariable variable, PsiElement context) {
|
||||
return isStringBuilderQueried(variable, context);
|
||||
private static boolean isStringBuilderQueried(PsiVariable variable, PsiElement context) {
|
||||
final StringBuilderQueryCalledVisitor visitor = new StringBuilderQueryCalledVisitor(variable);
|
||||
context.accept(visitor);
|
||||
return visitor.isQueried();
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isStringBuilderUpdated(PsiVariable variable, PsiElement context) {
|
||||
final StringBuilderUpdateCalledVisitor visitor = new StringBuilderUpdateCalledVisitor(variable);
|
||||
context.accept(visitor);
|
||||
return visitor.isUpdated();
|
||||
}
|
||||
|
||||
private static class StringBuilderUpdateCalledVisitor extends JavaRecursiveElementWalkingVisitor {
|
||||
@NonNls
|
||||
private static final Set<String> updateNames =
|
||||
@@ -201,12 +198,6 @@ public class MismatchedStringBuilderQueryUpdateInspection extends BaseInspection
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isStringBuilderQueried(PsiVariable variable, PsiElement context) {
|
||||
final StringBuilderQueryCalledVisitor visitor = new StringBuilderQueryCalledVisitor(variable);
|
||||
context.accept(visitor);
|
||||
return visitor.isQueried();
|
||||
}
|
||||
|
||||
private static class StringBuilderQueryCalledVisitor extends JavaRecursiveElementWalkingVisitor {
|
||||
@NonNls
|
||||
private static final Set<String> queryNames = ContainerUtil
|
||||
@@ -216,7 +207,7 @@ public class MismatchedStringBuilderQueryUpdateInspection extends BaseInspection
|
||||
private final PsiVariable variable;
|
||||
private boolean queried;
|
||||
|
||||
private StringBuilderQueryCalledVisitor(PsiVariable variable) {
|
||||
StringBuilderQueryCalledVisitor(PsiVariable variable) {
|
||||
this.variable = variable;
|
||||
}
|
||||
|
||||
@@ -286,44 +277,44 @@ public class MismatchedStringBuilderQueryUpdateInspection extends BaseInspection
|
||||
return !"getChars".equals(methodExpression.getReferenceName()) &&
|
||||
ExpressionUtils.isReferenceTo(methodExpression.getQualifierExpression(), variable);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isVariableValueUsed(PsiExpression expression) {
|
||||
final PsiElement parent = expression.getParent();
|
||||
if (parent instanceof PsiParenthesizedExpression) {
|
||||
final PsiParenthesizedExpression parenthesizedExpression = (PsiParenthesizedExpression)parent;
|
||||
return isVariableValueUsed(parenthesizedExpression);
|
||||
}
|
||||
if (parent instanceof PsiTypeCastExpression) {
|
||||
final PsiTypeCastExpression typeCastExpression = (PsiTypeCastExpression)parent;
|
||||
return isVariableValueUsed(typeCastExpression);
|
||||
}
|
||||
if (parent instanceof PsiReturnStatement) {
|
||||
return true;
|
||||
}
|
||||
if (parent instanceof PsiExpressionList) {
|
||||
final PsiElement grandParent = parent.getParent();
|
||||
if (grandParent instanceof PsiMethodCallExpression) {
|
||||
private static boolean isVariableValueUsed(PsiExpression expression) {
|
||||
final PsiElement parent = expression.getParent();
|
||||
if (parent instanceof PsiParenthesizedExpression) {
|
||||
final PsiParenthesizedExpression parenthesizedExpression = (PsiParenthesizedExpression)parent;
|
||||
return isVariableValueUsed(parenthesizedExpression);
|
||||
}
|
||||
if (parent instanceof PsiTypeCastExpression) {
|
||||
final PsiTypeCastExpression typeCastExpression = (PsiTypeCastExpression)parent;
|
||||
return isVariableValueUsed(typeCastExpression);
|
||||
}
|
||||
if (parent instanceof PsiReturnStatement) {
|
||||
return true;
|
||||
}
|
||||
if (parent instanceof PsiExpressionList) {
|
||||
final PsiElement grandParent = parent.getParent();
|
||||
if (grandParent instanceof PsiMethodCallExpression) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (parent instanceof PsiArrayInitializerExpression) {
|
||||
return true;
|
||||
}
|
||||
else if (parent instanceof PsiAssignmentExpression) {
|
||||
final PsiAssignmentExpression assignmentExpression = (PsiAssignmentExpression)parent;
|
||||
final PsiExpression rhs = assignmentExpression.getRExpression();
|
||||
return expression.equals(rhs);
|
||||
}
|
||||
else if (parent instanceof PsiVariable) {
|
||||
final PsiVariable variable = (PsiVariable)parent;
|
||||
final PsiExpression initializer = variable.getInitializer();
|
||||
return expression.equals(initializer);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else if (parent instanceof PsiArrayInitializerExpression) {
|
||||
return true;
|
||||
}
|
||||
else if (parent instanceof PsiAssignmentExpression) {
|
||||
final PsiAssignmentExpression assignmentExpression = (PsiAssignmentExpression)parent;
|
||||
final PsiExpression rhs = assignmentExpression.getRExpression();
|
||||
return expression.equals(rhs);
|
||||
}
|
||||
else if (parent instanceof PsiVariable) {
|
||||
final PsiVariable variable = (PsiVariable)parent;
|
||||
final PsiExpression initializer = variable.getInitializer();
|
||||
return expression.equals(initializer);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean hasReferenceToVariable(PsiVariable variable, PsiElement element) {
|
||||
static boolean hasReferenceToVariable(PsiVariable variable, PsiElement element) {
|
||||
if (element instanceof PsiReferenceExpression) {
|
||||
final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)element;
|
||||
return referenceExpression.isReferenceTo(variable);
|
||||
|
||||
Reference in New Issue
Block a user