diff --git a/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/MyTestInjector.java b/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/MyTestInjector.java
index 31d31efdcf1a..10a1c15c444a 100644
--- a/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/MyTestInjector.java
+++ b/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/MyTestInjector.java
@@ -100,11 +100,12 @@ public class MyTestInjector {
.doneInjecting();
}
};
- JavaConcatenationInjectorManager.getInstance(project).registerConcatenationInjector(injector);
+ final JavaConcatenationInjectorManager injectorManager = JavaConcatenationInjectorManager.getInstance(project);
+ injectorManager.registerConcatenationInjector(injector);
Disposer.register(parent, new Disposable() {
@Override
public void dispose() {
- boolean b = JavaConcatenationInjectorManager.getInstance(project).unregisterConcatenationInjector(injector);
+ boolean b = injectorManager.unregisterConcatenationInjector(injector);
assert b;
}
});
@@ -149,11 +150,12 @@ public class MyTestInjector {
}
}
};
- JavaConcatenationInjectorManager.getInstance(project).registerConcatenationInjector(injector);
+ final JavaConcatenationInjectorManager injectorManager = JavaConcatenationInjectorManager.getInstance(project);
+ injectorManager.registerConcatenationInjector(injector);
Disposer.register(parent, new Disposable() {
@Override
public void dispose() {
- boolean b = JavaConcatenationInjectorManager.getInstance(project).unregisterConcatenationInjector(injector);
+ boolean b = injectorManager.unregisterConcatenationInjector(injector);
assert b;
}
});
diff --git a/java/java-tests/testData/inspection/redundantSuppress/injections/expected.xml b/java/java-tests/testData/inspection/redundantSuppress/injections/expected.xml
new file mode 100644
index 000000000000..4704d91e891d
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantSuppress/injections/expected.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/java/java-tests/testData/inspection/redundantSuppress/injections/src/x/X.java b/java/java-tests/testData/inspection/redundantSuppress/injections/src/x/X.java
new file mode 100644
index 000000000000..73be5eb91548
--- /dev/null
+++ b/java/java-tests/testData/inspection/redundantSuppress/injections/src/x/X.java
@@ -0,0 +1,8 @@
+package x;
+
+class S {
+ {
+ //noinspection rawtypes
+ String java = "class A { public void abcdeff(java.util.List l) {}}";
+ }
+}
diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantSuppressTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantSuppressTest.java
index 641a87f27a8a..2e41a4d960d6 100644
--- a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantSuppressTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantSuppressTest.java
@@ -5,6 +5,7 @@ import com.intellij.codeInspection.emptyMethod.EmptyMethodInspection;
import com.intellij.codeInspection.ex.*;
import com.intellij.codeInspection.i18n.I18nInspection;
import com.intellij.psi.PsiElement;
+import com.intellij.psi.impl.source.tree.injected.MyTestInjector;
import com.intellij.testFramework.InspectionTestCase;
import com.siyeh.ig.migration.RawUseOfParameterizedTypeInspection;
import org.jetbrains.annotations.NotNull;
@@ -52,6 +53,13 @@ public class RedundantSuppressTest extends InspectionTestCase {
}
}
+ public void testInjections() throws Exception {
+ MyTestInjector testInjector = new MyTestInjector(getPsiManager());
+ testInjector.injectAll(myTestRootDisposable);
+
+ doTest();
+ }
+
private void doTest() throws Exception {
doTest("redundantSuppress/" + getTestName(true), myWrapper,"java 1.5",true);
}
diff --git a/platform/analysis-api/src/com/intellij/codeInspection/LocalInspectionTool.java b/platform/analysis-api/src/com/intellij/codeInspection/LocalInspectionTool.java
index 3a98043053fd..a2744bc89b90 100644
--- a/platform/analysis-api/src/com/intellij/codeInspection/LocalInspectionTool.java
+++ b/platform/analysis-api/src/com/intellij/codeInspection/LocalInspectionTool.java
@@ -15,7 +15,10 @@
*/
package com.intellij.codeInspection;
+import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.util.Pair;
+import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import org.intellij.lang.annotations.Language;
import org.intellij.lang.annotations.Pattern;
@@ -190,12 +193,32 @@ public abstract class LocalInspectionTool extends InspectionProfileEntry {
inspectionStarted(session, false);
+ final InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(holder.getProject());
file.accept(new PsiRecursiveElementWalkingVisitor() {
@Override
public void visitElement(PsiElement element) {
element.accept(customVisitor);
+ processInjectedFile(element);
+
super.visitElement(element);
}
+
+ private void processInjectedFile(PsiElement element) {
+ if (element instanceof PsiLanguageInjectionHost) {
+ final List> files = injectedLanguageManager.getInjectedPsiFiles(element);
+ if (files != null) {
+ for (Pair pair : files) {
+ pair.first.accept(new PsiRecursiveElementWalkingVisitor() {
+ @Override
+ public void visitElement(PsiElement injectedElement) {
+ injectedElement.accept(customVisitor);
+ super.visitElement(injectedElement);
+ }
+ });
+ }
+ }
+ }
+ }
});
inspectionFinished(session, holder);