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.util.TextRange
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.jet.lang.descriptors.* 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.KotlinBinaryClassCache
import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader
import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.name.FqName
import org.jetbrains.jet.renderer.DescriptorRenderer import org.jetbrains.jet.renderer.DescriptorRenderer
import org.jetbrains.jet.renderer.DescriptorRendererBuilder 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.resolve.DescriptorUtils.isSyntheticClassObject
import org.jetbrains.jet.lang.types.error.MissingDependencyErrorClass import org.jetbrains.jet.lang.types.error.MissingDependencyErrorClass
import org.jetbrains.jet.lang.resolve.dataClassUtils.isComponentLike 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.types.isFlexible
import org.jetbrains.jet.lang.resolve.java.JvmAbi 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.isCompatiblePackageFacadeKind
import org.jetbrains.jet.lang.resolve.kotlin.header.isCompatibleClassKind 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 FILE_ABI_VERSION_MARKER: String = "FILE_ABI"
private val CURRENT_ABI_VERSION_MARKER: String = "CURRENT_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() public val descriptorRendererForDecompiler: DescriptorRenderer = DescriptorRendererBuilder()
.setWithDefinedIn(false) .setWithDefinedIn(false)
.setClassWithPrimaryConstructor(true) .setClassWithPrimaryConstructor(true)
.setTypeNormalizer(IdeDescriptorRenderers.APPROXIMATE_FLEXIBLE_TYPES) .setTypeNormalizer {
type ->
if (type.isFlexible()) {
type.flexibility().lowerBound
}
else type
}
.build() .build()
//TODO: should use more accurate way to identify descriptors //TODO: should use more accurate way to identify descriptors
@@ -152,8 +157,8 @@ private fun buildDecompiledText(packageFqName: FqName, descriptors: List<Declara
continue continue
} }
if (member is CallableMemberDescriptor if (member is CallableMemberDescriptor
&& member.getKind() != CallableMemberDescriptor.Kind.DECLARATION && member.getKind() != CallableMemberDescriptor.Kind.DECLARATION
&& !isComponentLike(member.getName())) { && !isComponentLike(member.getName())) {
continue continue
} }
@@ -4,9 +4,9 @@
package test package test
internal abstract class FlexibleTypes() { 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 */ }
} }