mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 09:19:13 +07:00
unused parameter: correctly ignore parameters used in overridden methods
when graph was build over not project scope (IDEA-180281)
This commit is contained in:
+9
-2
@@ -41,7 +41,6 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.profile.codeInspection.ui.SingleInspectionProfilePanel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PropertyUtilBase;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.safeDelete.SafeDeleteHandler;
|
||||
@@ -564,7 +563,15 @@ public class UnusedDeclarationPresentation extends DefaultInspectionToolPresenta
|
||||
final PsiElement psiElement = ReadAction.compute(() -> ((RefElement)refEntity).getElement());
|
||||
List<CommonProblemDescriptor> foreignDescriptors = new ArrayList<>();
|
||||
for (CommonProblemDescriptor descriptor : descriptors) {
|
||||
if (descriptor instanceof ProblemDescriptor && ReadAction.compute(() -> ((ProblemDescriptor)descriptor).getPsiElement()) == psiElement) continue;
|
||||
if (descriptor instanceof ProblemDescriptor) {
|
||||
PsiElement problemElement = ReadAction.compute(() -> {
|
||||
PsiElement element = ((ProblemDescriptor)descriptor).getPsiElement();
|
||||
if (element instanceof PsiIdentifier) element = element.getParent();
|
||||
return element;
|
||||
});
|
||||
if (problemElement == psiElement ||
|
||||
problemElement instanceof PsiParameter && ((PsiParameter)problemElement).getDeclarationScope() == psiElement) continue;
|
||||
}
|
||||
foreignDescriptors.add(descriptor);
|
||||
}
|
||||
if (foreignDescriptors.size() == descriptors.length) return;
|
||||
|
||||
+2
-2
@@ -117,7 +117,7 @@ class UnusedParametersInspection extends GlobalJavaBatchInspectionTool {
|
||||
for (int i = 0; i < derived.length && !found[0]; i++) {
|
||||
if (scope == null || !scope.contains(derived[i])) {
|
||||
final PsiParameter[] parameters = derived[i].getParameterList().getParameters();
|
||||
if (parameters.length >= idx) continue;
|
||||
if (parameters.length < idx) continue;
|
||||
PsiParameter psiParameter = parameters[idx];
|
||||
ReferencesSearch.search(psiParameter, helper.getUseScope(psiParameter), false)
|
||||
.forEach(new PsiReferenceProcessorAdapter(
|
||||
@@ -125,7 +125,7 @@ class UnusedParametersInspection extends GlobalJavaBatchInspectionTool {
|
||||
@Override
|
||||
public boolean execute(PsiReference element) {
|
||||
refParameter.parameterReferenced(false);
|
||||
processor.ignoreElement(refParameter);
|
||||
processor.ignoreElement(refMethod);
|
||||
found[0] = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<problems/>
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
public class Test {
|
||||
public void doSmth(String str) {}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new Test().doSmth("");
|
||||
}
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
public class Main extends Test {
|
||||
public void doSmth(String str) {
|
||||
System.out.println(str);
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.java.codeInspection;
|
||||
|
||||
import com.intellij.analysis.AnalysisScope;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.testFramework.PsiTestUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class UnusedDeclarationInSubScopeTest extends AbstractUnusedDeclarationTest {
|
||||
@Override
|
||||
protected void setupRootModel(@NotNull String testDir, @NotNull VirtualFile[] sourceDir, String jdkName) {
|
||||
super.setupRootModel(testDir, sourceDir, jdkName);
|
||||
VirtualFile projectDir = LocalFileSystem.getInstance().findFileByPath(testDir);
|
||||
assertNotNull(projectDir);
|
||||
VirtualFile test = projectDir.findChild("test_src");
|
||||
if (test != null) PsiTestUtil.addSourceRoot(myModule, test, true);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected AnalysisScope createAnalysisScope(VirtualFile sourceDir) {
|
||||
VirtualFile[] roots = ModuleRootManager.getInstance(myModule).getSourceRoots(false);
|
||||
assertTrue(roots.length == 1);
|
||||
PsiManager psiManager = PsiManager.getInstance(myProject);
|
||||
return new AnalysisScope(psiManager.findDirectory(roots[0]));
|
||||
}
|
||||
|
||||
public void testParameterUsedInOutOfScopeOverrider() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doTest() {
|
||||
doTest("deadCode/" + getTestName(true), myToolWrapper);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user