[FIR] Add proper rendering of FirJavaTypeRef
This commit is contained in:
committed by
TeamCityServer
parent
b31b293eef
commit
1fac1fc5d3
@@ -1,5 +1,5 @@
|
|||||||
public/*package*/ open class ArraysUtilJVM : R|kotlin/Any| {
|
public/*package*/ open class ArraysUtilJVM : R|kotlin/Any| {
|
||||||
public/*package*/ open static fun <T : R|ft<@FlexibleNullability kotlin/Any, kotlin/Any?>!|> asList(p0: ):
|
public/*package*/ open static fun <T : R|ft<@FlexibleNullability kotlin/Any, kotlin/Any?>!|> asList(p0: T[]): java.util.List<T>
|
||||||
|
|
||||||
public/*package*/ constructor(): R|kotlin/collections/ArraysUtilJVM|
|
public/*package*/ constructor(): R|kotlin/collections/ArraysUtilJVM|
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ import org.jetbrains.kotlin.fir.types.FirUserTypeRef
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
import org.jetbrains.kotlin.fir.visitors.transformInplace
|
import org.jetbrains.kotlin.fir.visitors.transformInplace
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.JavaArrayType
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.JavaClassifierType
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.JavaPrimitiveType
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaType
|
import org.jetbrains.kotlin.load.java.structure.JavaType
|
||||||
|
|
||||||
class FirJavaTypeRef(
|
class FirJavaTypeRef(
|
||||||
@@ -22,6 +25,9 @@ class FirJavaTypeRef(
|
|||||||
annotationBuilder: () -> List<FirAnnotationCall>,
|
annotationBuilder: () -> List<FirAnnotationCall>,
|
||||||
override val qualifier: MutableList<FirQualifierPart>
|
override val qualifier: MutableList<FirQualifierPart>
|
||||||
) : FirUserTypeRef(), FirAnnotationContainer {
|
) : FirUserTypeRef(), FirAnnotationContainer {
|
||||||
|
override val customRenderer: Boolean
|
||||||
|
get() = true
|
||||||
|
|
||||||
override val isMarkedNullable: Boolean
|
override val isMarkedNullable: Boolean
|
||||||
get() = false
|
get() = false
|
||||||
|
|
||||||
@@ -48,7 +54,10 @@ class FirJavaTypeRef(
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun replaceSource(newSource: FirSourceElement?) {
|
override fun replaceSource(newSource: FirSourceElement?) {}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return type.render()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,4 +74,17 @@ class FirJavaTypeRefBuilder {
|
|||||||
|
|
||||||
inline fun buildJavaTypeRef(init: FirJavaTypeRefBuilder.() -> Unit): FirJavaTypeRef {
|
inline fun buildJavaTypeRef(init: FirJavaTypeRefBuilder.() -> Unit): FirJavaTypeRef {
|
||||||
return FirJavaTypeRefBuilder().apply(init).build()
|
return FirJavaTypeRefBuilder().apply(init).build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun JavaType?.render(): String {
|
||||||
|
return when (this) {
|
||||||
|
is JavaArrayType -> "${componentType.render()}[]"
|
||||||
|
is JavaClassifierType -> if (typeArguments.isEmpty()) {
|
||||||
|
classifierQualifiedName
|
||||||
|
} else {
|
||||||
|
classifierQualifiedName + typeArguments.joinToString(separator = ", ", prefix = "<", postfix = ">") { it.render() }
|
||||||
|
}
|
||||||
|
is JavaPrimitiveType -> type?.typeName?.identifier ?: "void"
|
||||||
|
else -> toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ abstract class FirUserTypeRef : FirTypeRefWithNullability() {
|
|||||||
abstract override val annotations: List<FirAnnotationCall>
|
abstract override val annotations: List<FirAnnotationCall>
|
||||||
abstract override val isMarkedNullable: Boolean
|
abstract override val isMarkedNullable: Boolean
|
||||||
abstract val qualifier: List<FirQualifierPart>
|
abstract val qualifier: List<FirQualifierPart>
|
||||||
|
abstract val customRenderer: Boolean
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitUserTypeRef(this, data)
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitUserTypeRef(this, data)
|
||||||
|
|
||||||
|
|||||||
@@ -947,6 +947,10 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
|
|||||||
|
|
||||||
override fun visitUserTypeRef(userTypeRef: FirUserTypeRef) {
|
override fun visitUserTypeRef(userTypeRef: FirUserTypeRef) {
|
||||||
userTypeRef.annotations.renderAnnotations()
|
userTypeRef.annotations.renderAnnotations()
|
||||||
|
if (userTypeRef.customRenderer) {
|
||||||
|
print(userTypeRef.toString())
|
||||||
|
return
|
||||||
|
}
|
||||||
for ((index, qualifier) in userTypeRef.qualifier.withIndex()) {
|
for ((index, qualifier) in userTypeRef.qualifier.withIndex()) {
|
||||||
if (index != 0) {
|
if (index != 0) {
|
||||||
print(".")
|
print(".")
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ class FirUserTypeRefImpl(
|
|||||||
override val qualifier: MutableList<FirQualifierPart>,
|
override val qualifier: MutableList<FirQualifierPart>,
|
||||||
override val annotations: MutableList<FirAnnotationCall>
|
override val annotations: MutableList<FirAnnotationCall>
|
||||||
) : FirUserTypeRef(), FirAnnotationContainer {
|
) : FirUserTypeRef(), FirAnnotationContainer {
|
||||||
|
override val customRenderer: Boolean
|
||||||
|
get() = false
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
for (part in qualifier) {
|
for (part in qualifier) {
|
||||||
|
|||||||
+1
@@ -571,6 +571,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
|
|
||||||
userTypeRef.configure {
|
userTypeRef.configure {
|
||||||
+fieldList("qualifier", firQualifierPartType)
|
+fieldList("qualifier", firQualifierPartType)
|
||||||
|
+booleanField("customRenderer")
|
||||||
}
|
}
|
||||||
|
|
||||||
functionTypeRef.configure {
|
functionTypeRef.configure {
|
||||||
|
|||||||
Reference in New Issue
Block a user