mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-inspections] Detect new object from variable inside the loop
GitOrigin-RevId: b9f8537d8cea84fee3a008ec678d09e089205d52
This commit is contained in:
committed by
intellij-monorepo-bot
parent
03b48aad2d
commit
dbab8896c5
+4
-4
@@ -9,7 +9,6 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.controlFlow.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.siyeh.InspectionGadgetsBundle;
|
||||
import com.siyeh.ig.BaseInspection;
|
||||
import com.siyeh.ig.BaseInspectionVisitor;
|
||||
@@ -21,8 +20,8 @@ import com.siyeh.ig.psiutils.VariableAccessUtils;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.intellij.util.ObjectUtils.tryCast;
|
||||
|
||||
@@ -99,8 +98,9 @@ public class NewObjectEqualityInspection extends BaseInspection {
|
||||
catch (AnalysisCanceledException e) {
|
||||
return expression;
|
||||
}
|
||||
int start = flow.getEndOffset(initializer) + 1;
|
||||
if (ControlFlowUtils.isVariableReferencedBeforeStatementEntry(flow, start, expression, variable, Collections.emptySet())) {
|
||||
int initializerEnd = flow.getEndOffset(initializer);
|
||||
int start = initializerEnd + 1;
|
||||
if (ControlFlowUtils.isVariableReferencedBeforeStatementEntry(flow, start, expression, variable, Set.of(initializerEnd))) {
|
||||
return expression;
|
||||
}
|
||||
return initializer;
|
||||
|
||||
+1
-1
@@ -880,7 +880,7 @@ public final class ControlFlowUtils {
|
||||
if (to == statementStart && (from < statementStart || from >= statementEnd)) {
|
||||
return true;
|
||||
}
|
||||
if (!referenced.get(to)) {
|
||||
if (!referenced.get(to) && !excluded.contains(to)) {
|
||||
referenced.set(to);
|
||||
changed = true;
|
||||
}
|
||||
|
||||
+11
@@ -4,6 +4,17 @@ import java.util.*;
|
||||
|
||||
public class ControlFlow
|
||||
{
|
||||
void nonLeak(Object obj) {
|
||||
while (true) {
|
||||
Object obj2 = new Object();
|
||||
if (obj == <warning descr="New object is compared using '=='">obj2</warning>) {
|
||||
System.out.println("equal");
|
||||
} else {
|
||||
if (Math.random() > 0.5) return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void test() {
|
||||
while (true) {
|
||||
Object obj = new Object();
|
||||
|
||||
Reference in New Issue
Block a user