From a16d50baa65880b07ce6a2a34314726dfb9607d2 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 7 Jan 2014 22:07:09 +0100 Subject: [PATCH] IDEA-118970 (external URL formatting for Javadoc 8) --- .../lang/java/JavaDocumentationProvider.java | 10 +++- .../codeInsight/ExternalJavadocUrls7Test.java | 48 +++++++++++++++++++ .../codeInsight/ExternalJavadocUrlsTest.java | 12 ++--- 3 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 java/java-tests/testSrc/com/intellij/codeInsight/ExternalJavadocUrls7Test.java diff --git a/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java b/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java index d6ee9a529c8d..1a93b8c234b2 100644 --- a/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java +++ b/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java @@ -49,6 +49,7 @@ import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.psi.util.PsiFormatUtil; import com.intellij.psi.util.PsiFormatUtilBase; +import com.intellij.psi.util.PsiUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import org.jetbrains.annotations.NonNls; @@ -639,7 +640,14 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext options |= PsiFormatUtilBase.SHOW_RAW_NON_TOP_TYPE; parameterOptions |= PsiFormatUtilBase.SHOW_RAW_NON_TOP_TYPE; } - return PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY, options, parameterOptions, 999); + + String signature = PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY, options, parameterOptions, 999); + + if (PsiUtil.isLanguageLevel8OrHigher(method)) { + signature = signature.replaceAll("\\(|\\)|, ", "-").replaceAll("\\[\\]", ":A"); + } + + return signature; } @Nullable diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/ExternalJavadocUrls7Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/ExternalJavadocUrls7Test.java new file mode 100644 index 000000000000..dce86df31fa3 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/codeInsight/ExternalJavadocUrls7Test.java @@ -0,0 +1,48 @@ +/* + * Copyright 2000-2014 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.testFramework.LightProjectDescriptor; +import org.jetbrains.annotations.NotNull; + +public class ExternalJavadocUrls7Test extends ExternalJavadocUrlsTest { + @NotNull + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return JAVA_1_7; + } + + @Override + public void testVarargs() { + doTest("class Test {\n" + + " void foo(Class... cl) { }\n" + + "}", + + "foo(java.lang.Class...)", "foo(java.lang.Class...)" + ); + } + + @Override + public void testTypeParams() { + doTest("class Test {\n" + + " void sort(T[] a, Comparator c) { }\n" + + "}\n" + + "class Comparator{}", + + "sort(T[], Comparator)", "sort(T[], Comparator)" + ); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/ExternalJavadocUrlsTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/ExternalJavadocUrlsTest.java index 556837eeda7f..28fb79a594ed 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/ExternalJavadocUrlsTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/ExternalJavadocUrlsTest.java @@ -26,15 +26,11 @@ import com.intellij.util.containers.ContainerUtil; import java.util.List; -/** - * @author anna - * @since 11/27/11 - */ public class ExternalJavadocUrlsTest extends LightCodeInsightFixtureTestCase { @Override protected void setUp() throws Exception { super.setUp(); - PsiTestUtil.setJavadocUrls(myModule, "http://doc"); + PsiTestUtil.setJavadocUrls(myModule, "http://doc" ); } public void testVarargs() { @@ -42,7 +38,7 @@ public class ExternalJavadocUrlsTest extends LightCodeInsightFixtureTestCase { " void foo(Class... cl) { }\n" + "}", - "foo(java.lang.Class...)", "foo(java.lang.Class...)"); + "foo-java.lang.Class...-", "foo-java.lang.Class...-"); } @@ -52,10 +48,10 @@ public class ExternalJavadocUrlsTest extends LightCodeInsightFixtureTestCase { "}\n" + "class Comparator{}", - "sort(T[], Comparator)", "sort(T[], Comparator)"); + "sort-T:A-Comparator-", "sort-T:A-Comparator-"); } - private void doTest(String text, String... expected) { + protected void doTest(String text, String... expected) { myFixture.configureByText("Test.java", text); PsiElement elementAtCaret = myFixture.getElementAtCaret(); PsiMethod member = PsiTreeUtil.getParentOfType(elementAtCaret, PsiMethod.class, false);