Added possibility not to add FQN in javadocs if class was imported (IDEA-121121 ) [CR-IC-6907]

Now three options is available: use FQN always, never, or when not imported. Last is used by default.
Converted and moved boolean legacy setting from CommonCodeStyle settings into JavaCodeStyleSettings.
This commit is contained in:
Yaroslav Lepenkin
2014-12-02 12:14:01 +02:00
parent 825b2d3ca3
commit 9f82306ea5
15 changed files with 291 additions and 33 deletions
@@ -31,7 +31,6 @@ import java.awt.event.ActionListener;
public class CodeStyleImportsPanel extends JPanel {
private JCheckBox myCbUseFQClassNames;
private JCheckBox myCbUseFQClassNamesInJavaDoc;
private JCheckBox myCbUseSingleClassImports;
private JCheckBox myCbInsertInnerClassImports;
private JTextField myClassCountField;
@@ -49,6 +48,7 @@ public class CodeStyleImportsPanel extends JPanel {
private JPanel myImportsLayoutPanel;
private JPanel myWholePanel;
private ImportLayoutPanel myImportLayoutPanel;
private FullyQualifiedNamesInJdOptionProvider myFqnInJavadocOption;
public CodeStyleImportsPanel(CodeStyleSettings settings) {
mySettings = settings;
@@ -129,9 +129,9 @@ public class CodeStyleImportsPanel extends JPanel {
myCbInsertInnerClassImports = new JCheckBox(ApplicationBundle.message("checkbox.insert.imports.for.inner.classes"));
group.add(myCbInsertInnerClassImports);
myCbUseFQClassNamesInJavaDoc = new JCheckBox(ApplicationBundle.message("checkbox.use.fully.qualified.class.names.in.javadoc"));
group.add(myCbUseFQClassNamesInJavaDoc);
myFqnInJavadocOption = new FullyQualifiedNamesInJdOptionProvider(mySettings);
group.add(myFqnInJavadocOption.getPanel());
myClassCountField = new JTextField(3);
myNamesCountField = new JTextField(3);
final JPanel panel = new JPanel(new GridBagLayout());
@@ -161,7 +161,6 @@ public class CodeStyleImportsPanel extends JPanel {
public void reset(CodeStyleSettings settings) {
myCbUseFQClassNames.setSelected(settings.USE_FQ_CLASS_NAMES);
myCbUseFQClassNamesInJavaDoc.setSelected(settings.USE_FQ_CLASS_NAMES_IN_JAVADOC);
myCbUseSingleClassImports.setSelected(settings.USE_SINGLE_CLASS_IMPORTS);
myCbInsertInnerClassImports.setSelected(settings.INSERT_INNER_CLASS_IMPORTS);
myClassCountField.setText(Integer.toString(settings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND));
@@ -169,6 +168,7 @@ public class CodeStyleImportsPanel extends JPanel {
myImportLayoutPanel.getImportLayoutList().copyFrom(settings.IMPORT_LAYOUT_TABLE);
myPackageList.copyFrom(settings.PACKAGES_TO_USE_IMPORT_ON_DEMAND);
myFqnInJavadocOption.reset(settings);
myImportLayoutPanel.getCbLayoutStaticImportsSeparately().setSelected(settings.LAYOUT_STATIC_IMPORTS_SEPARATELY);
@@ -203,7 +203,6 @@ public class CodeStyleImportsPanel extends JPanel {
settings.LAYOUT_STATIC_IMPORTS_SEPARATELY = myImportLayoutPanel.areStaticImportsEnabled();
settings.USE_FQ_CLASS_NAMES = myCbUseFQClassNames.isSelected();
settings.USE_FQ_CLASS_NAMES_IN_JAVADOC = myCbUseFQClassNamesInJavaDoc.isSelected();
settings.USE_SINGLE_CLASS_IMPORTS = myCbUseSingleClassImports.isSelected();
settings.INSERT_INNER_CLASS_IMPORTS = myCbInsertInnerClassImports.isSelected();
try {
@@ -227,6 +226,8 @@ public class CodeStyleImportsPanel extends JPanel {
settings.PACKAGES_TO_USE_IMPORT_ON_DEMAND.copyFrom(myPackageList);
settings.JSP_PREFER_COMMA_SEPARATED_IMPORT_LIST = myJspImportCommaSeparated.isSelected();
myFqnInJavadocOption.apply(settings);
}
public void apply() {
@@ -241,7 +242,7 @@ public class CodeStyleImportsPanel extends JPanel {
public boolean isModified(CodeStyleSettings settings) {
boolean isModified = isModified(myImportLayoutPanel.getCbLayoutStaticImportsSeparately(), settings.LAYOUT_STATIC_IMPORTS_SEPARATELY);
isModified |= isModified(myCbUseFQClassNames, settings.USE_FQ_CLASS_NAMES);
isModified |= isModified(myCbUseFQClassNamesInJavaDoc, settings.USE_FQ_CLASS_NAMES_IN_JAVADOC);
isModified |= myFqnInJavadocOption.isModified(settings);
isModified |= isModified(myCbUseSingleClassImports, settings.USE_SINGLE_CLASS_IMPORTS);
isModified |= isModified(myCbInsertInnerClassImports, settings.INSERT_INNER_CLASS_IMPORTS);
isModified |= isModified(myClassCountField, settings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND);
@@ -24,14 +24,19 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.LanguageLevel;
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.filters.FilterPositionUtil;
import com.intellij.psi.impl.source.codeStyle.ImportHelper;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocTag;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import static com.intellij.patterns.PsiJavaPatterns.psiElement;
import static com.intellij.psi.codeStyle.JavaCodeStyleSettings.*;
/**
* @author peter
@@ -71,8 +76,7 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
AutoPopupController.getInstance(context.getProject()).autoPopupMemberLookup(context.getEditor(), null);
}
if (PsiTreeUtil.getParentOfType(position, PsiDocComment.class, false) != null &&
CodeStyleSettingsManager.getSettings(project).USE_FQ_CLASS_NAMES_IN_JAVADOC) {
if (PsiTreeUtil.getParentOfType(position, PsiDocComment.class, false) != null && shouldInsertFqnInJavadoc(item, file, project)) {
AllClassesGetter.INSERT_FQN.handleInsert(context, item);
return;
}
@@ -113,6 +117,28 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
}
}
private static boolean shouldInsertFqnInJavadoc(@NotNull JavaPsiClassReferenceElement item,
@NotNull PsiFile file,
@NotNull Project project)
{
CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project);
JavaCodeStyleSettings javaSettings = settings.getCustomSettings(JavaCodeStyleSettings.class);
switch (javaSettings.CLASS_NAMES_IN_JAVADOC) {
case FULLY_QUALIFY_NAMES_ALWAYS:
return true;
case SHORTEN_NAMES_ALWAYS_AND_ADD_IMPORT:
return false;
case FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED:
if (file instanceof PsiJavaFile) {
PsiJavaFile javaFile = ((PsiJavaFile)file);
return !ImportHelper.isAlreadyImported(javaFile, item.getQualifiedName());
}
default:
return false;
}
}
private static boolean shouldInsertParentheses(PsiElement position) {
final PsiJavaCodeReferenceElement ref = PsiTreeUtil.getParentOfType(position, PsiJavaCodeReferenceElement.class);
if (ref == null) {
@@ -36,5 +36,27 @@ public class JavaCodeStyleSettings extends CustomCodeStyleSettings {
public boolean ALIGN_MULTILINE_ANNOTATION_PARAMETERS = false;
public int BLANK_LINES_AROUND_INITIALIZER = 1;
public static final int FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED = 1;
public static final int FULLY_QUALIFY_NAMES_ALWAYS = 2;
public static final int SHORTEN_NAMES_ALWAYS_AND_ADD_IMPORT = 3;
public boolean LEGACY_SETTING_USE_FQ_CLASS_NAMES_IN_JAVADOC_IMPORTED = false;
public int CLASS_NAMES_IN_JAVADOC = FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED;
public boolean useFqNamesInJavadocAlways() {
return CLASS_NAMES_IN_JAVADOC == FULLY_QUALIFY_NAMES_ALWAYS;
}
@Override
public void importLegacySettings() {
if (!LEGACY_SETTING_USE_FQ_CLASS_NAMES_IN_JAVADOC_IMPORTED) {
CodeStyleSettings settings = getContainer();
if (!settings.USE_FQ_CLASS_NAMES_IN_JAVADOC) {
CLASS_NAMES_IN_JAVADOC = SHORTEN_NAMES_ALWAYS_AND_ADD_IMPORT;
}
LEGACY_SETTING_USE_FQ_CLASS_NAMES_IN_JAVADOC_IMPORTED = true;
}
}
}
@@ -20,6 +20,7 @@ import com.intellij.lang.ASTNode;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
@@ -41,6 +42,7 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.ClassUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
@@ -563,6 +565,15 @@ public class ImportHelper{
}
return null;
}
public static boolean isAlreadyImported(@NotNull PsiJavaFile file, @NotNull String fullyQualifiedName) {
String className = ClassUtil.extractClassName(fullyQualifiedName);
Project project = file.getProject();
PsiResolveHelper resolveHelper = PsiResolveHelper.SERVICE.getInstance(project);
PsiClass psiClass = resolveHelper.resolveReferencedClass(className, file);
return psiClass != null && fullyQualifiedName.equals(psiClass.getQualifiedName());
}
public ASTNode getDefaultAnchor(@NotNull PsiImportList list, @NotNull PsiImportStatementBase statement){
PsiJavaCodeReferenceElement ref = statement.getImportReference();
@@ -20,6 +20,7 @@ import com.intellij.openapi.project.Project;
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.codeStyle.ReferenceAdjuster;
import com.intellij.psi.impl.PsiImplUtil;
import com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl;
@@ -133,7 +134,8 @@ public class JavaReferenceAdjuster implements ReferenceAdjuster {
@Override
public ASTNode process(@NotNull ASTNode element, boolean addImports, boolean incompleteCode, Project project) {
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project);
return process(element, addImports, incompleteCode, settings.USE_FQ_CLASS_NAMES_IN_JAVADOC, settings.USE_FQ_CLASS_NAMES);
JavaCodeStyleSettings javaSettings = settings.getCustomSettings(JavaCodeStyleSettings.class);
return process(element, addImports, incompleteCode, javaSettings.useFqNamesInJavadocAlways(), settings.USE_FQ_CLASS_NAMES);
}
private static boolean isAnnotated(ASTNode element) {
@@ -175,7 +177,8 @@ public class JavaReferenceAdjuster implements ReferenceAdjuster {
@Override
public void processRange(@NotNull ASTNode element, int startOffset, int endOffset, Project project) {
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project);
processRange(element, startOffset, endOffset, settings.USE_FQ_CLASS_NAMES_IN_JAVADOC, settings.USE_FQ_CLASS_NAMES);
JavaCodeStyleSettings javaSettings = settings.getCustomSettings(JavaCodeStyleSettings.class);
processRange(element, startOffset, endOffset, javaSettings.useFqNamesInJavadocAlways(), settings.USE_FQ_CLASS_NAMES);
}
private static void addReferencesInRange(List<ASTNode> array, ASTNode parent, int startOffset, int endOffset) {
@@ -1,7 +1,7 @@
import java.io.*;
/**
* {@link java.io.FileInputStream<caret>}
* {@link FileInputStream<caret>}
*/
class Foo {
@@ -4,7 +4,7 @@ class A {
void method(List<String> y, boolean a){}
/**
* {@link #method(java.util.List, boolean)}
* {@link #method(List, boolean)}
*/
void bar() {}
}
@@ -8,7 +8,9 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiReference
import com.intellij.psi.PsiReferenceBase
import com.intellij.psi.PsiReferenceProvider
import com.intellij.psi.codeStyle.CodeStyleSettings
import com.intellij.psi.codeStyle.CodeStyleSettingsManager
import com.intellij.psi.codeStyle.JavaCodeStyleSettings
import com.intellij.psi.impl.source.resolve.reference.PsiReferenceRegistrarImpl
import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry
import com.intellij.psi.javadoc.PsiDocTag
@@ -20,10 +22,12 @@ import org.jetbrains.annotations.NotNull
* @author mike
*/
public class JavadocCompletionTest extends LightFixtureCompletionTestCase {
private CodeStyleSettings settings
private JavaCodeStyleSettings javaSettings
@Override
protected void tearDown() throws Exception {
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = true
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED
super.tearDown()
}
@@ -35,6 +39,8 @@ public class JavadocCompletionTest extends LightFixtureCompletionTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
settings = CodeStyleSettingsManager.getSettings(getProject());
javaSettings = settings.getCustomSettings(JavaCodeStyleSettings.class)
myFixture.enableInspections(new JavaDocLocalInspection());
}
@@ -166,7 +172,7 @@ public class JavadocCompletionTest extends LightFixtureCompletionTestCase {
}
public void testShortenClassName() throws Throwable {
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = false;
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.SHORTEN_NAMES_ALWAYS_AND_ADD_IMPORT;
doTest();
}
@@ -179,7 +185,7 @@ public class JavadocCompletionTest extends LightFixtureCompletionTestCase {
}
public void testShortenClassReference() throws Throwable {
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = false
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.SHORTEN_NAMES_ALWAYS_AND_ADD_IMPORT
doTest()
}
public void testQualifiedClassReference() throws Throwable {
@@ -295,7 +301,7 @@ class Impl extends Bar implements Foo {}
}
public void testShortenMethodParameterTypes() {
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = false
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.SHORTEN_NAMES_ALWAYS_AND_ADD_IMPORT
myFixture.addClass("package foo; public class Foo {}")
myFixture.addClass("package bar; public class Bar {}")
myFixture.configureByText "a.java", '''
@@ -322,6 +328,153 @@ class Goo { void goo(Foo foo, Bar bar) {} }
assert !myFixture.completeBasic()
myFixture.checkResult(text)
}
public void testShortNameInJavadocIfWasImported() {
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED
def text = '''
import java.util.Map;
/**
* {@link Ma<caret>}
*/
class Test {
}
'''
myFixture.configureByText "a.java", text
myFixture.completeBasic()
myFixture.type('\t')
myFixture.checkResult '''
import java.util.Map;
/**
* {@link Map}
*/
class Test {
}
'''
}
public void testFqnInJavadocIfWasNotImported() {
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED
def text = '''
import java.util.Map;
/**
* {@link HashMa<caret>}
*/
class Test {
}
'''
myFixture.configureByText "a.java", text
myFixture.completeBasic()
myFixture.type('\t')
myFixture.checkResult '''
import java.util.Map;
/**
* {@link java.util.HashMap}
*/
class Test {
}
'''
}
public void testFqnNameInJavadocIfWasImported() {
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_ALWAYS
def text = '''
import java.util.Map;
/**
* {@link Ma<caret>}
*/
class Test {
}
'''
myFixture.configureByText "a.java", text
myFixture.completeBasic()
myFixture.type('\t')
myFixture.checkResult '''
import java.util.Map;
/**
* {@link java.util.Map}
*/
class Test {
}
'''
}
public void testShortNameInJavadoc() {
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.SHORTEN_NAMES_ALWAYS_AND_ADD_IMPORT
def text = '''
import java.util.Map;
/**
* {@link Ma<caret>}
*/
class Test {
}
'''
myFixture.configureByText "a.java", text
myFixture.completeBasic()
myFixture.type('\t')
myFixture.checkResult '''
import java.util.Map;
/**
* {@link Map}
*/
class Test {
}
'''
}
public void testShortNameInJavadocIfWasImportOnDemand() {
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED
def text = '''
import java.util.*;
/**
* {@link Ma<caret>}
*/
class Test {
}
'''
myFixture.configureByText "a.java", text
myFixture.completeBasic()
myFixture.type('\t')
myFixture.checkResult '''
import java.util.*;
/**
* {@link Map}
*/
class Test {
}
'''
}
public void testShortNameIfImplicitlyImported() {
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED
def text = '''
/**
* {@link Str<caret>}
*/
class Test {
}
'''
myFixture.configureByText "a.java", text
myFixture.completeBasic()
myFixture.type('\t')
myFixture.checkResult '''
/**
* {@link String}
*/
class Test {
}
'''
}
public void testCustomReferenceProvider() throws Exception {
PsiReferenceRegistrarImpl registrar =
@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Computable;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.search.ProjectScope;
import com.intellij.refactoring.copy.CopyClassesHandler;
@@ -48,6 +49,8 @@ public class CopyClassTest extends CodeInsightTestCase {
}
public void testLibraryClass() throws Exception { // IDEADEV-28791
JavaCodeStyleSettings javaSettings = getCurrentCodeStyleSettings().getCustomSettings(JavaCodeStyleSettings.class);
javaSettings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_ALWAYS;
doTest("java.util.ArrayList", "Bar");
}
@@ -7,6 +7,7 @@ package com.intellij.refactoring;
import com.intellij.psi.CommonClassNames;
import com.intellij.psi.PsiEllipsisType;
import com.intellij.psi.PsiType;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import org.jetbrains.annotations.NotNull;
public class MigrateTypeSignatureTest extends TypeMigrationTestBase {
@@ -307,6 +308,8 @@ public class MigrateTypeSignatureTest extends TypeMigrationTestBase {
}
public void testSpecJavadoc() throws Exception {
JavaCodeStyleSettings settings = getCurrentCodeStyleSettings().getCustomSettings(JavaCodeStyleSettings.class);
settings.CLASS_NAMES_IN_JAVADOC = JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_ALWAYS;
doTestFirstParamType("meth", "Spec", PsiType.DOUBLE,
myJavaFacade.getElementFactory().createTypeFromText(CommonClassNames.JAVA_UTIL_SET, null));
}
@@ -234,6 +234,8 @@ public class CodeStyleSettings extends CommonCodeStyleSettings implements Clonea
public boolean LAYOUT_STATIC_IMPORTS_SEPARATELY = true;
public boolean USE_FQ_CLASS_NAMES = false;
@Deprecated
public boolean USE_FQ_CLASS_NAMES_IN_JAVADOC = true;
public boolean USE_SINGLE_CLASS_IMPORTS = true;
public boolean INSERT_INNER_CLASS_IMPORTS = false;
@@ -113,6 +113,10 @@ checkbox.use.single.class.import=Use single class import
checkbox.use.fully.qualified.class.names=Use fully qualified class names
checkbox.insert.imports.for.inner.classes=Insert imports for inner classes
checkbox.use.fully.qualified.class.names.in.javadoc=Use fully qualified class names in javadoc
radio.use.fully.qualified.class.names.in.javadoc=Use fully qualified class names in JavaDoc:
radio.use.fully.qualified.class.names.in.javadoc.always=Always
radio.use.fully.qualified.class.names.in.javadoc.if.not.imported=If not already imported
radio.use.fully.qualified.class.names.in.javadoc.never=Never: use short name and add import
editbox.class.count.to.use.import.with.star=Class count to use import with '*':
editbox.names.count.to.use.static.import.with.star=Names count to use static import with '*':
title.packages.to.use.import.with=Packages to Use Import with '*'
@@ -25,6 +25,7 @@ import com.intellij.openapi.wm.WindowManager;
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.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
@@ -206,7 +207,8 @@ public class UnnecessaryFullyQualifiedNameInspection extends BaseInspection impl
return;
}
final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(reference.getProject());
if (acceptFullyQualifiedNamesInJavadoc(reference, styleSettings)) {
PsiDocComment containingComment = PsiTreeUtil.getParentOfType(reference, PsiDocComment.class);
if (containingComment != null && acceptFullyQualifiedNamesInJavadoc(containingComment, styleSettings)) {
return;
}
final PsiFile containingFile = reference.getContainingFile();
@@ -260,13 +262,11 @@ public class UnnecessaryFullyQualifiedNameInspection extends BaseInspection impl
}
}
public static boolean acceptFullyQualifiedNamesInJavadoc(PsiJavaCodeReferenceElement reference, CodeStyleSettings styleSettings) {
final PsiDocComment containingComment = PsiTreeUtil.getParentOfType(reference, PsiDocComment.class);
if (containingComment != null) {
if (styleSettings.USE_FQ_CLASS_NAMES_IN_JAVADOC || JavaDocUtil.isInsidePackageInfo(containingComment)) {
return true;
}
public static boolean acceptFullyQualifiedNamesInJavadoc(PsiDocComment comment, CodeStyleSettings styleSettings) {
if (JavaDocUtil.isInsidePackageInfo(comment)) {
return true;
}
return false;
JavaCodeStyleSettings javaSettings = styleSettings.getCustomSettings(JavaCodeStyleSettings.class);
return javaSettings.useFqNamesInJavadocAlways();
}
}
@@ -36,4 +36,19 @@
<description>Fully qualified name &lt;code&gt;java. util. List&lt;/code&gt; is unnecessary, and can be replaced with an import #loc</description>
</problem>
<problem>
<file>UnnecessaryFQNJavadoc.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.Map&lt;/code&gt; is unnecessary, and can be replaced with an import #loc</description>
</problem>
<problem>
<file>UnnecessaryFQNJavadoc.java</file>
<line>5</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>
@@ -2,21 +2,36 @@ package com.siyeh.ig.style;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.siyeh.ig.IGInspectionTestCase;
public class UnnecessaryFullyQualifiedNameInspectionTest extends IGInspectionTestCase {
public void test() throws Exception {
final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(getProject());
private static final String BASE_DIR = "com/siyeh/igtest/style/";
boolean inJavadoc = styleSettings.USE_FQ_CLASS_NAMES_IN_JAVADOC;
public void testFqnInJavadoc_Unnecessary_WhenFullyQualifyIfNotImported() throws Exception {
doTestWithFqnInJavadocSetting(BASE_DIR + "unnecessary_fully_qualified_name/", JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_IF_NOT_IMPORTED);
}
public void testFqnInJavadoc_Unnecessary_WhenShortNamesAlways() {
doTestWithFqnInJavadocSetting(BASE_DIR + "unnecessary_fully_qualified_name/", JavaCodeStyleSettings.SHORTEN_NAMES_ALWAYS_AND_ADD_IMPORT);
}
public void testAcceptFqnInJavadoc() {
doTestWithFqnInJavadocSetting(BASE_DIR + "unnecessary_fully_qualified_name_accept_in_javadoc/", JavaCodeStyleSettings.FULLY_QUALIFY_NAMES_ALWAYS);
}
private void doTestWithFqnInJavadocSetting(String dirPath, int classNamesInJavadoc) {
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject());
JavaCodeStyleSettings javaSettings = settings.getCustomSettings(JavaCodeStyleSettings.class);
int oldClassNamesInJavadoc = javaSettings.CLASS_NAMES_IN_JAVADOC;
try {
styleSettings.USE_FQ_CLASS_NAMES_IN_JAVADOC = false;
doTest("com/siyeh/igtest/style/unnecessary_fully_qualified_name",
new UnnecessaryFullyQualifiedNameInspection());
javaSettings.CLASS_NAMES_IN_JAVADOC = classNamesInJavadoc;
doTest(dirPath, new UnnecessaryFullyQualifiedNameInspection());
}
finally {
styleSettings.USE_FQ_CLASS_NAMES_IN_JAVADOC = inJavadoc;
javaSettings.CLASS_NAMES_IN_JAVADOC = oldClassNamesInJavadoc;
}
}
}