do not replace fqns in javadoc in package-info; do not shorten fqns on completion in javadoc inside package-info (IDEA-128445)

This commit is contained in:
Anna Kozlova
2014-08-13 16:42:22 +04:00
parent 40658f89c0
commit 2b71cf33a5
8 changed files with 68 additions and 18 deletions
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.TailType;
import com.intellij.codeInsight.completion.scope.CompletionElement;
import com.intellij.codeInsight.completion.scope.JavaCompletionProcessor;
import com.intellij.codeInsight.editorActions.wordSelection.DocTagSelectioner;
import com.intellij.codeInsight.javadoc.JavaDocUtil;
import com.intellij.codeInsight.lookup.*;
import com.intellij.codeInspection.InspectionProfile;
import com.intellij.codeInspection.SuppressionUtil;
@@ -391,16 +392,19 @@ public class JavaDocCompletionContributor extends CompletionContributor {
private static void shortenReferences(final Project project, final Editor editor, InsertionContext context, int offset) {
PsiDocumentManager.getInstance(project).commitDocument(editor.getDocument());
final PsiElement element = context.getFile().findElementAt(offset);
final PsiDocTagValue tagValue = PsiTreeUtil.getParentOfType(element, PsiDocTagValue.class);
if (tagValue != null) {
try {
JavaCodeStyleManager.getInstance(project).shortenClassReferences(tagValue);
}
catch (IncorrectOperationException e) {
LOG.error(e);
final PsiDocComment docComment = PsiTreeUtil.getParentOfType(element, PsiDocComment.class);
if (!JavaDocUtil.isInsidePackageInfo(docComment)) {
final PsiDocTagValue tagValue = PsiTreeUtil.getParentOfType(element, PsiDocTagValue.class);
if (tagValue != null) {
try {
JavaCodeStyleManager.getInstance(project).shortenClassReferences(tagValue);
}
catch (IncorrectOperationException e) {
LOG.error(e);
}
}
PsiDocumentManager.getInstance(context.getProject()).commitAllDocuments();
}
PsiDocumentManager.getInstance(context.getProject()).commitAllDocuments();
}
}
}
@@ -19,6 +19,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.IncorrectOperationException;
@@ -363,4 +364,8 @@ public class JavaDocUtil {
return list == null ? PsiClassType.EMPTY_ARRAY : list.getReferencedTypes();
}
public static boolean isInsidePackageInfo(@Nullable PsiDocComment containingComment) {
return containingComment != null && containingComment.getOwner() == null && containingComment.getParent() instanceof PsiJavaFile;
}
}
@@ -15,6 +15,7 @@
*/
package com.intellij.psi.impl.source;
import com.intellij.codeInsight.javadoc.JavaDocUtil;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
@@ -162,7 +163,7 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
i == JavaDocElementType.DOC_REFERENCE_HOLDER ||
i == JavaDocElementType.DOC_TYPE_HOLDER) {
PsiDocComment docComment = PsiTreeUtil.getParentOfType(this, PsiDocComment.class);
if (docComment != null && docComment.getOwner() == null && docComment.getParent() instanceof PsiJavaFile) {
if (JavaDocUtil.isInsidePackageInfo(docComment)) {
return CLASS_FQ_OR_PACKAGE_NAME_KIND;
}
@@ -229,6 +229,20 @@ class Foo {
myFixture.assertPreferredCompletionItems 0, 'param', 'param param2'
}
public void "test fqns in package info"() {
myFixture.configureByText "package-info.java", '''
/**
* {@link java.util.Map#putA<caret>}
*/
'''
myFixture.complete(CompletionType.BASIC)
myFixture.checkResult '''
/**
* {@link java.util.Map#putAll(java.util.Map)}
*/
'''
}
public void "test suggest same param descriptions"() {
myFixture.configureByText "a.java", '''
class Foo {
@@ -15,6 +15,7 @@
*/
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;
@@ -205,11 +206,8 @@ public class UnnecessaryFullyQualifiedNameInspection extends BaseInspection impl
return;
}
final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(reference.getProject());
if (styleSettings.USE_FQ_CLASS_NAMES_IN_JAVADOC) {
final PsiElement containingComment = PsiTreeUtil.getParentOfType(reference, PsiDocComment.class);
if (containingComment != null) {
return;
}
if (acceptFullyQualifiedNamesInJavadoc(reference, styleSettings)) {
return;
}
final PsiFile containingFile = reference.getContainingFile();
if (!(containingFile instanceof PsiJavaFile)) {
@@ -261,4 +259,14 @@ 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;
}
}
return false;
}
}
@@ -0,0 +1,3 @@
/**
* {@link java.util.Map(java.util.function.BiConsumer)}
*/
@@ -1,11 +1,22 @@
package com.siyeh.ig.style;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.siyeh.ig.IGInspectionTestCase;
public class UnnecessaryFullyQualifiedNameInspectionTest extends IGInspectionTestCase {
public void test() throws Exception {
doTest("com/siyeh/igtest/style/unnecessary_fully_qualified_name",
new UnnecessaryFullyQualifiedNameInspection());
final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(getProject());
boolean inJavadoc = styleSettings.USE_FQ_CLASS_NAMES_IN_JAVADOC;
try {
styleSettings.USE_FQ_CLASS_NAMES_IN_JAVADOC = false;
doTest("com/siyeh/igtest/style/unnecessary_fully_qualified_name",
new UnnecessaryFullyQualifiedNameInspection());
}
finally {
styleSettings.USE_FQ_CLASS_NAMES_IN_JAVADOC = inJavadoc;
}
}
}
@@ -21,6 +21,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.siyeh.ig.psiutils.ImportUtils;
import com.siyeh.ig.style.UnnecessaryFullyQualifiedNameInspection;
import com.siyeh.ipp.base.PsiElementPredicate;
class FullyQualifiedNamePredicate implements PsiElementPredicate {
@@ -40,6 +41,11 @@ class FullyQualifiedNamePredicate implements PsiElementPredicate {
if (PsiTreeUtil.getParentOfType(element, PsiImportStatementBase.class, PsiPackageStatement.class, JavaCodeFragment.class) != null) {
return false;
}
final Project project = element.getProject();
final CodeStyleSettings codeStyleSettings = CodeStyleSettingsManager.getSettings(project);
if (UnnecessaryFullyQualifiedNameInspection.acceptFullyQualifiedNamesInJavadoc(referenceElement, codeStyleSettings)) {
return false;
}
final PsiElement qualifier = referenceElement.getQualifier();
if (!(qualifier instanceof PsiJavaCodeReferenceElement)) {
return false;
@@ -50,8 +56,6 @@ class FullyQualifiedNamePredicate implements PsiElementPredicate {
if (!(resolved instanceof PsiClass)) {
return false;
}
final Project project = element.getProject();
final CodeStyleSettings codeStyleSettings = CodeStyleSettingsManager.getSettings(project);
if (!codeStyleSettings.INSERT_INNER_CLASS_IMPORTS) {
return false;
}