summaryrefslogtreecommitdiff
path: root/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SwitchStatementWithConfusingDeclarationInspection.java
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2013-05-31 07:45:51 -0700
committerTor Norbye <tnorbye@google.com>2013-05-31 07:45:51 -0700
commitec3fb1e06285c0467a7a20360ca80453bc7635d4 (patch)
tree2402cdec34611f34b8385ff45387d6734bf6f994 /plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SwitchStatementWithConfusingDeclarationInspection.java
parenta6eac331b3d9f0d4168b12356ea256c83f4e9c05 (diff)
downloadidea-ec3fb1e06285c0467a7a20360ca80453bc7635d4.tar.gz
Snapshot 568f05589922685b8c8f9a2f2f465043b8128542 from master branch of git://git.jetbrains.org/idea/community.git
Change-Id: I47fe8cb5d8a3c9876cd4c313dca1a8cc531288ec
Diffstat (limited to 'plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SwitchStatementWithConfusingDeclarationInspection.java')
-rw-r--r--plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SwitchStatementWithConfusingDeclarationInspection.java106
1 files changed, 0 insertions, 106 deletions
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SwitchStatementWithConfusingDeclarationInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SwitchStatementWithConfusingDeclarationInspection.java
deleted file mode 100644
index 98669f9bb982..000000000000
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/SwitchStatementWithConfusingDeclarationInspection.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers
- *
- * 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.
- */
-package com.siyeh.ig.controlflow;
-
-import com.intellij.psi.*;
-import com.siyeh.InspectionGadgetsBundle;
-import com.siyeh.ig.BaseInspection;
-import com.siyeh.ig.BaseInspectionVisitor;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public class SwitchStatementWithConfusingDeclarationInspection extends BaseInspection {
-
- @NotNull
- public String getID() {
- return "LocalVariableUsedAndDeclaredInDifferentSwitchBranches";
- }
-
- @NotNull
- public String getDisplayName() {
- return InspectionGadgetsBundle.message("switch.statement.with.confusing.declaration.display.name");
- }
-
- @NotNull
- protected String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message("switch.statement.with.confusing.declaration.problem.descriptor");
- }
-
- public BaseInspectionVisitor buildVisitor() {
- return new SwitchStatementWithConfusingDeclarationVisitor();
- }
-
- private static class SwitchStatementWithConfusingDeclarationVisitor extends BaseInspectionVisitor {
-
- @Override
- public void visitSwitchStatement(@NotNull PsiSwitchStatement statement) {
- final PsiCodeBlock body = statement.getBody();
- if (body == null) {
- return;
- }
- final Set<PsiLocalVariable> variablesInPreviousBranches = new HashSet<PsiLocalVariable>(5);
- final Set<PsiLocalVariable> variablesInCurrentBranch = new HashSet<PsiLocalVariable>(5);
- final PsiStatement[] statements = body.getStatements();
- final LocalVariableAccessVisitor visitor = new LocalVariableAccessVisitor(variablesInPreviousBranches);
- for (final PsiStatement child : statements) {
- if (child instanceof PsiDeclarationStatement) {
- final PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement)child;
- final PsiElement[] declaredElements = declarationStatement.getDeclaredElements();
- for (final PsiElement declaredElement : declaredElements) {
- if (declaredElement instanceof PsiLocalVariable) {
- final PsiLocalVariable localVariable = (PsiLocalVariable)declaredElement;
- variablesInCurrentBranch.add(localVariable);
- }
- }
- }
- else if (child instanceof PsiBreakStatement) {
- variablesInPreviousBranches.addAll(variablesInCurrentBranch);
- variablesInCurrentBranch.clear();
- }
- child.accept(visitor);
- }
- }
-
- class LocalVariableAccessVisitor extends JavaRecursiveElementVisitor {
-
- private final Set<PsiLocalVariable> myVariablesInPreviousBranches;
-
- public LocalVariableAccessVisitor(Set<PsiLocalVariable> variablesInPreviousBranches) {
- myVariablesInPreviousBranches = variablesInPreviousBranches;
- }
-
- @Override
- public void visitReferenceExpression(@NotNull PsiReferenceExpression referenceExpression) {
- super.visitReferenceExpression(referenceExpression);
- final PsiExpression qualifier = referenceExpression.getQualifierExpression();
- if (qualifier != null) {
- return;
- }
- final PsiElement element = referenceExpression.resolve();
- if (!(element instanceof PsiLocalVariable)) {
- return;
- }
- final PsiLocalVariable accessedVariable = (PsiLocalVariable)element;
- if (myVariablesInPreviousBranches.contains(accessedVariable)) {
- myVariablesInPreviousBranches.remove(accessedVariable);
- registerVariableError(accessedVariable);
- }
- }
- }
- }
-} \ No newline at end of file