DecompiledTextFactory: use own implementation of type normalizer

Do not rely on IDE utils
This makes implementing cls stub builder easier
This commit is contained in:
Pavel V. Talanov
2014-12-01 21:01:46 +03:00
parent 41f2c71081
commit d0479aa61b
2 changed files with 14 additions and 9 deletions
@@ -19,9 +19,7 @@ package org.jetbrains.jet.plugin.decompiler.textBuilder
import com.intellij.openapi.util.TextRange
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.jet.lang.descriptors.*
import org.jetbrains.jet.lang.resolve.MemberComparator
import org.jetbrains.jet.lang.resolve.kotlin.KotlinBinaryClassCache
import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader
import org.jetbrains.jet.lang.resolve.name.FqName
import org.jetbrains.jet.renderer.DescriptorRenderer
import org.jetbrains.jet.renderer.DescriptorRendererBuilder
@@ -30,11 +28,11 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumEntry
import org.jetbrains.jet.lang.resolve.DescriptorUtils.isSyntheticClassObject
import org.jetbrains.jet.lang.types.error.MissingDependencyErrorClass
import org.jetbrains.jet.lang.resolve.dataClassUtils.isComponentLike
import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers
import org.jetbrains.jet.lang.types.isFlexible
import org.jetbrains.jet.lang.resolve.java.JvmAbi
import org.jetbrains.jet.lang.resolve.kotlin.header.isCompatiblePackageFacadeKind
import org.jetbrains.jet.lang.resolve.kotlin.header.isCompatibleClassKind
import org.jetbrains.jet.lang.types.flexibility
private val FILE_ABI_VERSION_MARKER: String = "FILE_ABI"
private val CURRENT_ABI_VERSION_MARKER: String = "CURRENT_ABI"
@@ -79,7 +77,14 @@ private val FLEXIBLE_TYPE_COMMENT = "/* platform type */"
public val descriptorRendererForDecompiler: DescriptorRenderer = DescriptorRendererBuilder()
.setWithDefinedIn(false)
.setClassWithPrimaryConstructor(true)
.setTypeNormalizer(IdeDescriptorRenderers.APPROXIMATE_FLEXIBLE_TYPES)
.setTypeNormalizer {
type ->
if (type.isFlexible()) {
type.flexibility().lowerBound
}
else type
}
.build()
//TODO: should use more accurate way to identify descriptors
@@ -152,8 +157,8 @@ private fun buildDecompiledText(packageFqName: FqName, descriptors: List<Declara
continue
}
if (member is CallableMemberDescriptor
&& member.getKind() != CallableMemberDescriptor.Kind.DECLARATION
&& !isComponentLike(member.getName())) {
&& member.getKind() != CallableMemberDescriptor.Kind.DECLARATION
&& !isComponentLike(member.getName())) {
continue
}
@@ -4,9 +4,9 @@
package test
internal abstract class FlexibleTypes() {
internal abstract val p: kotlin.Int? /* platform type */
internal abstract val p: kotlin.Int /* platform type */
internal abstract fun collection(): kotlin.List<kotlin.Any> /* platform type */
internal abstract fun collection(): kotlin.List<kotlin.Int> /* platform type */
internal final fun withBody(): kotlin.Int? /* platform type */ { /* compiled code */ }
internal final fun withBody(): kotlin.Int /* platform type */ { /* compiled code */ }
}