IDEA-88406 False positive 'constant conditions & exceptions'

This commit is contained in:
peter
2012-07-09 15:04:37 +02:00
parent b8d11bfc4f
commit d896318f45
3 changed files with 49 additions and 10 deletions
@@ -257,21 +257,15 @@ class ControlFlowAnalyzer extends JavaElementVisitor {
@Override public void visitCodeBlock(PsiCodeBlock block) {
startElement(block);
PsiStatement[] statements = block.getStatements();
for (PsiStatement statement : statements) {
statement.accept(this);
}
for (PsiStatement statement : statements) {
for (PsiStatement statement : block.getStatements()) {
if (statement instanceof PsiDeclarationStatement) {
PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement)statement;
PsiElement[] declarations = declarationStatement.getDeclaredElements();
for (PsiElement declaration : declarations) {
for (PsiElement declaration : ((PsiDeclarationStatement)statement).getDeclaredElements()) {
if (declaration instanceof PsiVariable) {
myCurrentFlow.removeVariable((PsiVariable)declaration);
}
}
}
statement.accept(this);
}
finishElement(block);
@@ -581,6 +575,7 @@ class ControlFlowAnalyzer extends JavaElementVisitor {
if (enumVals != null) {
if (caseValue instanceof PsiReferenceExpression) {
//noinspection SuspiciousMethodCalls
enumVals.remove(((PsiReferenceExpression)caseValue).resolve());
}
}
@@ -929,7 +924,7 @@ class ControlFlowAnalyzer extends JavaElementVisitor {
PsiExpression lExpr = operands[0];
lExpr.accept(this);
PsiType lType = lExpr.getType();
PsiExpression rExpr = operands[1];
PsiExpression rExpr;
for (int i = 1; i < operands.length; i++) {
rExpr = operands[i];
@@ -0,0 +1,43 @@
/*
* Copyright 2000-2012 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.
*/
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.Map;
public class Main {
public static String escapeAndUnescapeSymbols(String s, StringBuilder builder) {
boolean escaped = false;
for (int i = 0; i < s.length(); i++) {
final char ch = s.charAt(i);
if (escaped) {
if (ch=='n') builder.append('\n');
if (<warning descr="Condition 'escaped' is always 'true'">escaped</warning>) break;
escaped = false;
continue;
}
if (ch == '\\') {
escaped = true;
continue;
}
builder.append(ch);
}
return builder.toString();
}
}
@@ -68,5 +68,6 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas
public void testBoxing128() throws Throwable { doTest(); }
public void testFinalFieldsInitializedByAnnotatedParameters() throws Throwable { doTest(); }
public void testMultiCatch() throws Throwable { doTest(); }
public void testContinueFlushesLoopVariable() throws Throwable { doTest(); }
}