Do not show "Unnecessary fully qualified name" warning in javadocs if "fully qualify when not imported" is selected and fqn is not imported (IDEA-136680)

This commit is contained in:
Yaroslav Lepenkin
2015-02-22 15:04:40 +03:00
parent fae615a470
commit f0556a4a65
5 changed files with 35 additions and 9 deletions
@@ -15,7 +15,6 @@
*/
package com.siyeh.ig.style;
import com.intellij.codeInsight.javadoc.JavaDocUtil;
import com.intellij.codeInspection.CleanupLocalInspectionTool;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.diagnostic.Logger;
@@ -26,6 +25,7 @@ import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.impl.source.codeStyle.ImportHelper;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
@@ -206,11 +206,6 @@ public class UnnecessaryFullyQualifiedNameInspection extends BaseInspection impl
if (element != null) {
return;
}
final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(reference.getProject());
PsiDocComment containingComment = PsiTreeUtil.getParentOfType(reference, PsiDocComment.class);
if (containingComment != null && acceptFullyQualifiedNamesInJavadoc(containingComment, styleSettings)) {
return;
}
final PsiFile containingFile = reference.getContainingFile();
if (!(containingFile instanceof PsiJavaFile)) {
return;
@@ -219,6 +214,11 @@ public class UnnecessaryFullyQualifiedNameInspection extends BaseInspection impl
if (!(target instanceof PsiClass)) {
return;
}
final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(reference.getProject());
PsiDocComment containingComment = PsiTreeUtil.getParentOfType(reference, PsiDocComment.class);
if (containingComment != null && acceptFqnInJavadoc((PsiJavaFile)containingFile, reference.getQualifiedName(), styleSettings)) {
return;
}
final PsiJavaCodeReferenceElement qualifierReference = (PsiJavaCodeReferenceElement)qualifier;
final PsiElement qualifierTarget = qualifierReference.resolve();
if (!(qualifierTarget instanceof PsiPackage)) {
@@ -262,11 +262,14 @@ public class UnnecessaryFullyQualifiedNameInspection extends BaseInspection impl
}
}
public static boolean acceptFullyQualifiedNamesInJavadoc(PsiDocComment comment, CodeStyleSettings styleSettings) {
if (JavaDocUtil.isInsidePackageInfo(comment)) {
private static boolean acceptFqnInJavadoc(PsiJavaFile javaFile, String fullyQualifiedName, CodeStyleSettings styleSettings) {
if ("package-info.java".equals(javaFile.getName())) {
return true;
}
JavaCodeStyleSettings javaSettings = styleSettings.getCustomSettings(JavaCodeStyleSettings.class);
if (javaSettings.CLASS_NAMES_IN_JAVADOC == JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED) {
return !ImportHelper.isAlreadyImported(javaFile, fullyQualifiedName);
}
return javaSettings.useFqNamesInJavadocAlways();
}
}
@@ -0,0 +1,7 @@
import java.util.HashMap;
/**
* {@link java.util.HashMap}
*/
public class DoubleQualify {
}
@@ -0,0 +1,5 @@
/**
* {@link java.util.HashMap}
*/
public class Single {
}
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<problems>
<problem>
<file>DoubleQualify.java</file>
<line>4</line>
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Unnecessary fully qualified name</problem_class>
<description>Fully qualified name &lt;code&gt;java.util.HashMap&lt;/code&gt; is unnecessary, and can be replaced with an import #loc</description>
</problem>
</problems>
@@ -10,7 +10,7 @@ public class UnnecessaryFullyQualifiedNameInspectionTest extends IGInspectionTes
private static final String BASE_DIR = "com/siyeh/igtest/style/";
public void testFqnInJavadoc_Unnecessary_WhenFullyQualifyIfNotImported() throws Exception {
doTestWithFqnInJavadocSetting(BASE_DIR + "unnecessary_fully_qualified_name/", JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED);
doTestWithFqnInJavadocSetting(BASE_DIR + "unnecessary_fqn_javadoc_fully_qualify_if_not_imported", JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED);
}
public void testFqnInJavadoc_Unnecessary_WhenShortNamesAlways() {