From 55b898167b0408fa203b45df4270512014c323b7 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 5 Jun 2015 16:45:12 +0300 Subject: [PATCH] DescriptorRendererImpl made internal + minor improvements --- .../rendering/DiagnosticRendererUtil.kt | 8 +- .../kotlin/renderer/DescriptorRenderer.kt | 19 +++- .../kotlin/renderer/DescriptorRendererImpl.kt | 95 ++++++++----------- 3 files changed, 56 insertions(+), 66 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt index a1215c4f7e7..9711dead0df 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt @@ -16,12 +16,12 @@ package org.jetbrains.kotlin.diagnostics.rendering -import org.jetbrains.kotlin.renderer.Renderer import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.renderer.DescriptorRendererImpl +import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.renderer.Renderer public fun

renderParameter(parameter: P, renderer: Renderer

?): Any = renderer?.render(parameter) ?: parameter -public fun ClassDescriptor.renderKindWithName(): String = "${DescriptorRendererImpl.getClassKindPrefix(this)} '${getName()}'" +public fun ClassDescriptor.renderKindWithName(): String = DescriptorRenderer.getClassKindPrefix(this) + " '" + getName() + "'" -public fun ClassDescriptor.renderKind(): String = DescriptorRendererImpl.getClassKindPrefix(this) +public fun ClassDescriptor.renderKind(): String = DescriptorRenderer.getClassKindPrefix(this) diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt index 149348b581c..b250566f30a 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt @@ -16,10 +16,7 @@ package org.jetbrains.kotlin.renderer -import org.jetbrains.kotlin.descriptors.ClassifierDescriptor -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqNameBase @@ -198,6 +195,20 @@ public interface DescriptorRenderer : Renderer { renderDefaultValues = false startFromName = true } + + public fun getClassKindPrefix(klass: ClassDescriptor): String { + if (klass.isCompanionObject()) { + return "companion object" + } + return when (klass.getKind()) { + ClassKind.CLASS -> "class" + ClassKind.INTERFACE -> "interface" + ClassKind.ENUM_CLASS -> "enum class" + ClassKind.OBJECT -> "object" + ClassKind.ANNOTATION_CLASS -> "annotation class" + ClassKind.ENUM_ENTRY -> "enum entry" + } + } } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index c612b3cd8b1..e4d15c558e8 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -38,8 +38,8 @@ import java.util.* import org.jetbrains.kotlin.resolve.DescriptorUtils.isCompanionObject import org.jetbrains.kotlin.types.TypeUtils.CANT_INFER_FUNCTION_PARAM_TYPE -public/*TODO*/ class DescriptorRendererImpl internal constructor( - public val options: DescriptorRendererOptionsImpl +internal class DescriptorRendererImpl( + val options: DescriptorRendererOptionsImpl ) : DescriptorRenderer, DescriptorRendererOptions by options/* this gives access to options without qualifier */ { init { @@ -815,7 +815,7 @@ public/*TODO*/ class DescriptorRendererImpl internal constructor( } private fun renderClassKindPrefix(klass: ClassDescriptor, builder: StringBuilder) { - builder.append(renderKeyword(getClassKindPrefix(klass))) + builder.append(renderKeyword(DescriptorRenderer.getClassKindPrefix(klass))) } @@ -928,61 +928,40 @@ public/*TODO*/ class DescriptorRendererImpl internal constructor( } } - companion object { - - private fun renderSpaceIfNeeded(builder: StringBuilder) { - val length = builder.length() - if (length == 0 || builder.charAt(length - 1) != ' ') { - builder.append(' ') - } - } - - private fun nameShouldBeEscaped(identifier: Name): Boolean { - if (identifier.isSpecial()) return false - - val name = identifier.asString() - - if (KeywordStringsGenerated.KEYWORDS.contains(name)) return true - - for (i in 0..name.length() - 1) { - val c = name.charAt(i) - if (!Character.isLetterOrDigit(c) && c != '_') return true - } - - return false - } - - private fun replacePrefixes(lowerRendered: String, lowerPrefix: String, upperRendered: String, upperPrefix: String, foldedPrefix: String): String? { - if (lowerRendered.startsWith(lowerPrefix) && upperRendered.startsWith(upperPrefix)) { - val lowerWithoutPrefix = lowerRendered.substring(lowerPrefix.length()) - if (differsOnlyInNullability(lowerWithoutPrefix, upperRendered.substring(upperPrefix.length()))) { - return foldedPrefix + lowerWithoutPrefix + "!" - } - } - return null - } - - private fun differsOnlyInNullability(lower: String, upper: String): Boolean { - return lower == upper.replace("?", "") || upper.endsWith("?") && ((lower + "?") == upper) || (("(" + lower + ")?") == upper) - } - - private fun overridesSomething(callable: CallableMemberDescriptor): Boolean { - return !callable.getOverriddenDescriptors().isEmpty() - } - - public fun getClassKindPrefix(klass: ClassDescriptor): String { - if (klass.isCompanionObject()) { - return "companion object" - } - when (klass.getKind()) { - ClassKind.CLASS -> return "class" - ClassKind.INTERFACE -> return "interface" - ClassKind.ENUM_CLASS -> return "enum class" - ClassKind.OBJECT -> return "object" - ClassKind.ANNOTATION_CLASS -> return "annotation class" - ClassKind.ENUM_ENTRY -> return "enum entry" - else -> throw IllegalStateException("unknown class kind: " + klass.getKind()) - } + private fun renderSpaceIfNeeded(builder: StringBuilder) { + val length = builder.length() + if (length == 0 || builder.charAt(length - 1) != ' ') { + builder.append(' ') } } + + private fun nameShouldBeEscaped(identifier: Name): Boolean { + if (identifier.isSpecial()) return false + + val name = identifier.asString() + + if (KeywordStringsGenerated.KEYWORDS.contains(name)) return true + + for (i in 0..name.length() - 1) { + val c = name.charAt(i) + if (!Character.isLetterOrDigit(c) && c != '_') return true + } + + return false + } + + private fun replacePrefixes(lowerRendered: String, lowerPrefix: String, upperRendered: String, upperPrefix: String, foldedPrefix: String): String? { + if (lowerRendered.startsWith(lowerPrefix) && upperRendered.startsWith(upperPrefix)) { + val lowerWithoutPrefix = lowerRendered.substring(lowerPrefix.length()) + if (differsOnlyInNullability(lowerWithoutPrefix, upperRendered.substring(upperPrefix.length()))) { + return foldedPrefix + lowerWithoutPrefix + "!" + } + } + return null + } + + private fun differsOnlyInNullability(lower: String, upper: String) + = lower == upper.replace("?", "") || upper.endsWith("?") && ("$lower?") == upper || "($lower)?" == upper + + private fun overridesSomething(callable: CallableMemberDescriptor) = !callable.getOverriddenDescriptors().isEmpty() }