format method according to javadoc rules (IDEA-69744 ) [roma]

(cherry picked from commit df32e7ef7079f182fefb2135b9213eed4df575c9)
This commit is contained in:
anna
2011-12-06 10:37:46 +01:00
parent 527df18788
commit 84e03a2c2b
3 changed files with 64 additions and 3 deletions
@@ -578,9 +578,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
if (classUrls != null) {
urls = new ArrayList<String>();
String signature = PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY,
PsiFormatUtil.SHOW_NAME | PsiFormatUtil.SHOW_PARAMETERS | PsiFormatUtil.SHOW_RAW_NON_TOP_TYPE,
PsiFormatUtil.SHOW_TYPE | PsiFormatUtil.SHOW_FQ_CLASS_NAMES | PsiFormatUtil.SHOW_RAW_NON_TOP_TYPE, 999);
String signature = formatMethodSignature(method);
for (String classUrl : classUrls) {
urls.add(classUrl + "#" + signature);
}
@@ -614,6 +612,13 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
}
}
public static String formatMethodSignature(PsiMethod method) {
return PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY,
PsiFormatUtil.SHOW_NAME | PsiFormatUtil.SHOW_PARAMETERS | PsiFormatUtil.SHOW_RAW_NON_TOP_TYPE,
PsiFormatUtil.SHOW_TYPE | PsiFormatUtil.SHOW_FQ_CLASS_NAMES | PsiFormatUtil.SHOW_RAW_NON_TOP_TYPE,
999);
}
@Nullable
public static List<String> findUrlForClass(PsiClass aClass) {
String qName = aClass.getQualifiedName();
@@ -0,0 +1,52 @@
/*
* Copyright 2000-2011 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.codeInsight;
import com.intellij.lang.java.JavaDocumentationProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
/**
* User: anna
* Date: 11/27/11
*/
public class ExternalJavadocUrlsTest extends LightCodeInsightFixtureTestCase {
private void doTest(String text, String... expectedSignature) {
myFixture.configureByText("Test.java", text);
final PsiElement elementAtCaret = myFixture.getElementAtCaret();
final PsiMethod member = PsiTreeUtil.getParentOfType(elementAtCaret, PsiMethod.class, false);
assertNotNull(member);
final String signature = JavaDocumentationProvider.formatMethodSignature(member);
assertNotNull(signature);
assertEquals("found:" + signature, expectedSignature[0], signature);
}
public void testVarargs() {
doTest("class Test {\n" +
" void fo<caret>o(Class<?>... cl){}\n" +
"}", "foo(java.lang.Class...)");
}
public void testTypeParams() {
doTest("class Test {\n" +
" <T> void so<caret>rt(T[] a, Comparator<? super T> c) {}\n" +
"}\n" +
" class Comparator<X>{}", "sort(T[], Comparator)");
}
}
@@ -346,7 +346,11 @@ public class PsiFormatUtil extends PsiFormatUtilBase {
type = TypeConversionUtil.erasure(type);
} else if ((options & SHOW_RAW_NON_TOP_TYPE) != 0) {
if (!(PsiUtil.resolveClassInType(type) instanceof PsiTypeParameter)) {
final boolean preserveEllipsis = type instanceof PsiEllipsisType;
type = TypeConversionUtil.erasure(type);
if (preserveEllipsis && type instanceof PsiArrayType) {
type = new PsiEllipsisType(((PsiArrayType)type).getComponentType());
}
}
}
return (options & SHOW_FQ_CLASS_NAMES) == 0 ? type.getPresentableText() : type.getInternalCanonicalText();