diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java index cf4b435dfa1..8553b8e7153 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java @@ -75,6 +75,11 @@ public interface DescriptorRenderer extends Renderer { .setWithDefinedIn(false) .setTextFormat(TextFormat.HTML).build(); + DescriptorRenderer HTML_NAMES_WITH_SHORT_TYPES = new DescriptorRendererBuilder() + .setWithDefinedIn(false) + .setShortNames(true) + .setTextFormat(TextFormat.HTML).build(); + DescriptorRenderer HTML = new DescriptorRendererBuilder().setTextFormat(TextFormat.HTML).build(); DescriptorRenderer HTML_FOR_UNINFERRED_TYPE_PARAMS = new DescriptorRendererBuilder() diff --git a/idea/src/org/jetbrains/jet/plugin/JetQuickDocumentationProvider.java b/idea/src/org/jetbrains/jet/plugin/JetQuickDocumentationProvider.java index ac7927aa7f0..6a748585caa 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetQuickDocumentationProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/JetQuickDocumentationProvider.java @@ -55,15 +55,15 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider return getText(element, originalElement, false); } - private static String getText(PsiElement element, PsiElement originalElement, boolean mergeKotlinAndJava) { + private static String getText(PsiElement element, PsiElement originalElement, boolean quickNavigation) { if (element instanceof JetDeclaration) { - return renderKotlinDeclaration((JetDeclaration) element); + return renderKotlinDeclaration((JetDeclaration) element, quickNavigation); } else if (element instanceof KotlinLightMethod) { - return renderKotlinDeclaration(((KotlinLightMethod) element).getOrigin()); + return renderKotlinDeclaration(((KotlinLightMethod) element).getOrigin(), quickNavigation); } - if (mergeKotlinAndJava) { + if (quickNavigation) { JetReferenceExpression referenceExpression = PsiTreeUtil.getParentOfType(originalElement, JetReferenceExpression.class, false); if (referenceExpression != null) { BindingContext context = AnalyzerFacadeWithCache.getContextForElement(referenceExpression); @@ -80,13 +80,17 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider return null; } - private static String renderKotlinDeclaration(JetDeclaration declaration) { + private static String renderKotlinDeclaration(JetDeclaration declaration, boolean quickNavigation) { BindingContext context = AnalyzerFacadeWithCache.getContextForElement(declaration); DeclarationDescriptor declarationDescriptor = context.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration); assert declarationDescriptor != null; - String renderedDecl = DescriptorRenderer.HTML.render(declarationDescriptor); + String renderedDecl = DescriptorRenderer.HTML_NAMES_WITH_SHORT_TYPES.render(declarationDescriptor); + if (!quickNavigation) { + renderedDecl = "
" + DescriptorRenderer.HTML_NAMES_WITH_SHORT_TYPES.render(declarationDescriptor) + "
"; + } + KDoc comment = findElementKDoc(declaration); if (comment != null) { renderedDecl = renderedDecl + "
" + kDocToHtml(comment); @@ -95,12 +99,13 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider return renderedDecl; } - private static String mixKotlinToJava(@NotNull DeclarationDescriptor declarationDescriptor, + private static String mixKotlinToJava( + @NotNull DeclarationDescriptor declarationDescriptor, PsiElement element, PsiElement originalElement ) { String originalInfo = new JavaDocumentationProvider().getQuickNavigateInfo(element, originalElement); if (originalInfo != null) { - String renderedDecl = DescriptorRenderer.HTML.render(declarationDescriptor); + String renderedDecl = DescriptorRenderer.HTML_NAMES_WITH_SHORT_TYPES.render(declarationDescriptor); return renderedDecl + "
Java declaration:
" + originalInfo; } diff --git a/idea/testData/editor/quickDoc/AtFunctionParameter.kt b/idea/testData/editor/quickDoc/AtFunctionParameter.kt index 5def645c9e7..0f6610a47c6 100644 --- a/idea/testData/editor/quickDoc/AtFunctionParameter.kt +++ b/idea/testData/editor/quickDoc/AtFunctionParameter.kt @@ -1,3 +1,3 @@ fun some(f: (Int) -> String) : String? = null -//INFO: value-parameter val f: (kotlin.Int) → kotlin.String defined in some \ No newline at end of file +// INFO: value-parameter val f: (Int) → String \ No newline at end of file diff --git a/idea/testData/editor/quickDoc/AtTypeParameter.kt b/idea/testData/editor/quickDoc/AtTypeParameter.kt index 05aa63998ab..646082ac249 100644 --- a/idea/testData/editor/quickDoc/AtTypeParameter.kt +++ b/idea/testData/editor/quickDoc/AtTypeParameter.kt @@ -2,4 +2,4 @@ trait Base class Some<T: Base> -//INFO: <T : Base> defined in Some \ No newline at end of file +// INFO: <T : Base> \ No newline at end of file diff --git a/idea/testData/editor/quickDoc/AtVariableDeclaration.kt b/idea/testData/editor/quickDoc/AtVariableDeclaration.kt index 21bae21da73..f0799b25abb 100644 --- a/idea/testData/editor/quickDoc/AtVariableDeclaration.kt +++ b/idea/testData/editor/quickDoc/AtVariableDeclaration.kt @@ -5,4 +5,4 @@ fun test() { } -//INFO: val test: kotlin.String? defined in test \ No newline at end of file +// INFO: val test: String? \ No newline at end of file diff --git a/idea/testData/editor/quickDoc/JavaClassUsedInKotlin.kt b/idea/testData/editor/quickDoc/JavaClassUsedInKotlin.kt index 06ec46b74f4..3ae4d72615a 100644 --- a/idea/testData/editor/quickDoc/JavaClassUsedInKotlin.kt +++ b/idea/testData/editor/quickDoc/JavaClassUsedInKotlin.kt @@ -2,4 +2,4 @@ fun testing() { SomeClass>() } -// INFO: public constructor SomeClass<T : kotlin.List<kotlin.Any?>?>() defined in SomeClass
Java declaration:
[light_idea_test_case] public class SomeClass<T extends java.util.List> extends Object \ No newline at end of file +// INFO: public constructor SomeClass<T : List<Any?>?>()
Java declaration:
[light_idea_test_case] public class SomeClass<T extends java.util.List> extends Object \ No newline at end of file diff --git a/idea/testData/editor/quickDoc/JavaMethodUsedInKotlin.kt b/idea/testData/editor/quickDoc/JavaMethodUsedInKotlin.kt index 17b51252d38..9020cdda241 100644 --- a/idea/testData/editor/quickDoc/JavaMethodUsedInKotlin.kt +++ b/idea/testData/editor/quickDoc/JavaMethodUsedInKotlin.kt @@ -2,4 +2,4 @@ fun ktTest() { Test.foo("SomeTest") } -//INFO: public open fun foo(param: kotlin.String): kotlin.Array<out kotlin.Any> defined in Test
Java declaration:
Test... \ No newline at end of file +// INFO: public open fun foo(param: String): Array<out Any>
Java declaration:
Test... \ No newline at end of file diff --git a/idea/testData/editor/quickDoc/MethodFromStdLib.kt b/idea/testData/editor/quickDoc/MethodFromStdLib.kt index 05f97aa117e..fb877444ad4 100644 --- a/idea/testData/editor/quickDoc/MethodFromStdLib.kt +++ b/idea/testData/editor/quickDoc/MethodFromStdLib.kt @@ -2,4 +2,4 @@ fun test() { listOf(1, 2, 4).filter { it > 0 } } -// INFO: kotlin.inline public fun <T> kotlin.Iterable<T>.filter(predicate: (T) → kotlin.Boolean): kotlin.List<T> defined in kotlin

Returns a list containing all elements matching the given *predicate*

+// INFO: inline public fun <T> Iterable<T>.filter(predicate: (T) → Boolean): List<T>

Returns a list containing all elements matching the given *predicate*

diff --git a/idea/testData/editor/quickDoc/OnClassDeclarationWithNoPackage.kt b/idea/testData/editor/quickDoc/OnClassDeclarationWithNoPackage.kt index 2364066228c..f239fcee906 100644 --- a/idea/testData/editor/quickDoc/OnClassDeclarationWithNoPackage.kt +++ b/idea/testData/editor/quickDoc/OnClassDeclarationWithNoPackage.kt @@ -3,4 +3,4 @@ */ class Some -// INFO: internal final class Some defined in root package

Usefull comment

\ No newline at end of file +// INFO: internal final class Some

Usefull comment

\ No newline at end of file diff --git a/idea/testData/editor/quickDoc/OnFunctionDeclarationWithPackage.kt b/idea/testData/editor/quickDoc/OnFunctionDeclarationWithPackage.kt index ccb1b506231..86883cd7356 100644 --- a/idea/testData/editor/quickDoc/OnFunctionDeclarationWithPackage.kt +++ b/idea/testData/editor/quickDoc/OnFunctionDeclarationWithPackage.kt @@ -12,4 +12,4 @@ package test */ fun testFun(first: String, second: Int) = 12 -// INFO: internal fun testFun(first: kotlin.String, second: kotlin.Int): kotlin.Int defined in test

Test function


@param - first - Some
@param - second - Other

\ No newline at end of file +// INFO: internal fun testFun(first: String, second: Int): Int

Test function


@param - first - Some
@param - second - Other

\ No newline at end of file diff --git a/idea/testData/editor/quickDoc/OnMethodUsage.kt b/idea/testData/editor/quickDoc/OnMethodUsage.kt index 9d0a498b800..8aef1353133 100644 --- a/idea/testData/editor/quickDoc/OnMethodUsage.kt +++ b/idea/testData/editor/quickDoc/OnMethodUsage.kt @@ -12,4 +12,4 @@ fun test() { testMethod(1, "value") } -// INFO: internal fun testMethod(a: kotlin.Int, b: kotlin.String): kotlin.Unit defined in root package

Some documentation

@param - a - Some int
@param - b: String

\ No newline at end of file +// INFO: internal fun testMethod(a: Int, b: String): Unit

Some documentation

@param - a - Some int
@param - b: String

\ No newline at end of file diff --git a/idea/testData/editor/quickDoc/TopLevelMethodFromJava.java b/idea/testData/editor/quickDoc/TopLevelMethodFromJava.java index dd9f4787d0c..d7ddf7007fd 100644 --- a/idea/testData/editor/quickDoc/TopLevelMethodFromJava.java +++ b/idea/testData/editor/quickDoc/TopLevelMethodFromJava.java @@ -8,4 +8,4 @@ class Testing { } } -// INFO: internal fun foo(bar: kotlin.Int): kotlin.Unit defined in some

KDoc foo

\ No newline at end of file +// INFO: internal fun foo(bar: Int): Unit

KDoc foo

\ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/editor/quickDoc/AbstractJetQuickDocProviderTest.java b/idea/tests/org/jetbrains/jet/editor/quickDoc/AbstractJetQuickDocProviderTest.java index 8884706d44d..c9fd0d37b24 100644 --- a/idea/tests/org/jetbrains/jet/editor/quickDoc/AbstractJetQuickDocProviderTest.java +++ b/idea/tests/org/jetbrains/jet/editor/quickDoc/AbstractJetQuickDocProviderTest.java @@ -16,9 +16,6 @@ package org.jetbrains.jet.editor.quickDoc; -import com.google.common.base.Predicates; -import com.google.common.collect.Collections2; -import com.google.common.collect.Lists; import com.intellij.codeInsight.documentation.DocumentationManager; import com.intellij.codeInsight.navigation.CtrlMouseHandler; import com.intellij.openapi.util.io.FileUtil; @@ -27,17 +24,13 @@ import com.intellij.psi.PsiElement; import com.intellij.rt.execution.junit.FileComparisonFailure; import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; -import com.intellij.util.ArrayUtil; -import junit.framework.Assert; -import junit.framework.ComparisonFailure; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.InTextDirectivesUtils; import org.jetbrains.jet.plugin.ProjectDescriptorWithStdlibSources; import org.jetbrains.jet.test.util.UtilPackage; +import org.junit.Assert; import java.io.File; -import java.util.Collection; import java.util.List; public abstract class AbstractJetQuickDocProviderTest extends LightCodeInsightFixtureTestCase { @@ -64,16 +57,18 @@ public abstract class AbstractJetQuickDocProviderTest extends LightCodeInsightFi testDataFile.getAbsolutePath()); } else if (directives.size() == 1) { + assertNotNull(info); + String expectedInfo = directives.get(0); // We can avoid testing for too long comments with \n character by placing '...' in test data - if (info != null && expectedInfo.endsWith("...")) { + if (expectedInfo.endsWith("...")) { if (!info.startsWith(StringUtil.trimEnd(expectedInfo, "..."))) { - throw new ComparisonFailure(null, expectedInfo, info); + wrapToFileComparisonFailure(info, path, textData); } } - else { - Assert.assertEquals(expectedInfo, info); + else if (!expectedInfo.equals(info)) { + wrapToFileComparisonFailure(info, path, textData); } } else { @@ -81,6 +76,17 @@ public abstract class AbstractJetQuickDocProviderTest extends LightCodeInsightFi } } + private static void wrapToFileComparisonFailure(String info, String filePath, String fileData) { + int newLineIndex = info.indexOf('\n'); + if (newLineIndex != -1) { + info = info.substring(0, newLineIndex) + "..."; + } + + String correctedFileText = fileData.replaceFirst("//\\s?INFO: .*", "// INFO: " + info); + throw new FileComparisonFailure("Unexpected info", fileData, correctedFileText, new File(filePath).getAbsolutePath()); + } + + @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() {