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()
}