mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
completion should insert qualified names in javadoc according to the code style settings (IDEA-111023)
This commit is contained in:
+9
-2
@@ -24,7 +24,9 @@ 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.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.filters.FilterPositionUtil;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.javadoc.PsiDocTag;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
@@ -39,8 +41,6 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
|
||||
|
||||
@Override
|
||||
public void handleInsert(final InsertionContext context, final JavaPsiClassReferenceElement item) {
|
||||
final char c = context.getCompletionChar();
|
||||
|
||||
int offset = context.getTailOffset() - 1;
|
||||
final PsiFile file = context.getFile();
|
||||
if (PsiTreeUtil.findElementOfClassAtOffset(file, offset, PsiImportStatementBase.class, false) != null) {
|
||||
@@ -57,6 +57,7 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
|
||||
final Project project = context.getProject();
|
||||
|
||||
final Editor editor = context.getEditor();
|
||||
final char c = context.getCompletionChar();
|
||||
if (c == '#') {
|
||||
context.setLaterRunnable(new Runnable() {
|
||||
@Override
|
||||
@@ -68,6 +69,12 @@ 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) {
|
||||
AllClassesGetter.INSERT_FQN.handleInsert(context, item);
|
||||
return;
|
||||
}
|
||||
|
||||
if (position != null) {
|
||||
PsiElement parent = position.getParent();
|
||||
if (parent instanceof PsiJavaCodeReferenceElement) {
|
||||
|
||||
+20
-7
@@ -68,7 +68,7 @@ public class JavaDocCompletionContributor extends CompletionContributor {
|
||||
public JavaDocCompletionContributor() {
|
||||
extend(CompletionType.BASIC, PsiJavaPatterns.psiElement(JavaDocTokenType.DOC_TAG_NAME), new TagChooser());
|
||||
|
||||
extend(CompletionType.BASIC, PsiJavaPatterns.psiElement().inside(PsiDocTagValue.class), new CompletionProvider<CompletionParameters>() {
|
||||
extend(CompletionType.BASIC, PsiJavaPatterns.psiElement().inside(PsiDocComment.class), new CompletionProvider<CompletionParameters>() {
|
||||
@Override
|
||||
protected void addCompletions(@NotNull final CompletionParameters parameters, final ProcessingContext context, @NotNull final CompletionResultSet result) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
@@ -85,12 +85,7 @@ public class JavaDocCompletionContributor extends CompletionContributor {
|
||||
|
||||
for (final CompletionElement _item : processor.getResults()) {
|
||||
final Object element = _item.getElement();
|
||||
LookupItem item = element instanceof PsiMethod ? new JavaMethodCallElement((PsiMethod)element) {
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context) {
|
||||
new MethodSignatureInsertHandler().handleInsert(context, this);
|
||||
}
|
||||
} : (LookupItem)LookupItemUtil.objectToLookupItem(element);
|
||||
LookupItem item = createLookupItem(element);
|
||||
if (onlyConstants) {
|
||||
Object o = item.getObject();
|
||||
if (!(o instanceof PsiField)) continue;
|
||||
@@ -109,6 +104,24 @@ public class JavaDocCompletionContributor extends CompletionContributor {
|
||||
JavaCompletionContributor.addAllClasses(parameters, result, new InheritorsHolder(position, result));
|
||||
}
|
||||
}
|
||||
|
||||
private LookupItem createLookupItem(final Object element) {
|
||||
if (element instanceof PsiMethod) {
|
||||
return new JavaMethodCallElement((PsiMethod)element) {
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context) {
|
||||
new MethodSignatureInsertHandler().handleInsert(context, this);
|
||||
}
|
||||
};
|
||||
}
|
||||
if (element instanceof PsiClass) {
|
||||
JavaPsiClassReferenceElement classElement = new JavaPsiClassReferenceElement((PsiClass)element);
|
||||
classElement.setInsertHandler(JavaClassNameInsertHandler.JAVA_CLASS_INSERT_HANDLER);
|
||||
return classElement;
|
||||
}
|
||||
|
||||
return (LookupItem)LookupItemUtil.objectToLookupItem(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* {@link FileInputStr<caret>}
|
||||
*/
|
||||
|
||||
class Foo {
|
||||
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* {@link java.io.FileInputStream<caret>}
|
||||
*/
|
||||
|
||||
class Foo {
|
||||
|
||||
}
|
||||
+19
-18
@@ -21,6 +21,12 @@ import org.jetbrains.annotations.NotNull
|
||||
*/
|
||||
public class JavadocCompletionTest extends LightFixtureCompletionTestCase {
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = true
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBasePath() {
|
||||
return JavaTestUtil.getRelativeJavaTestDataPath() + "/codeInsight/completion/javadoc/";
|
||||
@@ -155,12 +161,7 @@ public class JavadocCompletionTest extends LightFixtureCompletionTestCase {
|
||||
|
||||
public void testShortenClassName() throws Throwable {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = false;
|
||||
try {
|
||||
doTest();
|
||||
}
|
||||
finally {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = true;
|
||||
}
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testMethodBeforeSharp() throws Throwable {
|
||||
@@ -171,12 +172,18 @@ public class JavadocCompletionTest extends LightFixtureCompletionTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testShortenClassReference() throws Throwable { doTest(); }
|
||||
public void testShortenClassReference() throws Throwable {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = false
|
||||
doTest()
|
||||
}
|
||||
public void testQualifiedClassReference() throws Throwable {
|
||||
configureByFile(getTestName(false) + ".java");
|
||||
myFixture.complete(CompletionType.BASIC, 2);
|
||||
checkResultByFile(getTestName(false) + "_after.java");
|
||||
}
|
||||
|
||||
public void testQualifiedImportedClassReference() throws Throwable { doTest() }
|
||||
|
||||
public void testThrowsNonImported() throws Throwable {
|
||||
configureByFile(getTestName(false) + ".java");
|
||||
myFixture.complete(CompletionType.BASIC, 2);
|
||||
@@ -269,10 +276,9 @@ class Impl extends Bar implements Foo {}
|
||||
|
||||
public void testShortenMethodParameterTypes() {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = false
|
||||
try {
|
||||
myFixture.addClass("package foo; public class Foo {}")
|
||||
myFixture.addClass("package bar; public class Bar {}")
|
||||
myFixture.configureByText "a.java", '''
|
||||
myFixture.addClass("package foo; public class Foo {}")
|
||||
myFixture.addClass("package bar; public class Bar {}")
|
||||
myFixture.configureByText "a.java", '''
|
||||
import foo.*;
|
||||
import bar.*;
|
||||
|
||||
@@ -281,13 +287,8 @@ import bar.*;
|
||||
*/
|
||||
class Goo { void goo(Foo foo, Bar bar) {} }
|
||||
'''
|
||||
myFixture.completeBasic()
|
||||
assert myFixture.editor.document.text.contains('@link #goo(Foo, Bar)')
|
||||
}
|
||||
finally {
|
||||
CodeStyleSettingsManager.getSettings(getProject()).USE_FQ_CLASS_NAMES_IN_JAVADOC = true
|
||||
}
|
||||
|
||||
myFixture.completeBasic()
|
||||
assert myFixture.editor.document.text.contains('@link #goo(Foo, Bar)')
|
||||
}
|
||||
|
||||
public void testCustomReferenceProvider() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user