mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
VariableAccessUtils#getVariableUsages
This commit is contained in:
+13
-4
@@ -26,10 +26,7 @@ import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public class VariableAccessUtils {
|
||||
|
||||
@@ -241,6 +238,18 @@ public class VariableAccessUtils {
|
||||
return ExpressionUtils.isReferenceTo(expression, variable);
|
||||
}
|
||||
|
||||
public static List<PsiReferenceExpression> getVariableReferences(@NotNull PsiVariable variable, @Nullable PsiElement context) {
|
||||
if (context == null) return Collections.emptyList();
|
||||
List<PsiReferenceExpression> result = new ArrayList<>();
|
||||
PsiTreeUtil.processElements(context, e -> {
|
||||
if (e instanceof PsiReferenceExpression && ((PsiReferenceExpression)e).isReferenceTo(variable)) {
|
||||
result.add((PsiReferenceExpression)e);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@Contract("_, null -> false")
|
||||
public static boolean variableIsUsed(@NotNull PsiVariable variable,
|
||||
@Nullable PsiElement context) {
|
||||
|
||||
+6
-11
@@ -12,6 +12,7 @@ import com.intellij.psi.util.RedundantCastUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.siyeh.ig.psiutils.ExpressionUtils;
|
||||
import com.siyeh.ig.psiutils.HighlightUtils;
|
||||
import com.siyeh.ig.psiutils.VariableAccessUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static com.intellij.util.ObjectUtils.tryCast;
|
||||
@@ -43,18 +44,12 @@ public class CastCanBeRemovedNarrowingVariableTypeInspection extends AbstractBas
|
||||
}
|
||||
PsiElement block = PsiUtil.getVariableCodeBlock(variable, null);
|
||||
if (block == null) return;
|
||||
boolean redundantCast = PsiTreeUtil.processElements(block, e -> {
|
||||
if (e instanceof PsiReferenceExpression) {
|
||||
PsiReferenceExpression reference = (PsiReferenceExpression)e;
|
||||
return !reference.isReferenceTo(variable) || isVariableTypeChangeSafeForReference(cast, castType, reference);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
if (redundantCast) {
|
||||
String message = InspectionsBundle
|
||||
.message("inspection.cast.can.be.removed.narrowing.variable.type.message", variable.getName(), castType.getPresentableText());
|
||||
holder.registerProblem(castTypeElement, message, new CastCanBeRemovedNarrowingVariableTypeFix(variable, castType, isOnTheFly));
|
||||
for (PsiReferenceExpression reference : VariableAccessUtils.getVariableReferences(variable, block)) {
|
||||
if (!isVariableTypeChangeSafeForReference(cast, castType, reference)) return;
|
||||
}
|
||||
String message = InspectionsBundle
|
||||
.message("inspection.cast.can.be.removed.narrowing.variable.type.message", variable.getName(), castType.getPresentableText());
|
||||
holder.registerProblem(castTypeElement, message, new CastCanBeRemovedNarrowingVariableTypeFix(variable, castType, isOnTheFly));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
+4
-7
@@ -16,6 +16,8 @@ import com.siyeh.ig.psiutils.*;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.intellij.util.ObjectUtils.tryCast;
|
||||
import static com.siyeh.ig.callMatcher.CallMatcher.*;
|
||||
|
||||
@@ -443,13 +445,8 @@ public class RedundantCollectionOperationInspection extends AbstractBaseJavaLoca
|
||||
return null;
|
||||
}
|
||||
PsiCodeBlock block = PsiTreeUtil.getParentOfType(localVariable, PsiCodeBlock.class);
|
||||
if (block != null && VariableAccessUtils.variableIsUsed(localVariable, block) &&
|
||||
PsiTreeUtil.processElements(block, element -> {
|
||||
if (!(element instanceof PsiReferenceExpression)) return true;
|
||||
PsiReferenceExpression ref = (PsiReferenceExpression)element;
|
||||
if (!(ref.isReferenceTo(localVariable))) return true;
|
||||
return isAllowedContext(ref);
|
||||
})) {
|
||||
List<PsiReferenceExpression> references = VariableAccessUtils.getVariableReferences(localVariable, block);
|
||||
if (!references.isEmpty() && references.stream().allMatch(RedundantAsListForIterationHandler::isAllowedContext)) {
|
||||
return new RedundantAsListForIterationHandler();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user