Decompiler: do not try to render function types with star projections prettily
This commit is contained in:
+1
-1
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.psi.stubs.impl.KotlinFileStubImpl;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class JetFileElementType extends IStubFileElementType<KotlinFileStub> {
|
public class JetFileElementType extends IStubFileElementType<KotlinFileStub> {
|
||||||
public static final int STUB_VERSION = 48;
|
public static final int STUB_VERSION = 49;
|
||||||
|
|
||||||
private static final String NAME = "kotlin.FILE";
|
private static final String NAME = "kotlin.FILE";
|
||||||
|
|
||||||
|
|||||||
@@ -199,7 +199,8 @@ internal class DescriptorRendererImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun shouldRenderAsPrettyFunctionType(type: JetType): Boolean {
|
private fun shouldRenderAsPrettyFunctionType(type: JetType): Boolean {
|
||||||
return KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(type) && prettyFunctionTypes
|
return prettyFunctionTypes && KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(type)
|
||||||
|
&& type.getArguments().none { it.isStarProjection() }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderFlexibleType(type: JetType): String {
|
private fun renderFlexibleType(type: JetType): String {
|
||||||
|
|||||||
+3
-1
@@ -77,7 +77,9 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val classId = c.nameResolver.getClassId(type.getConstructor().getId())
|
val classId = c.nameResolver.getClassId(type.getConstructor().getId())
|
||||||
if (KotlinBuiltIns.isNumberedFunctionClassFqName(classId.asSingleFqName().toUnsafe())) {
|
val shouldBuildAsFunctionType = KotlinBuiltIns.isNumberedFunctionClassFqName(classId.asSingleFqName().toUnsafe())
|
||||||
|
&& type.getArgumentList().none { it.getProjection() == Projection.STAR }
|
||||||
|
if (shouldBuildAsFunctionType) {
|
||||||
val extension = annotations.any { annotation -> annotation.asSingleFqName() == KotlinBuiltIns.FQ_NAMES.extension }
|
val extension = annotations.any { annotation -> annotation.asSingleFqName() == KotlinBuiltIns.FQ_NAMES.extension }
|
||||||
createFunctionTypeStub(parent, type, extension)
|
createFunctionTypeStub(parent, type, extension)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -4,6 +4,14 @@
|
|||||||
package test
|
package test
|
||||||
|
|
||||||
internal final class FunctionTypes public constructor() {
|
internal final class FunctionTypes public constructor() {
|
||||||
|
public final fun f1(f: kotlin.Function1<*, *>): kotlin.Unit { /* compiled code */ }
|
||||||
|
|
||||||
|
public final fun f2(f: kotlin.Function2<kotlin.Int, *, kotlin.String>): kotlin.Unit { /* compiled code */ }
|
||||||
|
|
||||||
|
public final fun f3(f: kotlin.Int.(kotlin.Int) -> kotlin.Unit): kotlin.Unit { /* compiled code */ }
|
||||||
|
|
||||||
|
public final fun f4(f: kotlin.List<kotlin.Function1<*, *>>): kotlin.Unit { /* compiled code */ }
|
||||||
|
|
||||||
public final fun <A> (A.(A) -> A)?.bar(): kotlin.Unit { /* compiled code */ }
|
public final fun <A> (A.(A) -> A)?.bar(): kotlin.Unit { /* compiled code */ }
|
||||||
|
|
||||||
public final fun <IP, R, P1> ((IP) -> R).compose(f: (P1) -> IP): (P1) -> R { /* compiled code */ }
|
public final fun <IP, R, P1> ((IP) -> R).compose(f: (P1) -> IP): (P1) -> R { /* compiled code */ }
|
||||||
|
|||||||
@@ -14,4 +14,16 @@ class FunctionTypes {
|
|||||||
|
|
||||||
public fun <A> (A.(A) -> A)?.bar() {
|
public fun <A> (A.(A) -> A)?.bar() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fun f1(f: Function1<*, *>) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun f2(f: Function2<Int, *, String>) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun f3(f: @extension Function2<Int, Int, Unit>) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun f4(f: List<@extension Function1<*, *>>) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,4 +16,10 @@ abstract class Types {
|
|||||||
|
|
||||||
public fun <P1, P2, P3, R> Function3<P1, P2, P3, R>.extOnFunctionType() {
|
public fun <P1, P2, P3, R> Function3<P1, P2, P3, R>.extOnFunctionType() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract val starList: List<*>
|
||||||
|
abstract val starFun: Function1<*, *>
|
||||||
|
abstract val extFun: @extension Function2<Int, Int, Unit>
|
||||||
|
abstract val listExtStarFun: List<@extension Function1<*, *>>
|
||||||
|
abstract val funTypeWithStarAndNonStar: Function1<*, Int>
|
||||||
}
|
}
|
||||||
@@ -55,6 +55,28 @@ PsiJetFileStubImpl[package=test]
|
|||||||
USER_TYPE:[isAbsoluteInRootPackage=false]
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
REFERENCE_EXPRESSION:[referencedName=String]
|
REFERENCE_EXPRESSION:[referencedName=String]
|
||||||
|
PROPERTY:[fqName=test.Types.extFun, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=extFun]
|
||||||
|
MODIFIER_LIST:[abstract internal]
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
FUNCTION_TYPE:
|
||||||
|
FUNCTION_TYPE_RECEIVER:
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=Int]
|
||||||
|
VALUE_PARAMETER_LIST:
|
||||||
|
VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=null]
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=Int]
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=Unit]
|
||||||
PROPERTY:[fqName=test.Types.extFunction, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=extFunction]
|
PROPERTY:[fqName=test.Types.extFunction, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=extFunction]
|
||||||
MODIFIER_LIST:[abstract internal]
|
MODIFIER_LIST:[abstract internal]
|
||||||
TYPE_REFERENCE:
|
TYPE_REFERENCE:
|
||||||
@@ -152,6 +174,21 @@ PsiJetFileStubImpl[package=test]
|
|||||||
USER_TYPE:[isAbsoluteInRootPackage=false]
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
REFERENCE_EXPRESSION:[referencedName=String]
|
REFERENCE_EXPRESSION:[referencedName=String]
|
||||||
|
PROPERTY:[fqName=test.Types.funTypeWithStarAndNonStar, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=funTypeWithStarAndNonStar]
|
||||||
|
MODIFIER_LIST:[abstract internal]
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=Function1]
|
||||||
|
TYPE_ARGUMENT_LIST:
|
||||||
|
TYPE_PROJECTION:[projectionKind=STAR]
|
||||||
|
TYPE_PROJECTION:[projectionKind=NONE]
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=Int]
|
||||||
PROPERTY:[fqName=test.Types.function, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=function]
|
PROPERTY:[fqName=test.Types.function, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=function]
|
||||||
MODIFIER_LIST:[internal final]
|
MODIFIER_LIST:[internal final]
|
||||||
TYPE_REFERENCE:
|
TYPE_REFERENCE:
|
||||||
@@ -205,6 +242,23 @@ PsiJetFileStubImpl[package=test]
|
|||||||
USER_TYPE:[isAbsoluteInRootPackage=false]
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
REFERENCE_EXPRESSION:[referencedName=Int]
|
REFERENCE_EXPRESSION:[referencedName=Int]
|
||||||
|
PROPERTY:[fqName=test.Types.listExtStarFun, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=listExtStarFun]
|
||||||
|
MODIFIER_LIST:[abstract internal]
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=List]
|
||||||
|
TYPE_ARGUMENT_LIST:
|
||||||
|
TYPE_PROJECTION:[projectionKind=NONE]
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=Function1]
|
||||||
|
TYPE_ARGUMENT_LIST:
|
||||||
|
TYPE_PROJECTION:[projectionKind=STAR]
|
||||||
|
TYPE_PROJECTION:[projectionKind=STAR]
|
||||||
PROPERTY:[fqName=test.Types.map, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=map]
|
PROPERTY:[fqName=test.Types.map, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=map]
|
||||||
MODIFIER_LIST:[abstract internal]
|
MODIFIER_LIST:[abstract internal]
|
||||||
TYPE_REFERENCE:
|
TYPE_REFERENCE:
|
||||||
@@ -278,6 +332,25 @@ PsiJetFileStubImpl[package=test]
|
|||||||
USER_TYPE:[isAbsoluteInRootPackage=false]
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
REFERENCE_EXPRESSION:[referencedName=String]
|
REFERENCE_EXPRESSION:[referencedName=String]
|
||||||
|
PROPERTY:[fqName=test.Types.starFun, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=starFun]
|
||||||
|
MODIFIER_LIST:[abstract internal]
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=Function1]
|
||||||
|
TYPE_ARGUMENT_LIST:
|
||||||
|
TYPE_PROJECTION:[projectionKind=STAR]
|
||||||
|
TYPE_PROJECTION:[projectionKind=STAR]
|
||||||
|
PROPERTY:[fqName=test.Types.starList, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=starList]
|
||||||
|
MODIFIER_LIST:[abstract internal]
|
||||||
|
TYPE_REFERENCE:
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
USER_TYPE:[isAbsoluteInRootPackage=false]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION:[referencedName=List]
|
||||||
|
TYPE_ARGUMENT_LIST:
|
||||||
|
TYPE_PROJECTION:[projectionKind=STAR]
|
||||||
FUN:[fqName=test.Types.extOnFunctionType, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=true, isTopLevel=false, name=extOnFunctionType]
|
FUN:[fqName=test.Types.extOnFunctionType, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=true, isTopLevel=false, name=extOnFunctionType]
|
||||||
MODIFIER_LIST:[public final]
|
MODIFIER_LIST:[public final]
|
||||||
TYPE_PARAMETER_LIST:
|
TYPE_PARAMETER_LIST:
|
||||||
|
|||||||
Reference in New Issue
Block a user