mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-11 02:39:37 +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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user