mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
@@ -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);
|
||||
|
||||
+28
-2
@@ -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();
|
||||
|
||||
+5
-2
@@ -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
-1
@@ -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() {}
|
||||
}
|
||||
|
||||
+158
-5
@@ -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 '*'
|
||||
|
||||
+8
-8
@@ -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();
|
||||
}
|
||||
}
|
||||
+15
@@ -36,4 +36,19 @@
|
||||
<description>Fully qualified name <code>java. util. List</code> 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 <code>java.util.Map</code> 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 <code>java.util.HashMap</code> is unnecessary, and can be replaced with an import #loc</description>
|
||||
</problem>
|
||||
|
||||
|
||||
</problems>
|
||||
+22
-7
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user