diff --git a/lib/winp.dll b/lib/winp.dll deleted file mode 100644 index f5e4ca8f8f6c..000000000000 Binary files a/lib/winp.dll and /dev/null differ diff --git a/plugins/groovy/resources/inspectionDescriptions/GroovyUnusedSymbol.html b/plugins/groovy/resources/inspectionDescriptions/GroovyUnusedSymbol.html deleted file mode 100644 index 243d806709fd..000000000000 --- a/plugins/groovy/resources/inspectionDescriptions/GroovyUnusedSymbol.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Detects local variables and private members that are declared but not used, never accessed for reading or not initialized in a class. - - \ No newline at end of file diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index c04542deb5f8..6226695b0628 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -407,9 +407,6 @@ implementationClass="org.jetbrains.plugins.groovy.codeInspection.secondUnsafeCall.SecondUnsafeCallInspection"/> - > engine = new DFAEngine>(flow, dfaInstance, lattice); - final List> dfaResult = engine.performDFAWithTimeout(); - if (dfaResult == null) { - return; - } - - final TIntHashSet unusedDefs = new TIntHashSet(); - for (Instruction instruction : flow) { - if (instruction instanceof ReadWriteVariableInstruction && ((ReadWriteVariableInstruction) instruction).isWrite()) { - unusedDefs.add(instruction.num()); - } - } - - for (int i = 0; i < dfaResult.size(); i++) { - final Instruction instruction = flow[i]; - if (instruction instanceof ReadWriteVariableInstruction) { - final ReadWriteVariableInstruction varInst = (ReadWriteVariableInstruction) instruction; - if (!varInst.isWrite()) { - final String varName = varInst.getVariableName(); - TIntObjectHashMap e = dfaResult.get(i); - e.forEachValue(new TObjectProcedure() { - public boolean execute(TIntHashSet reaching) { - reaching.forEach(new TIntProcedure() { - public boolean execute(int defNum) { - final String defName = ((ReadWriteVariableInstruction) flow[defNum]).getVariableName(); - if (varName.equals(defName)) { - unusedDefs.remove(defNum); - } - return true; - } - }); - return true; - } - }); - } - } - } - - unusedDefs.forEach(new TIntProcedure() { - public boolean execute(int num) { - final ReadWriteVariableInstruction instruction = (ReadWriteVariableInstruction)flow[num]; - final PsiElement element = instruction.getElement(); - if (element == null) return true; - if (isLocalAssignment(element) && isUsedInTopLevelFlowOnly(element) && !isIncOrDec(element)) { - PsiElement toHighlight = getHighlightElement(element); - problemsHolder.registerProblem(toHighlight, GroovyInspectionBundle.message("unused.assignment.tooltip"), - ProblemHighlightType.LIKE_UNUSED_SYMBOL); - } - return true; - } - }); - } - - private static PsiElement getHighlightElement(PsiElement element) { - PsiElement toHighlight = null; - if (element instanceof GrReferenceExpression) { - PsiElement parent = element.getParent(); - if (parent instanceof GrAssignmentExpression) { - toHighlight = ((GrAssignmentExpression)parent).getLValue(); - } - if (parent instanceof GrUnaryExpression && ((GrUnaryExpression)parent).isPostfix()) { - toHighlight = parent; - } - } - else if (element instanceof GrVariable) { - toHighlight = ((GrVariable)element).getNameIdentifierGroovy(); - } - if (toHighlight == null) toHighlight = element; - return toHighlight; - } - - private static boolean isIncOrDec(PsiElement element) { - PsiElement parent = element.getParent(); - if (!(parent instanceof GrUnaryExpression)) return false; - - IElementType type = ((GrUnaryExpression)parent).getOperationTokenType(); - return type == GroovyTokenTypes.mINC || type == GroovyTokenTypes.mDEC; - } - - private static boolean isUsedInTopLevelFlowOnly(PsiElement element) { - GrVariable var = null; - if (element instanceof GrVariable) { - var = (GrVariable)element; - } - else if (element instanceof GrReferenceExpression) { - final PsiElement resolved = ((GrReferenceExpression)element).resolve(); - if (resolved instanceof GrVariable) var = (GrVariable)resolved; - } - - if (var != null) { - final GroovyPsiElement scope = ControlFlowUtils.findControlFlowOwner(var); - if (scope == null) { - PsiFile file = var.getContainingFile(); - LOG.error(file == null ? "no file??? var of type" + var.getClass().getCanonicalName() : DebugUtil.psiToString(file, true, false)); - } - - return ReferencesSearch.search(var, new LocalSearchScope(scope)).forEach(new Processor() { - public boolean process(PsiReference ref) { - return ControlFlowUtils.findControlFlowOwner(ref.getElement()) == scope; - } - }); - } - - return true; - } - - - private static boolean isLocalAssignment(PsiElement element) { - if (element instanceof GrVariable) { - return isLocalVariable((GrVariable)element, false); - } - else if (element instanceof GrReferenceExpression) { - final PsiElement resolved = ((GrReferenceExpression)element).resolve(); - return resolved instanceof GrVariable && isLocalVariable((GrVariable)resolved, true); - } - - return false; - } - - private static boolean isLocalVariable(GrVariable var, boolean parametersAllowed) { - return !(var instanceof GrField || var instanceof GrParameter && !parametersAllowed); - } - - public boolean isEnabledByDefault() { - return true; - } -} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/unusedDef/UnusedDefInspection.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/unusedDef/UnusedDefInspection.java index 4a49c578fe68..4bb6ad43dfae 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/unusedDef/UnusedDefInspection.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/unusedDef/UnusedDefInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2009 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. @@ -15,38 +15,49 @@ */ package org.jetbrains.plugins.groovy.codeInspection.unusedDef; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemHighlightType; -import com.intellij.openapi.application.AccessToken; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.project.Project; +import com.intellij.codeInspection.ProblemsHolder; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; +import com.intellij.psi.impl.DebugUtil; +import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.psi.tree.IElementType; import com.intellij.util.Processor; +import gnu.trove.TIntHashSet; +import gnu.trove.TIntObjectHashMap; +import gnu.trove.TIntProcedure; +import gnu.trove.TObjectProcedure; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.groovy.codeInspection.BaseInspection; -import org.jetbrains.plugins.groovy.codeInspection.BaseInspectionVisitor; import org.jetbrains.plugins.groovy.codeInspection.GroovyInspectionBundle; +import org.jetbrains.plugins.groovy.codeInspection.GroovyLocalInspectionBase; +import org.jetbrains.plugins.groovy.codeInspection.utils.ControlFlowUtils; +import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; +import org.jetbrains.plugins.groovy.lang.psi.GrControlFlowOwner; +import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrUnaryExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; -import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; -import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringUtil; +import org.jetbrains.plugins.groovy.lang.psi.controlFlow.Instruction; +import org.jetbrains.plugins.groovy.lang.psi.controlFlow.ReadWriteVariableInstruction; +import org.jetbrains.plugins.groovy.lang.psi.dataFlow.DFAEngine; +import org.jetbrains.plugins.groovy.lang.psi.dataFlow.reachingDefs.ReachingDefinitionsDfaInstance; +import org.jetbrains.plugins.groovy.lang.psi.dataFlow.reachingDefs.ReachingDefinitionsSemilattice; -import java.util.Collection; +import java.util.List; /** - * @author Max Medvedev + & @author ven */ -public class UnusedDefInspection extends BaseInspection { +public class UnusedDefInspection extends GroovyLocalInspectionBase { + private static final Logger LOG = Logger.getInstance("#org.jetbrains.plugins.groovy.codeInspection.unusedDef.UnusedDefInspection"); @Nls @NotNull @@ -57,116 +68,144 @@ public class UnusedDefInspection extends BaseInspection { @Nls @NotNull public String getDisplayName() { - return GroovyInspectionBundle.message("unused.symbol"); + return GroovyInspectionBundle.message("unused.assignment"); } @NonNls @NotNull public String getShortName() { - return "GroovyUnusedSymbol"; + return "GroovyUnusedAssignment"; } - @Override - protected BaseInspectionVisitor buildVisitor() { - return new BaseInspectionVisitor() { - @Override - public void visitVariable(GrVariable variable) { - super.visitVariable(variable); - if (variable instanceof GrParameter) { - PsiElement scope = ((GrParameter)variable).getDeclarationScope(); - if (scope instanceof GrMethod) { - if (((GrMethod)scope).getBlock() == null) return; - if (((GrMethod)scope).getHierarchicalMethodSignature().getSuperSignatures().size() > 0) { - return; - } - } - } + protected void check(final GrControlFlowOwner owner, final ProblemsHolder problemsHolder) { + final Instruction[] flow = owner.getControlFlow(); + final ReachingDefinitionsDfaInstance dfaInstance = new ReachingDefinitionsDfaInstance(flow); + final ReachingDefinitionsSemilattice lattice = new ReachingDefinitionsSemilattice(); + final DFAEngine> engine = new DFAEngine>(flow, dfaInstance, lattice); + final List> dfaResult = engine.performDFAWithTimeout(); + if (dfaResult == null) { + return; + } - if (!(variable instanceof GrField)) { - checkVar(variable); - } + final TIntHashSet unusedDefs = new TIntHashSet(); + for (Instruction instruction : flow) { + if (instruction instanceof ReadWriteVariableInstruction && ((ReadWriteVariableInstruction) instruction).isWrite()) { + unusedDefs.add(instruction.num()); } + } - private void checkVar(GrVariable var) { - AccessToken lock = ApplicationManager.getApplication().acquireReadActionLock(); - try { - boolean isNotAccessedForRead = ReferencesSearch.search(var).forEach(new Processor() { - @Override - public boolean process(PsiReference reference) { - PsiElement element = reference.getElement(); - return !(element instanceof GrExpression && PsiUtil.isAccessedForReading((GrExpression)element)); + for (int i = 0; i < dfaResult.size(); i++) { + final Instruction instruction = flow[i]; + if (instruction instanceof ReadWriteVariableInstruction) { + final ReadWriteVariableInstruction varInst = (ReadWriteVariableInstruction) instruction; + if (!varInst.isWrite()) { + final String varName = varInst.getVariableName(); + TIntObjectHashMap e = dfaResult.get(i); + e.forEachValue(new TObjectProcedure() { + public boolean execute(TIntHashSet reaching) { + reaching.forEach(new TIntProcedure() { + public boolean execute(int defNum) { + final String defName = ((ReadWriteVariableInstruction) flow[defNum]).getVariableName(); + if (varName.equals(defName)) { + unusedDefs.remove(defNum); + } + return true; + } + }); + return true; } }); - if (isNotAccessedForRead) { - registerError(var.getNameIdentifierGroovy(), GroovyInspectionBundle.message("unused.symbol"), - getFixes(var), - ProblemHighlightType.LIKE_UNUSED_SYMBOL); - } - } - finally { - lock.finish(); } } - }; + } + + unusedDefs.forEach(new TIntProcedure() { + public boolean execute(int num) { + final ReadWriteVariableInstruction instruction = (ReadWriteVariableInstruction)flow[num]; + final PsiElement element = instruction.getElement(); + if (element == null) return true; + if (isLocalAssignment(element) && isUsedInTopLevelFlowOnly(element) && !isIncOrDec(element)) { + PsiElement toHighlight = getHighlightElement(element); + problemsHolder.registerProblem(toHighlight, GroovyInspectionBundle.message("unused.assignment.tooltip"), + ProblemHighlightType.LIKE_UNUSED_SYMBOL); + } + return true; + } + }); } - private static LocalQuickFix[] getFixes(GrVariable var) { - if (GroovyRefactoringUtil.isLocalVariable(var)) { - return new LocalQuickFix[]{new RemoveVarFix(var.getName())}; + private static PsiElement getHighlightElement(PsiElement element) { + PsiElement toHighlight = null; + if (element instanceof GrReferenceExpression) { + PsiElement parent = element.getParent(); + if (parent instanceof GrAssignmentExpression) { + toHighlight = ((GrAssignmentExpression)parent).getLValue(); + } + if (parent instanceof GrUnaryExpression && ((GrUnaryExpression)parent).isPostfix()) { + toHighlight = parent; + } } - return LocalQuickFix.EMPTY_ARRAY; + else if (element instanceof GrVariable) { + toHighlight = ((GrVariable)element).getNameIdentifierGroovy(); + } + if (toHighlight == null) toHighlight = element; + return toHighlight; + } + + private static boolean isIncOrDec(PsiElement element) { + PsiElement parent = element.getParent(); + if (!(parent instanceof GrUnaryExpression)) return false; + + IElementType type = ((GrUnaryExpression)parent).getOperationTokenType(); + return type == GroovyTokenTypes.mINC || type == GroovyTokenTypes.mDEC; + } + + private static boolean isUsedInTopLevelFlowOnly(PsiElement element) { + GrVariable var = null; + if (element instanceof GrVariable) { + var = (GrVariable)element; + } + else if (element instanceof GrReferenceExpression) { + final PsiElement resolved = ((GrReferenceExpression)element).resolve(); + if (resolved instanceof GrVariable) var = (GrVariable)resolved; + } + + if (var != null) { + final GroovyPsiElement scope = ControlFlowUtils.findControlFlowOwner(var); + if (scope == null) { + PsiFile file = var.getContainingFile(); + LOG.error(file == null ? "no file??? var of type" + var.getClass().getCanonicalName() : DebugUtil.psiToString(file, true, false)); + } + + return ReferencesSearch.search(var, new LocalSearchScope(scope)).forEach(new Processor() { + public boolean process(PsiReference ref) { + return ControlFlowUtils.findControlFlowOwner(ref.getElement()) == scope; + } + }); + } + + return true; + } + + + private static boolean isLocalAssignment(PsiElement element) { + if (element instanceof GrVariable) { + return isLocalVariable((GrVariable)element, false); + } + else if (element instanceof GrReferenceExpression) { + final PsiElement resolved = ((GrReferenceExpression)element).resolve(); + return resolved instanceof GrVariable && isLocalVariable((GrVariable)resolved, true); + } + + return false; + } + + private static boolean isLocalVariable(GrVariable var, boolean parametersAllowed) { + return !(var instanceof GrField || var instanceof GrParameter && !parametersAllowed); } public boolean isEnabledByDefault() { return true; } - - private static class RemoveVarFix implements LocalQuickFix { - private String myName; - - public RemoveVarFix(String name) { - myName = name; - } - - @NotNull - @Override - public String getName() { - return GroovyInspectionBundle.message("remove.variable", myName); - } - - @NotNull - @Override - public String getFamilyName() { - return GroovyInspectionBundle.message("remove.unused.variable"); - } - - @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - PsiElement element = descriptor.getPsiElement(); - PsiElement parent = element.getParent(); - if (parent instanceof GrVariable) { - Collection all = ReferencesSearch.search(parent).findAll(); - - for (PsiReference reference : all) { - PsiElement e = reference.getElement(); - if (e instanceof GrReferenceExpression) { - PsiElement p = e.getParent(); - if (p instanceof GrAssignmentExpression) { - if (PsiUtil.isExpressionUsed(p)) { - ((GrAssignmentExpression)p).replaceWithExpression(((GrAssignmentExpression)p).getRValue(), true); - } - else { - p.delete(); - } - } - } - else { - e.delete(); - } - } - parent.delete(); - } - } - } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy index 2c4d05a1c101..7ae39e4605fa 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy @@ -115,8 +115,7 @@ class GroovyDebuggerTest extends GroovyCompilerTestCase { } public void testVariableInScript() { - myFixture.addFileToProject("Foo.groovy", """\ -def a = 2 + myFixture.addFileToProject("Foo.groovy", """def a = 2 a"""); addBreakpoint 'Foo.groovy', 1 runDebugger 'Foo', { @@ -242,7 +241,6 @@ new Runnable() { } } - private def addBreakpoint(String fileName, int line) { VirtualFile file = null edt { @@ -293,7 +291,7 @@ new Runnable() { semaphore.up() } }) - def finished = semaphore.waitFor(200000) + def finished = semaphore.waitFor(20000) assert finished : 'Too long debugger action' return result } @@ -311,7 +309,7 @@ new Runnable() { item.setContext(ctx) item.updateRepresentation(ctx, { semaphore.up() } as DescriptorLabelListener) } - assert semaphore.waitFor(200000): "too long evaluation: $item.label $item.evaluateException" + assert semaphore.waitFor(10000): "too long evaluation: $item.label $item.evaluateException" String result = managed { DebuggerUtils.getValueAsString(ctx, item.value) } assert result == expected diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy index cbe941166c3c..575ad2e4d3c1 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy @@ -43,7 +43,7 @@ import org.jetbrains.plugins.groovy.codeInspection.metrics.GroovyOverlyLongMetho import org.jetbrains.plugins.groovy.codeInspection.unassignedVariable.UnassignedVariableAccessInspection import org.jetbrains.plugins.groovy.codeInspection.untypedUnresolvedAccess.GroovyUnresolvedAccessInspection import org.jetbrains.plugins.groovy.codeInspection.untypedUnresolvedAccess.GroovyUntypedAccessInspection -import org.jetbrains.plugins.groovy.codeInspection.unusedDef.UnusedAssignmentInspection +import org.jetbrains.plugins.groovy.codeInspection.unusedDef.UnusedDefInspection import org.jetbrains.plugins.groovy.util.TestUtils import org.jetbrains.plugins.groovy.codeInspection.bugs.* import org.jetbrains.plugins.groovy.codeInspection.confusing.* @@ -186,10 +186,10 @@ public class GroovyHighlightingTest extends LightCodeInsightFixtureTestCase { public void testUnassigned3() throws Exception { doTest(new UnassignedVariableAccessInspection()); } public void testUnassignedTryFinally() throws Exception { doTest(new UnassignedVariableAccessInspection()); } - public void testUnusedVariable() throws Exception { doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); } - public void testDefinitionUsedInClosure() throws Exception { doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); } - public void testDefinitionUsedInClosure2() throws Exception { doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); } - public void testDefinitionUsedInSwitchCase() throws Exception { doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); } + public void testUnusedVariable() throws Exception { doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()); } + public void testDefinitionUsedInClosure() throws Exception { doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()); } + public void testDefinitionUsedInClosure2() throws Exception { doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()); } + public void testDefinitionUsedInSwitchCase() throws Exception { doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()); } public void testDuplicateInnerClass() throws Throwable{doTest();} public void testThisInStaticContext() throws Throwable {doTest();} @@ -246,8 +246,8 @@ class A { public void testByteArrayArgument() throws Exception {doTest(new GroovyAssignabilityCheckInspection());} public void testForLoopWithNestedEndlessLoop() throws Exception {doTest(new UnassignedVariableAccessInspection());} - public void testPrefixIncrementCfa() throws Exception {doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection());} - public void testIfIncrementElseReturn() throws Exception {doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); } + public void testPrefixIncrementCfa() throws Exception {doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection());} + public void testIfIncrementElseReturn() throws Exception {doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()); } public void testArrayLikeAccess() throws Exception {doTest();} @@ -313,7 +313,7 @@ class A { public void testBuiltInTypeInstantiation() {doTest();} - public void testSwitchControlFlow() {doTest(new UnusedAssignmentInspection(), new GroovyResultOfAssignmentUsedInspection(), new GrUnusedIncDecInspection());} + public void testSwitchControlFlow() {doTest(new UnusedDefInspection(), new GroovyResultOfAssignmentUsedInspection(), new GrUnusedIncDecInspection());} public void testRawTypeInAssignment() {doTest(new GroovyAssignabilityCheckInspection());} @@ -323,7 +323,7 @@ class A { IdeaTestUtil.assertTiming("", 10000, 1, new Runnable() { @Override public void run() { - doTest(new GroovyAssignabilityCheckInspection(), new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); + doTest(new GroovyAssignabilityCheckInspection(), new UnusedDefInspection(), new GrUnusedIncDecInspection()); } }); } @@ -395,7 +395,7 @@ class A { doTest(new GroovyUnresolvedAccessInspection(), new GroovyUntypedAccessInspection()); } - public void testUsageInInjection() { doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); } + public void testUsageInInjection() { doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()); } public void testDuplicatedNamedArgs() {doTest();} @@ -417,19 +417,19 @@ class A { } public void testUnusedDefsForArgs() { - doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); + doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()); } public void testUsedDefBeforeTry1() { - doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); + doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()); } public void testUsedDefBeforeTry2() { - doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()); + doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()); } public void testUnusedInc() { - doTest(new UnusedAssignmentInspection(), new GrUnusedIncDecInspection()) + doTest(new UnusedDefInspection(), new GrUnusedIncDecInspection()) } public void testStringAssignableToChar() {