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);