IDEA-132440 (more straightforward element lookup)
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Thu, 6 Nov 2014 17:00:38 +0000 (18:00 +0100)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Thu, 6 Nov 2014 17:00:38 +0000 (18:00 +0100)
java/java-impl/src/com/intellij/codeInspection/defaultFileTemplateUsage/FileHeaderChecker.java
java/java-tests/testData/inspection/defaultFileTemplateUsage/Range.java [new file with mode: 0644]
java/java-tests/testSrc/com/intellij/codeInspection/DefaultFileTemplateUsageInspectionTest.java

index 86cd33ba5434624862d33cb6be4801f322cbe73a..e7e6bbe24a5fc72179cd0caf23f42ea3ab511a8e 100644 (file)
@@ -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;
-
-    final int startOffset = matcher.start(1);
-    final int endOffset = matcher.end(1);
-    final Ref<PsiDocComment> docComment = new Ref<PsiDocComment>();
-    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);
-      }
+    if (!matcher.matches()) {
+      return null;
+    }
 
-      @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 (file)
index 0000000..2a36f03
--- /dev/null
@@ -0,0 +1,10 @@
+package mylibs.aspectjlibs.lib2;
+
+<warning descr="Default File template">/**
+ * Created by irina on 11/6/2014.
+ */</warning>
+class Range {
+  /**
+   * for all public methods with name == foo* and String type
+   */
+}
index 71b416383de2aba1f052a3d731eeca017227f559..3230fa6f1483aca18429e6a548aeae0703aece5d 100644 (file)
@@ -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());