From 89c5549b0a74a044051d4da11c3a10a0b3f1ab25 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 5 Feb 2019 18:12:46 +0300 Subject: [PATCH] Refactoring: extract urls to separate class and remove long strings --- .idea/dictionaries/Nikolay_Krasko.xml | 2 ++ .../idea/KotlinQuickDocumentationProvider.kt | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/.idea/dictionaries/Nikolay_Krasko.xml b/.idea/dictionaries/Nikolay_Krasko.xml index 97c56608a7b..3ad9cc2cc0a 100644 --- a/.idea/dictionaries/Nikolay_Krasko.xml +++ b/.idea/dictionaries/Nikolay_Krasko.xml @@ -10,6 +10,7 @@ infos intrinsics kdoc + lateinit memoize memoized multiline @@ -23,6 +24,7 @@ subclassed subgraph substep + tailrec \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt index 64bbe108eff..045919dd140 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt @@ -31,6 +31,8 @@ import com.intellij.psi.PsiWhiteSpace import org.jetbrains.kotlin.asJava.LightClassUtil import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.idea.DocumentationURLs.LATE_INITIALIZED_PROPERTIES_AND_VARIABLES_URL +import org.jetbrains.kotlin.idea.DocumentationURLs.TAIL_RECURSIVE_FUNCTIONS_URL import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny @@ -63,6 +65,14 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.addToStdlib.constant import org.jetbrains.kotlin.utils.addToStdlib.safeAs +private object DocumentationURLs { + const val LATE_INITIALIZED_PROPERTIES_AND_VARIABLES_URL = + "http://kotlinlang.org/docs/reference/properties.html#late-initialized-properties-and-variables" + + const val TAIL_RECURSIVE_FUNCTIONS_URL = + "http://kotlinlang.org/docs/reference/functions.html#tail-recursive-functions" +} + class HtmlClassifierNamePolicy(val base: ClassifierNamePolicy) : ClassifierNamePolicy { override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String { if (DescriptorUtils.isAnonymousObject(classifier)) { @@ -281,8 +291,17 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { return renderKotlinDeclaration(origin, quickNavigation) } else if (element.isModifier()) { when(element.text) { - KtTokens.LATEINIT_KEYWORD.value -> return """lateinit allows initializing a non-null property outside of a constructor""" - KtTokens.TAILREC_KEYWORD.value -> return """tailrec marks a function as tail-recursive (allowing the compiler to replace recursion with iteration)""" + KtTokens.LATEINIT_KEYWORD.value -> { + return "lateinit allows initializing a ${a( + LATE_INITIALIZED_PROPERTIES_AND_VARIABLES_URL, + "non-null property outside of a constructor" + )}" + } + + KtTokens.TAILREC_KEYWORD.value -> { + return "tailrec marks a function as ${a(TAIL_RECURSIVE_FUNCTIONS_URL, "tail-recursive")} " + + "(allowing the compiler to replace recursion with iteration)" + } } } @@ -383,7 +402,6 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { } } - private fun StringBuilder.renderDefinition(descriptor: DeclarationDescriptor, renderer: DescriptorRenderer) { if (!DescriptorUtils.isLocal(descriptor)) { val containingDeclaration = descriptor.containingDeclaration @@ -469,6 +487,10 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { wrap("<$tag>", "", body) } + private fun a(url: String, text: String): String { + return """$text""" + } + private fun mixKotlinToJava( declarationDescriptor: DeclarationDescriptor, element: PsiElement,