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:
+11
-6
@@ -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 */ }
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user