From 4e851eaffba79106a20a89347a7722b46037aa05 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 6 Nov 2014 18:00:38 +0100 Subject: [PATCH] IDEA-132440 (more straightforward element lookup) --- .../FileHeaderChecker.java | 36 ++++++++----------- .../defaultFileTemplateUsage/Range.java | 10 ++++++ ...efaultFileTemplateUsageInspectionTest.java | 1 + 3 files changed, 25 insertions(+), 22 deletions(-) create mode 100644 java/java-tests/testData/inspection/defaultFileTemplateUsage/Range.java diff --git a/java/java-impl/src/com/intellij/codeInspection/defaultFileTemplateUsage/FileHeaderChecker.java b/java/java-impl/src/com/intellij/codeInspection/defaultFileTemplateUsage/FileHeaderChecker.java index 86cd33ba5434..e7e6bbe24a5f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/defaultFileTemplateUsage/FileHeaderChecker.java +++ b/java/java-impl/src/com/intellij/codeInspection/defaultFileTemplateUsage/FileHeaderChecker.java @@ -21,11 +21,14 @@ import com.intellij.ide.fileTemplates.FileTemplate; import com.intellij.ide.fileTemplates.FileTemplateManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.*; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiComment; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.psi.javadoc.PsiDocComment; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.containers.ContainerUtil; import gnu.trove.TIntObjectHashMap; import org.jetbrains.annotations.NotNull; @@ -48,27 +51,16 @@ public class FileHeaderChecker { FileTemplate defaultTemplate = FileTemplateManager.getInstance().getDefaultTemplate(FileTemplateManager.FILE_HEADER_TEMPLATE_NAME); Pattern pattern = getTemplatePattern(defaultTemplate, file.getProject(), offsetToProperty); Matcher matcher = pattern.matcher(file.getViewProvider().getContents()); - if (!matcher.matches()) return null; + if (!matcher.matches()) { + return null; + } - final int startOffset = matcher.start(1); - final int endOffset = matcher.end(1); - final Ref docComment = new Ref(); - file.accept(new JavaRecursiveElementWalkingVisitor() { - @Override - public void visitElement(PsiElement element) { - if (docComment.get() != null) return; - TextRange range = element.getTextRange(); - if (!range.contains(startOffset) && !range.contains(endOffset)) return; - super.visitElement(element); - } - - @Override - public void visitDocComment(PsiDocComment comment) { - docComment.set(comment); - } - }); - PsiDocComment element = docComment.get(); - if (element == null) return null; + int startOffset = matcher.start(1); + int endOffset = matcher.end(1); + PsiComment element = PsiTreeUtil.getParentOfType(file.findElementAt(startOffset), PsiComment.class); + if (element == null || !element.getTextRange().equals(new TextRange(startOffset, endOffset))) { + return null; + } LocalQuickFix[] fixes = createQuickFix(matcher, offsetToProperty); String description = InspectionsBundle.message("default.file.template.description"); diff --git a/java/java-tests/testData/inspection/defaultFileTemplateUsage/Range.java b/java/java-tests/testData/inspection/defaultFileTemplateUsage/Range.java new file mode 100644 index 000000000000..2a36f0341190 --- /dev/null +++ b/java/java-tests/testData/inspection/defaultFileTemplateUsage/Range.java @@ -0,0 +1,10 @@ +package mylibs.aspectjlibs.lib2; + +/** + * Created by irina on 11/6/2014. + */ +class Range { + /** + * for all public methods with name == foo* and String type + */ +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DefaultFileTemplateUsageInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DefaultFileTemplateUsageInspectionTest.java index 71b416383de2..3230fa6f1483 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DefaultFileTemplateUsageInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DefaultFileTemplateUsageInspectionTest.java @@ -28,6 +28,7 @@ public class DefaultFileTemplateUsageInspectionTest extends LightCodeInsightFixt public void testX() { doTest(); } public void testX2() { doTest(); } public void testX3() { doTest(); } + public void testRange() { doTest(); } public void doTest() { myFixture.enableInspections(new DefaultFileTemplateUsageInspection());