take implicit usages into account (IDEA-75803)
authorpeter <peter@jetbrains.com>
Mon, 30 Jan 2012 18:36:21 +0000 (19:36 +0100)
committerpeter <peter@jetbrains.com>
Tue, 31 Jan 2012 17:30:24 +0000 (18:30 +0100)
java/java-impl/src/com/intellij/codeInsight/daemon/impl/PostHighlightingPass.java
plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyPostHighlightingPass.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/GrNamedElement.java

index 48b7f0ee5b2525a089db7c2c4a39b036f9638ab8..6672bd5c45bf2a9571dba0fdae7955cd7f8fc7cc 100644 (file)
@@ -102,7 +102,7 @@ public class PostHighlightingPass extends TextEditorHighlightingPass {
   private final JavaCodeStyleManager myStyleManager;
   private int myCurrentEntryIndex;
   private boolean myHasMissortedImports;
-  private final ImplicitUsageProvider[] myImplicitUsageProviders;
+  private static final ImplicitUsageProvider[] ourImplicitUsageProviders = Extensions.getExtensions(ImplicitUsageProvider.EP_NAME);
   private UnusedDeclarationInspection myDeadCodeInspection;
   private UnusedSymbolLocalInspection myUnusedSymbolInspection;
   private HighlightDisplayKey myUnusedSymbolKey;
@@ -124,8 +124,6 @@ public class PostHighlightingPass extends TextEditorHighlightingPass {
 
     myStyleManager = JavaCodeStyleManager.getInstance(myProject);
     myCurrentEntryIndex = -1;
-
-    myImplicitUsageProviders = Extensions.getExtensions(ImplicitUsageProvider.EP_NAME);
   }
 
   @Override
@@ -346,9 +344,9 @@ public class PostHighlightingPass extends TextEditorHighlightingPass {
   }
 
 
-  private boolean isImplicitUsage(final PsiModifierListOwner element, ProgressIndicator progress) {
+  public static boolean isImplicitUsage(final PsiModifierListOwner element, ProgressIndicator progress) {
     if (UnusedSymbolLocalInspection.isInjected(element)) return true;
-    for (ImplicitUsageProvider provider : myImplicitUsageProviders) {
+    for (ImplicitUsageProvider provider : ourImplicitUsageProviders) {
       progress.checkCanceled();
       if (provider.isImplicitUsage(element)) {
         return true;
@@ -358,8 +356,8 @@ public class PostHighlightingPass extends TextEditorHighlightingPass {
     return false;
   }
 
-  private boolean isImplicitRead(final PsiVariable element, ProgressIndicator progress) {
-    for(ImplicitUsageProvider provider: myImplicitUsageProviders) {
+  private static boolean isImplicitRead(final PsiVariable element, ProgressIndicator progress) {
+    for(ImplicitUsageProvider provider: ourImplicitUsageProviders) {
       progress.checkCanceled();
       if (provider.isImplicitRead(element)) {
         return true;
@@ -368,8 +366,8 @@ public class PostHighlightingPass extends TextEditorHighlightingPass {
     return UnusedSymbolLocalInspection.isInjected(element);
   }
 
-  private boolean isImplicitWrite(final PsiVariable element, ProgressIndicator progress) {
-    for(ImplicitUsageProvider provider: myImplicitUsageProviders) {
+  private static boolean isImplicitWrite(final PsiVariable element, ProgressIndicator progress) {
+    for(ImplicitUsageProvider provider: ourImplicitUsageProviders) {
       progress.checkCanceled();
       if (provider.isImplicitWrite(element)) {
         return true;
index d3f3b5f4033008e9235200c0e453e928a1739fef..ea024e4cc37e70784b9b2e8efd5a1ae92aee7008 100644 (file)
@@ -100,7 +100,7 @@ public class GroovyPostHighlightingPass extends TextEditorHighlightingPass {
           }
         }
 
-        if (deadCodeEnabled && element instanceof GrNamedElement) {
+        if (deadCodeEnabled && element instanceof GrNamedElement && !PostHighlightingPass.isImplicitUsage((GrNamedElement)element, progress)) {
           PsiElement nameId = ((GrNamedElement)element).getNameIdentifierGroovy();
           String name = ((GrNamedElement)element).getName();
           if (element instanceof GrTypeDefinition && PostHighlightingPass.isGloballyUnused((GrTypeDefinition)element, progress, null, name)) {
index 8159590e1e8796759f9397d823e6476086d76645..70275dca13031695593f70b20bac5fe1377510e2 100644 (file)
@@ -16,6 +16,7 @@
 
 package org.jetbrains.plugins.groovy.lang.psi;
 
+import com.intellij.psi.PsiModifierListOwner;
 import com.intellij.psi.PsiNamedElement;
 import com.intellij.psi.PsiElement;
 import org.jetbrains.annotations.NotNull;
@@ -23,7 +24,7 @@ import org.jetbrains.annotations.NotNull;
 /**
  * @author ven
  */
-public interface GrNamedElement extends PsiNamedElement, GroovyPsiElement {
+public interface GrNamedElement extends PsiNamedElement, GroovyPsiElement, PsiModifierListOwner {
   @NotNull
   PsiElement getNameIdentifierGroovy();
 }