diff --git a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt index 8c30f1bd991..fe63df488a1 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt @@ -138,6 +138,7 @@ import org.jetbrains.jet.plugin.coverage.AbstractKotlinCoverageOutputFilesTest import org.jetbrains.k2js.test.semantics.AbstractDynamicTest import org.jetbrains.k2js.test.semantics.AbstractMultiModuleTest import org.jetbrains.jet.completion.handlers.AbstractBasicCompletionHandlerTest +import org.jetbrains.jet.plugin.decompiler.stubBuilder.AbstractClsStubBuilderTest fun main(args: Array) { System.setProperty("java.awt.headless", "true") @@ -611,6 +612,10 @@ fun main(args: Array) { model("decompiler/decompiledText", pattern = """^([^\.]+)$""") } + testClass(javaClass()) { + model("decompiler/stubBuilder", extension = null, recursive = false) + } + testClass(javaClass()) { model("editor/optimizeImports", extension = null, recursive = false) } diff --git a/idea/testData/decompiler/stubBuilder/AnnotationClass/AnnotationClass.kt b/idea/testData/decompiler/stubBuilder/AnnotationClass/AnnotationClass.kt new file mode 100644 index 00000000000..7cae7e46753 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/AnnotationClass/AnnotationClass.kt @@ -0,0 +1,3 @@ +package test.a + +public annotation class AnnotationClass(val i: Int, val j: String = "a") \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/AnnotationClass/AnnotationClass.txt b/idea/testData/decompiler/stubBuilder/AnnotationClass/AnnotationClass.txt new file mode 100644 index 00000000000..c88fb522553 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/AnnotationClass/AnnotationClass.txt @@ -0,0 +1,42 @@ +PsiJetFileStubImpl[package=test.a] + PACKAGE_DIRECTIVE: + DOT_QUALIFIED_EXPRESSION: + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=a] + CLASS:[fqName=test.a.AnnotationClass, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=AnnotationClass, superNames=[Annotation]] + MODIFIER_LIST:[annotation public final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=i] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=j] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Annotation] + CLASS_BODY: + PROPERTY:[fqName=test.a.AnnotationClass.i, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=i] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=test.a.AnnotationClass.j, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=j] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] diff --git a/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt new file mode 100644 index 00000000000..c791c5253ae --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt @@ -0,0 +1,29 @@ +//TODO: constructor modifiers are lost +a public class Annotations private [a] (private [a] val c1: Int, [a] val c2: Int) { + + protected a fun f() { + } + + private fun annotationWithVararg(a vararg i: Int) {} + + b(E.E1) private val c: Int = 1 + + a b(E.E2) public fun g([a] p1: E) { + } + + var withCustomAccessors: Int = 0 + //TODO: accessor modifiers are lost + [a] get + [a] private set + + + private b(E.E2) class object { + + } +} + +annotation class a + +annotation class b(val e: E) + +enum class E { E1 E2 } \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/Annotations/Annotations.txt b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.txt new file mode 100644 index 00000000000..a4e77f8853f --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.txt @@ -0,0 +1,148 @@ +PsiJetFileStubImpl[package=] + PACKAGE_DIRECTIVE: + CLASS:[fqName=Annotations, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=Annotations, superNames=[]] + MODIFIER_LIST:[public final] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=c1] + MODIFIER_LIST:[] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=c2] + MODIFIER_LIST:[] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + CLASS_BODY: + CLASS_OBJECT: + MODIFIER_LIST:[private] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=b] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=b] + OBJECT_DECLARATION:[fqName=null, isClassObject=true, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=null, superNames=[]] + CLASS_BODY: + PROPERTY:[fqName=Annotations.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[private final] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=b] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=b] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=Annotations.c1, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c1] + MODIFIER_LIST:[private final] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=Annotations.c2, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c2] + MODIFIER_LIST:[internal final] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=Annotations.withCustomAccessors, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=true, name=withCustomAccessors] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=Annotations.annotationWithVararg, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=annotationWithVararg] + MODIFIER_LIST:[private final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=i] + MODIFIER_LIST:[vararg] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + 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] + FUN:[fqName=Annotations.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[protected final] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=Annotations.g, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=g] + MODIFIER_LIST:[public final] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=b] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=b] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + MODIFIER_LIST:[] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=E] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] diff --git a/idea/testData/decompiler/stubBuilder/ClassMembers/ClassMembers.kt b/idea/testData/decompiler/stubBuilder/ClassMembers/ClassMembers.kt new file mode 100644 index 00000000000..e87e8fd9ad1 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/ClassMembers/ClassMembers.kt @@ -0,0 +1,17 @@ +package test + +abstract class ClassMembers(private val p: Int, public open var p2: String, p3: Int, p4: Int = 10, final val p5: String = "aaa") { + val foo = 3 + fun bar(): Int { + return 3 + } + + open fun openFun() { + } + + abstract fun abstractFun() + + open val openVal = 3 + + abstract var abstractVar: Int +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/ClassMembers/ClassMembers.txt b/idea/testData/decompiler/stubBuilder/ClassMembers/ClassMembers.txt new file mode 100644 index 00000000000..2d6e5a0aad0 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/ClassMembers/ClassMembers.txt @@ -0,0 +1,103 @@ +PsiJetFileStubImpl[package=test] + PACKAGE_DIRECTIVE: + REFERENCE_EXPRESSION:[referencedName=test] + CLASS:[fqName=test.ClassMembers, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=ClassMembers, superNames=[]] + MODIFIER_LIST:[abstract internal] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p4] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p5] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + CLASS_BODY: + PROPERTY:[fqName=test.ClassMembers.abstractVar, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=true, name=abstractVar] + MODIFIER_LIST:[abstract internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=test.ClassMembers.foo, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=foo] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=test.ClassMembers.openVal, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=openVal] + MODIFIER_LIST:[open internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=test.ClassMembers.p, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=p] + MODIFIER_LIST:[private final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=test.ClassMembers.p2, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=true, name=p2] + MODIFIER_LIST:[open public] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + PROPERTY:[fqName=test.ClassMembers.p5, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=p5] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + FUN:[fqName=test.ClassMembers.abstractFun, hasBlockBody=true, hasBody=false, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=abstractFun] + MODIFIER_LIST:[abstract internal] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=test.ClassMembers.bar, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=bar] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.ClassMembers.openFun, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=openFun] + MODIFIER_LIST:[open internal] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] diff --git a/idea/testData/decompiler/stubBuilder/ClassObject/ClassObject.kt b/idea/testData/decompiler/stubBuilder/ClassObject/ClassObject.kt new file mode 100644 index 00000000000..d33304c304b --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/ClassObject/ClassObject.kt @@ -0,0 +1,41 @@ +package test.class_object + +class ClassObject { + fun f() { + } + + val c = 1 + + public class object { + val j = 0 + fun z() = 0 + + class A { + class B { + val i: Int = 0 + fun f() = 0 + } + } + } + + + class B { + class object { + class C { + class object { + class D { + class object { + val i = 3 + fun f() { + } + + enum class En + + annotation class Anno + } + } + } + } + } + } +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/ClassObject/ClassObject.txt b/idea/testData/decompiler/stubBuilder/ClassObject/ClassObject.txt new file mode 100644 index 00000000000..a032e6d4d2b --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/ClassObject/ClassObject.txt @@ -0,0 +1,144 @@ +PsiJetFileStubImpl[package=test.class_object] + PACKAGE_DIRECTIVE: + DOT_QUALIFIED_EXPRESSION: + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=class_object] + CLASS:[fqName=test.class_object.ClassObject, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=ClassObject, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS_OBJECT: + MODIFIER_LIST:[public] + OBJECT_DECLARATION:[fqName=null, isClassObject=true, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=null, superNames=[]] + CLASS_BODY: + PROPERTY:[fqName=test.class_object.ClassObject.j, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=j] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.class_object.ClassObject.z, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=z] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + CLASS:[fqName=test.class_object.ClassObject.A, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=A, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS:[fqName=test.class_object.ClassObject.A.B, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=B, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + PROPERTY:[fqName=test.class_object.ClassObject.A.B.i, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=i] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.class_object.ClassObject.A.B.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=test.class_object.ClassObject.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.class_object.ClassObject.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + CLASS:[fqName=test.class_object.ClassObject.B, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=B, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS_OBJECT: + MODIFIER_LIST:[internal] + OBJECT_DECLARATION:[fqName=null, isClassObject=true, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=null, superNames=[]] + CLASS_BODY: + CLASS:[fqName=test.class_object.ClassObject.B.C, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=C, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS_OBJECT: + MODIFIER_LIST:[internal] + OBJECT_DECLARATION:[fqName=null, isClassObject=true, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=null, superNames=[]] + CLASS_BODY: + CLASS:[fqName=test.class_object.ClassObject.B.C.D, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=D, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS_OBJECT: + MODIFIER_LIST:[internal] + OBJECT_DECLARATION:[fqName=null, isClassObject=true, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=null, superNames=[]] + CLASS_BODY: + PROPERTY:[fqName=test.class_object.ClassObject.B.C.D.i, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=i] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.class_object.ClassObject.B.C.D.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + CLASS:[fqName=test.class_object.ClassObject.B.C.D.Anno, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=Anno, superNames=[Annotation]] + MODIFIER_LIST:[annotation internal final] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Annotation] + CLASS_BODY: + CLASS:[fqName=test.class_object.ClassObject.B.C.D.En, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=En, superNames=[Enum]] + MODIFIER_LIST:[enum internal final] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Enum] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=class_object] + REFERENCE_EXPRESSION:[referencedName=ClassObject] + REFERENCE_EXPRESSION:[referencedName=B] + REFERENCE_EXPRESSION:[referencedName=C] + REFERENCE_EXPRESSION:[referencedName=D] + REFERENCE_EXPRESSION:[referencedName=En] + CLASS_BODY: diff --git a/idea/testData/decompiler/stubBuilder/DataClass/DataClass.kt b/idea/testData/decompiler/stubBuilder/DataClass/DataClass.kt new file mode 100644 index 00000000000..9e0f90389e5 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/DataClass/DataClass.kt @@ -0,0 +1,5 @@ +package a.b.c + +public data class DataClass(val i: Int, val j: String) { + fun f() = 3 +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/DataClass/DataClass.txt b/idea/testData/decompiler/stubBuilder/DataClass/DataClass.txt new file mode 100644 index 00000000000..7dcb6436094 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/DataClass/DataClass.txt @@ -0,0 +1,68 @@ +PsiJetFileStubImpl[package=a.b.c] + PACKAGE_DIRECTIVE: + DOT_QUALIFIED_EXPRESSION: + DOT_QUALIFIED_EXPRESSION: + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=b] + REFERENCE_EXPRESSION:[referencedName=c] + CLASS:[fqName=a.b.c.DataClass, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=DataClass, superNames=[]] + MODIFIER_LIST:[public final] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=data] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=data] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=i] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=j] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + CLASS_BODY: + PROPERTY:[fqName=a.b.c.DataClass.i, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=i] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=a.b.c.DataClass.j, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=j] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + FUN:[fqName=a.b.c.DataClass.component1, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=component1] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=a.b.c.DataClass.component2, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=component2] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + FUN:[fqName=a.b.c.DataClass.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] diff --git a/idea/testData/decompiler/stubBuilder/Delegation/Delegation.kt b/idea/testData/decompiler/stubBuilder/Delegation/Delegation.kt new file mode 100644 index 00000000000..e1aba835399 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Delegation/Delegation.kt @@ -0,0 +1,14 @@ +trait T { + fun f() + val g: Int +} + +class A() : T { + override val g = 3 + override fun f() { + } +} + +class Delegation(val c: Int = 3, a: A) : T by a { + fun ff(): Int = 3 +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/Delegation/Delegation.txt b/idea/testData/decompiler/stubBuilder/Delegation/Delegation.txt new file mode 100644 index 00000000000..4bf3888c410 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Delegation/Delegation.txt @@ -0,0 +1,36 @@ +PsiJetFileStubImpl[package=] + PACKAGE_DIRECTIVE: + CLASS:[fqName=Delegation, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=Delegation, superNames=[T]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=c] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=a] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=A] + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T] + CLASS_BODY: + PROPERTY:[fqName=Delegation.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=Delegation.ff, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=ff] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] diff --git a/idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/Dependency.kt b/idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/Dependency.kt new file mode 100644 index 00000000000..2502e0c6823 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/Dependency.kt @@ -0,0 +1,14 @@ +package dependency + +class D { + inner class Inner { + inner class Inner + } + open class Nested { + class Nested + } + + class object { + class NestedInClassObject + } +} diff --git a/idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/DependencyOnNestedClasses.kt b/idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/DependencyOnNestedClasses.kt new file mode 100644 index 00000000000..c55e10b1cce --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/DependencyOnNestedClasses.kt @@ -0,0 +1,9 @@ +package test + +import dependency.* + +public class DependencyOnNestedClasses : D.Nested() { + fun f(nc: D.NestedInClassObject, i: D.Inner, ii: D.Inner.Inner, nn: D.Nested.Nested): D.Nested { + return D.Nested() + } +} diff --git a/idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/DependencyOnNestedClasses.txt b/idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/DependencyOnNestedClasses.txt new file mode 100644 index 00000000000..670d49f39f9 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/DependencyOnNestedClasses.txt @@ -0,0 +1,62 @@ +PsiJetFileStubImpl[package=test] + PACKAGE_DIRECTIVE: + REFERENCE_EXPRESSION:[referencedName=test] + CLASS:[fqName=test.DependencyOnNestedClasses, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=DependencyOnNestedClasses, superNames=[Nested]] + MODIFIER_LIST:[public final] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=dependency] + REFERENCE_EXPRESSION:[referencedName=D] + REFERENCE_EXPRESSION:[referencedName=Nested] + CLASS_BODY: + FUN:[fqName=test.DependencyOnNestedClasses.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=nc] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=dependency] + REFERENCE_EXPRESSION:[referencedName=D] + REFERENCE_EXPRESSION:[referencedName=NestedInClassObject] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=i] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=dependency] + REFERENCE_EXPRESSION:[referencedName=D] + REFERENCE_EXPRESSION:[referencedName=Inner] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=ii] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=dependency] + REFERENCE_EXPRESSION:[referencedName=D] + REFERENCE_EXPRESSION:[referencedName=Inner] + REFERENCE_EXPRESSION:[referencedName=Inner] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=nn] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=dependency] + REFERENCE_EXPRESSION:[referencedName=D] + REFERENCE_EXPRESSION:[referencedName=Nested] + REFERENCE_EXPRESSION:[referencedName=Nested] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=dependency] + REFERENCE_EXPRESSION:[referencedName=D] + REFERENCE_EXPRESSION:[referencedName=Nested] diff --git a/idea/testData/decompiler/stubBuilder/Enum/Enum.kt b/idea/testData/decompiler/stubBuilder/Enum/Enum.kt new file mode 100644 index 00000000000..7062efd2e64 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Enum/Enum.kt @@ -0,0 +1,13 @@ +package a.b.c.test.enum + +enum class Enum { + A B C D E F { + override fun f() = 4 + } + + open fun f() = 3 + + class object { + val c: Int = 1 + } +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/Enum/Enum.txt b/idea/testData/decompiler/stubBuilder/Enum/Enum.txt new file mode 100644 index 00000000000..f036a380be8 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Enum/Enum.txt @@ -0,0 +1,62 @@ +PsiJetFileStubImpl[package=a.b.c.test.enum] + PACKAGE_DIRECTIVE: + DOT_QUALIFIED_EXPRESSION: + DOT_QUALIFIED_EXPRESSION: + DOT_QUALIFIED_EXPRESSION: + DOT_QUALIFIED_EXPRESSION: + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=b] + REFERENCE_EXPRESSION:[referencedName=c] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=enum] + CLASS:[fqName=a.b.c.test.enum.Enum, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=Enum, superNames=[Enum]] + MODIFIER_LIST:[enum internal final] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Enum] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=b] + REFERENCE_EXPRESSION:[referencedName=c] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=enum] + REFERENCE_EXPRESSION:[referencedName=Enum] + CLASS_BODY: + CLASS_OBJECT: + MODIFIER_LIST:[internal] + OBJECT_DECLARATION:[fqName=null, isClassObject=true, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=null, superNames=[]] + CLASS_BODY: + PROPERTY:[fqName=a.b.c.test.enum.Enum.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.A, isEnumEntry=true, isLocal=false, isTopLevel=false, isTrait=false, name=A, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.B, isEnumEntry=true, isLocal=false, isTopLevel=false, isTrait=false, name=B, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.C, isEnumEntry=true, isLocal=false, isTopLevel=false, isTrait=false, name=C, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.D, isEnumEntry=true, isLocal=false, isTopLevel=false, isTrait=false, name=D, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.E, isEnumEntry=true, isLocal=false, isTopLevel=false, isTrait=false, name=E, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.F, isEnumEntry=true, isLocal=false, isTopLevel=false, isTrait=false, name=F, superNames=[]] + FUN:[fqName=a.b.c.test.enum.Enum.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[open internal] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] diff --git a/idea/testData/decompiler/stubBuilder/FlexibleTypes/FlexibleTypes.kt b/idea/testData/decompiler/stubBuilder/FlexibleTypes/FlexibleTypes.kt new file mode 100644 index 00000000000..c60d8368e1d --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/FlexibleTypes/FlexibleTypes.kt @@ -0,0 +1,11 @@ +package test + +import kotlin.internal.flexible.ft + +abstract class FlexibleTypes() { + abstract fun collection(): ft, List> + + abstract val p: ft + + fun withBody(): ft { return 1 } +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/FlexibleTypes/FlexibleTypes.txt b/idea/testData/decompiler/stubBuilder/FlexibleTypes/FlexibleTypes.txt new file mode 100644 index 00000000000..6bf2642dcac --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/FlexibleTypes/FlexibleTypes.txt @@ -0,0 +1,37 @@ +PsiJetFileStubImpl[package=test] + PACKAGE_DIRECTIVE: + REFERENCE_EXPRESSION:[referencedName=test] + CLASS:[fqName=test.FlexibleTypes, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=FlexibleTypes, superNames=[]] + MODIFIER_LIST:[abstract internal] + VALUE_PARAMETER_LIST: + CLASS_BODY: + PROPERTY:[fqName=test.FlexibleTypes.p, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=p] + MODIFIER_LIST:[abstract internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.FlexibleTypes.collection, hasBlockBody=true, hasBody=false, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=collection] + MODIFIER_LIST:[abstract internal] + VALUE_PARAMETER_LIST: + 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=Int] + FUN:[fqName=test.FlexibleTypes.withBody, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=withBody] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] diff --git a/idea/testData/decompiler/stubBuilder/FlexibleTypes/ft.kt b/idea/testData/decompiler/stubBuilder/FlexibleTypes/ft.kt new file mode 100644 index 00000000000..331750ac1ce --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/FlexibleTypes/ft.kt @@ -0,0 +1,3 @@ +package kotlin.internal.flexible + +class ft \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/InheritingClasses/InheritingClasses.kt b/idea/testData/decompiler/stubBuilder/InheritingClasses/InheritingClasses.kt new file mode 100644 index 00000000000..131899cb4ab --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/InheritingClasses/InheritingClasses.kt @@ -0,0 +1,47 @@ +package a + +class InheritingClasses { + abstract class A(override val c: Int = 1) : C { + open fun of() = 3 + abstract fun af(): Int + open val op = 4 + abstract val ap: Int + } + + open class B : A(2) { + override fun of() = 4 + override fun af() = 5 + override val op = 5 + override val ap = 5 + } + + trait C { + val c: Int + } + + trait D : C { + override val c: Int + } + + trait E + class G : B(), C, D, E + + + class InheritAny { + trait SomeTrait + trait SomeTrait2 + + class ImplicitAny + + class ExplicitAny : Any() + + class OnlyTrait : SomeTrait + class OnlyTraits : SomeTrait, SomeTrait2 + + class TraitWithExplicitAny : Any(), SomeTrait + class TraitsWithExplicitAny : SomeTrait2, Any(), SomeTrait + } + + abstract class InheritFunctionType : ((Int, String) -> Int) + abstract class InheritExtensionFunctionType : (E.(Int, String) -> Int) +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/InheritingClasses/InheritingClasses.txt b/idea/testData/decompiler/stubBuilder/InheritingClasses/InheritingClasses.txt new file mode 100644 index 00000000000..16f0dd53e62 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/InheritingClasses/InheritingClasses.txt @@ -0,0 +1,354 @@ +PsiJetFileStubImpl[package=a] + PACKAGE_DIRECTIVE: + REFERENCE_EXPRESSION:[referencedName=a] + CLASS:[fqName=a.InheritingClasses, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=InheritingClasses, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.A, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=A, superNames=[C]] + MODIFIER_LIST:[abstract internal] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=c] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=C] + CLASS_BODY: + PROPERTY:[fqName=a.InheritingClasses.A.ap, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=ap] + MODIFIER_LIST:[abstract internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=a.InheritingClasses.A.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[open internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=a.InheritingClasses.A.op, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=op] + MODIFIER_LIST:[open internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=a.InheritingClasses.A.af, hasBlockBody=true, hasBody=false, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=af] + MODIFIER_LIST:[abstract internal] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=a.InheritingClasses.A.of, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=of] + MODIFIER_LIST:[open internal] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + CLASS:[fqName=a.InheritingClasses.B, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=B, superNames=[A]] + MODIFIER_LIST:[open internal] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=A] + CLASS_BODY: + PROPERTY:[fqName=a.InheritingClasses.B.ap, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=ap] + MODIFIER_LIST:[open internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=a.InheritingClasses.B.op, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=op] + MODIFIER_LIST:[open internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=a.InheritingClasses.B.af, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=af] + MODIFIER_LIST:[open internal] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=a.InheritingClasses.B.of, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=of] + MODIFIER_LIST:[open internal] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + CLASS:[fqName=a.InheritingClasses.C, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=true, name=C, superNames=[]] + MODIFIER_LIST:[internal] + CLASS_BODY: + PROPERTY:[fqName=a.InheritingClasses.C.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[abstract internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + CLASS:[fqName=a.InheritingClasses.D, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=true, name=D, superNames=[C]] + MODIFIER_LIST:[internal] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T] + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=C] + CLASS_BODY: + PROPERTY:[fqName=a.InheritingClasses.D.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[abstract internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + CLASS:[fqName=a.InheritingClasses.E, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=true, name=E, superNames=[]] + MODIFIER_LIST:[internal] + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.G, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=G, superNames=[B, C, D, E]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=B] + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=C] + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=D] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=E] + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritAny, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=InheritAny, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritAny.ExplicitAny, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=ExplicitAny, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritAny.ImplicitAny, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=ImplicitAny, superNames=[]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritAny.OnlyTrait, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=OnlyTrait, superNames=[SomeTrait]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=InheritAny] + REFERENCE_EXPRESSION:[referencedName=SomeTrait] + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritAny.OnlyTraits, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=OnlyTraits, superNames=[SomeTrait, SomeTrait2]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=InheritAny] + REFERENCE_EXPRESSION:[referencedName=SomeTrait] + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=InheritAny] + REFERENCE_EXPRESSION:[referencedName=SomeTrait2] + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritAny.SomeTrait, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=true, name=SomeTrait, superNames=[]] + MODIFIER_LIST:[internal] + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritAny.SomeTrait2, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=true, name=SomeTrait2, superNames=[]] + MODIFIER_LIST:[internal] + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritAny.TraitWithExplicitAny, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=TraitWithExplicitAny, superNames=[Any, SomeTrait]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Any] + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=InheritAny] + REFERENCE_EXPRESSION:[referencedName=SomeTrait] + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritAny.TraitsWithExplicitAny, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=TraitsWithExplicitAny, superNames=[SomeTrait2, Any, SomeTrait]] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=InheritAny] + REFERENCE_EXPRESSION:[referencedName=SomeTrait2] + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Any] + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=InheritAny] + REFERENCE_EXPRESSION:[referencedName=SomeTrait] + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritExtensionFunctionType, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=InheritExtensionFunctionType, superNames=[]] + MODIFIER_LIST:[abstract internal] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + FUNCTION_TYPE: + FUNCTION_TYPE_RECEIVER: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=InheritingClasses] + REFERENCE_EXPRESSION:[referencedName=E] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + CLASS_BODY: + CLASS:[fqName=a.InheritingClasses.InheritFunctionType, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=InheritFunctionType, superNames=[]] + MODIFIER_LIST:[abstract internal] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + FUNCTION_TYPE: + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + CLASS_BODY: diff --git a/idea/testData/decompiler/stubBuilder/NestedClasses/NestedClasses.kt b/idea/testData/decompiler/stubBuilder/NestedClasses/NestedClasses.kt new file mode 100644 index 00000000000..cc689fa1b0e --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/NestedClasses/NestedClasses.kt @@ -0,0 +1,37 @@ +package test + +class NestedClasses { + fun f() { + } + + val c: Int = 0 + + private class Nested { + fun f(p1: TN) { + } + + val c = 1 + + public class NN { + fun f(p1: TNN) { + } + + val c = 1 + } + + inner class NI { + fun f(p1: TN, p2: TNI) { + } + } + } + + public inner class Inner { + fun f(p1: TI) { + } + + private inner class II { + fun f(p1: TII, p2: II>, p3: TOuter) { + } + } + } +} diff --git a/idea/testData/decompiler/stubBuilder/NestedClasses/NestedClasses.txt b/idea/testData/decompiler/stubBuilder/NestedClasses/NestedClasses.txt new file mode 100644 index 00000000000..6f00e1d053d --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/NestedClasses/NestedClasses.txt @@ -0,0 +1,164 @@ +PsiJetFileStubImpl[package=test] + PACKAGE_DIRECTIVE: + REFERENCE_EXPRESSION:[referencedName=test] + CLASS:[fqName=test.NestedClasses, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=NestedClasses, superNames=[]] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=TOuter] + VALUE_PARAMETER_LIST: + CLASS_BODY: + PROPERTY:[fqName=test.NestedClasses.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.NestedClasses.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + CLASS:[fqName=test.NestedClasses.Inner, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=Inner, superNames=[]] + MODIFIER_LIST:[inner public final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=TI] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TOuter] + VALUE_PARAMETER_LIST: + CLASS_BODY: + FUN:[fqName=test.NestedClasses.Inner.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TI] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + CLASS:[fqName=test.NestedClasses.Inner.II, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=II, superNames=[]] + MODIFIER_LIST:[inner private final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=TII] + VALUE_PARAMETER_LIST: + CLASS_BODY: + FUN:[fqName=test.NestedClasses.Inner.II.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TII] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=NestedClasses] + REFERENCE_EXPRESSION:[referencedName=Inner] + REFERENCE_EXPRESSION:[referencedName=II] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=NestedClasses] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TOuter] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TOuter] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + CLASS:[fqName=test.NestedClasses.Nested, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=Nested, superNames=[]] + MODIFIER_LIST:[private final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=TN] + VALUE_PARAMETER_LIST: + CLASS_BODY: + PROPERTY:[fqName=test.NestedClasses.Nested.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.NestedClasses.Nested.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TN] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + CLASS:[fqName=test.NestedClasses.Nested.NI, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=NI, superNames=[]] + MODIFIER_LIST:[inner internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=TNI] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TN] + VALUE_PARAMETER_LIST: + CLASS_BODY: + FUN:[fqName=test.NestedClasses.Nested.NI.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TN] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TNI] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + CLASS:[fqName=test.NestedClasses.Nested.NN, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=NN, superNames=[]] + MODIFIER_LIST:[public final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=TNN] + VALUE_PARAMETER_LIST: + CLASS_BODY: + PROPERTY:[fqName=test.NestedClasses.Nested.NN.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.NestedClasses.Nested.NN.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=TNN] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] diff --git a/idea/testData/decompiler/stubBuilder/Objects/Objects.kt b/idea/testData/decompiler/stubBuilder/Objects/Objects.kt new file mode 100644 index 00000000000..2641be53fce --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Objects/Objects.kt @@ -0,0 +1,29 @@ +public object Objects { + + val c = 0 + + fun f() { + } + + private object InnerObject : A { + val c = 0 + + fun f() { + } + } + + public object OtherObject : NestedClass() { + + val c = 0 + + fun f() { + } + } + + internal open class NestedClass + + +} + +trait A { +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/Objects/Objects.txt b/idea/testData/decompiler/stubBuilder/Objects/Objects.txt new file mode 100644 index 00000000000..370f4980678 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Objects/Objects.txt @@ -0,0 +1,72 @@ +PsiJetFileStubImpl[package=] + PACKAGE_DIRECTIVE: + OBJECT_DECLARATION:[fqName=Objects, isClassObject=false, isLocal=false, isObjectLiteral=false, isTopLevel=true, name=Objects, superNames=[]] + MODIFIER_LIST:[public] + CLASS_BODY: + PROPERTY:[fqName=Objects.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=Objects.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + OBJECT_DECLARATION:[fqName=Objects.InnerObject, isClassObject=false, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=InnerObject, superNames=[A]] + MODIFIER_LIST:[private] + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=A] + CLASS_BODY: + PROPERTY:[fqName=Objects.InnerObject.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=Objects.InnerObject.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + CLASS:[fqName=Objects.NestedClass, isEnumEntry=false, isLocal=false, isTopLevel=false, isTrait=false, name=NestedClass, superNames=[]] + MODIFIER_LIST:[open internal] + VALUE_PARAMETER_LIST: + CLASS_BODY: + OBJECT_DECLARATION:[fqName=Objects.OtherObject, isClassObject=false, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=OtherObject, superNames=[NestedClass]] + MODIFIER_LIST:[public] + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=Objects] + REFERENCE_EXPRESSION:[referencedName=NestedClass] + CLASS_BODY: + PROPERTY:[fqName=Objects.OtherObject.c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=c] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=Objects.OtherObject.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] diff --git a/idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/TopLevelMembersAnnotatedPackage.txt b/idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/TopLevelMembersAnnotatedPackage.txt new file mode 100644 index 00000000000..729b39a8e99 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/TopLevelMembersAnnotatedPackage.txt @@ -0,0 +1,103 @@ +PsiJetFileStubImpl[package=a.b.c.topLevelMembersAnnotated] + PACKAGE_DIRECTIVE: + DOT_QUALIFIED_EXPRESSION: + DOT_QUALIFIED_EXPRESSION: + DOT_QUALIFIED_EXPRESSION: + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=b] + REFERENCE_EXPRESSION:[referencedName=c] + REFERENCE_EXPRESSION:[referencedName=topLevelMembersAnnotated] + PROPERTY:[fqName=a.b.c.topLevelMembersAnnotated.i, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=true, isVar=false, name=i] + MODIFIER_LIST:[internal] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=d] + REFERENCE_EXPRESSION:[referencedName=e] + REFERENCE_EXPRESSION:[referencedName=f] + REFERENCE_EXPRESSION:[referencedName=a] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=b] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=d] + REFERENCE_EXPRESSION:[referencedName=e] + REFERENCE_EXPRESSION:[referencedName=f] + REFERENCE_EXPRESSION:[referencedName=b] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=a.b.c.topLevelMembersAnnotated.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=true, name=f] + MODIFIER_LIST:[internal] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=d] + REFERENCE_EXPRESSION:[referencedName=e] + REFERENCE_EXPRESSION:[referencedName=f] + REFERENCE_EXPRESSION:[referencedName=a] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=b] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=d] + REFERENCE_EXPRESSION:[referencedName=e] + REFERENCE_EXPRESSION:[referencedName=f] + REFERENCE_EXPRESSION:[referencedName=b] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + MODIFIER_LIST:[] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=d] + REFERENCE_EXPRESSION:[referencedName=e] + REFERENCE_EXPRESSION:[referencedName=f] + REFERENCE_EXPRESSION:[referencedName=a] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=b] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=d] + REFERENCE_EXPRESSION:[referencedName=e] + REFERENCE_EXPRESSION:[referencedName=f] + REFERENCE_EXPRESSION:[referencedName=b] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + REFERENCE_EXPRESSION:[referencedName=b] + REFERENCE_EXPRESSION:[referencedName=c] + REFERENCE_EXPRESSION:[referencedName=topLevelMembersAnnotated] + REFERENCE_EXPRESSION:[referencedName=C] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] diff --git a/idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/annotations.kt b/idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/annotations.kt new file mode 100644 index 00000000000..e70fd7efdb6 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/annotations.kt @@ -0,0 +1,5 @@ +package d.e.f + +annotation class a + +annotation class b \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/topLevelMembersAnnotated.kt b/idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/topLevelMembersAnnotated.kt new file mode 100644 index 00000000000..5d7f830561a --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/topLevelMembersAnnotated.kt @@ -0,0 +1,10 @@ +package a.b.c.topLevelMembersAnnotated + +import d.e.f.* + +a b val i: Int = 0 + +a b fun f([a b] p1: C): Int = 0 + + +class C \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/TopLevelMembersPackage/TopLevelMembers.kt b/idea/testData/decompiler/stubBuilder/TopLevelMembersPackage/TopLevelMembers.kt new file mode 100644 index 00000000000..8051a809315 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/TopLevelMembersPackage/TopLevelMembers.kt @@ -0,0 +1,27 @@ +package foo.TopLevelMembers + +fun funWithBlockBody() { +} + +private fun funWithExprBody() = 3 + +private fun funWithParams(c: Int) { +} + +public val immutable: Double = 0.0 + +public var mutable: Float = 0.0f + +public val String.ext: String + get() = this + +public fun Int.ext(i: Int = 3): Int = this + i + +private fun funWithVarargParam(c: Int, vararg v: Int) { +} + +private fun probablyNothing(): Nothing = throw IllegalStateException() + +private val certainlyNothing: kotlin.Nothing = throw IllegalStateException() + +class Nothing \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/TopLevelMembersPackage/TopLevelMembersPackage.txt b/idea/testData/decompiler/stubBuilder/TopLevelMembersPackage/TopLevelMembersPackage.txt new file mode 100644 index 00000000000..0006f8cc62c --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/TopLevelMembersPackage/TopLevelMembersPackage.txt @@ -0,0 +1,118 @@ +PsiJetFileStubImpl[package=foo.TopLevelMembers] + PACKAGE_DIRECTIVE: + DOT_QUALIFIED_EXPRESSION: + REFERENCE_EXPRESSION:[referencedName=foo] + REFERENCE_EXPRESSION:[referencedName=TopLevelMembers] + PROPERTY:[fqName=foo.TopLevelMembers.certainlyNothing, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=true, isTopLevel=true, isVar=false, name=certainlyNothing] + MODIFIER_LIST:[private] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Nothing] + PROPERTY:[fqName=foo.TopLevelMembers.immutable, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=true, isVar=false, name=immutable] + MODIFIER_LIST:[public] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Double] + PROPERTY:[fqName=foo.TopLevelMembers.mutable, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=true, isVar=true, name=mutable] + MODIFIER_LIST:[public] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Float] + PROPERTY:[fqName=foo.TopLevelMembers.ext, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=true, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=true, isVar=false, name=ext] + MODIFIER_LIST:[public] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + FUN:[fqName=foo.TopLevelMembers.funWithBlockBody, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=true, name=funWithBlockBody] + MODIFIER_LIST:[internal] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=foo.TopLevelMembers.funWithExprBody, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=true, name=funWithExprBody] + MODIFIER_LIST:[private] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=foo.TopLevelMembers.funWithParams, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=true, name=funWithParams] + MODIFIER_LIST:[private] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=c] + 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] + FUN:[fqName=foo.TopLevelMembers.funWithVarargParam, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=true, name=funWithVarargParam] + MODIFIER_LIST:[private] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=c] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=v] + MODIFIER_LIST:[vararg] + 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] + FUN:[fqName=foo.TopLevelMembers.probablyNothing, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=true, isTopLevel=true, name=probablyNothing] + MODIFIER_LIST:[private] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=foo] + REFERENCE_EXPRESSION:[referencedName=TopLevelMembers] + REFERENCE_EXPRESSION:[referencedName=Nothing] + FUN:[fqName=foo.TopLevelMembers.ext, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=true, isProbablyNothingType=false, isTopLevel=true, name=ext] + MODIFIER_LIST:[public] + 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, hasValOrVarNode=false, isMutable=false, name=i] + 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=Int] diff --git a/idea/testData/decompiler/stubBuilder/TypeBoundsAndDelegationSpecifiers/TypeBoundsAndDelegationSpecifiers.kt b/idea/testData/decompiler/stubBuilder/TypeBoundsAndDelegationSpecifiers/TypeBoundsAndDelegationSpecifiers.kt new file mode 100644 index 00000000000..07611293f03 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/TypeBoundsAndDelegationSpecifiers/TypeBoundsAndDelegationSpecifiers.kt @@ -0,0 +1,6 @@ +package test + +open class A +trait T + +class TypeBoundsAndDelegationSpecifiers() : A(), T where H : List, G : CharSequence, C: Any? \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/TypeBoundsAndDelegationSpecifiers/TypeBoundsAndDelegationSpecifiers.txt b/idea/testData/decompiler/stubBuilder/TypeBoundsAndDelegationSpecifiers/TypeBoundsAndDelegationSpecifiers.txt new file mode 100644 index 00000000000..50ccace92d7 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/TypeBoundsAndDelegationSpecifiers/TypeBoundsAndDelegationSpecifiers.txt @@ -0,0 +1,64 @@ +PsiJetFileStubImpl[package=test] + PACKAGE_DIRECTIVE: + REFERENCE_EXPRESSION:[referencedName=test] + CLASS:[fqName=test.TypeBoundsAndDelegationSpecifiers, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=TypeBoundsAndDelegationSpecifiers, superNames=[A, T]] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=H] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Any] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=C] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=T] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=A] + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=T] + TYPE_CONSTRAINT_LIST: + TYPE_CONSTRAINT:[isClassObjectConstraint=false] + REFERENCE_EXPRESSION:[referencedName=H] + 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=String] + TYPE_CONSTRAINT:[isClassObjectConstraint=false] + REFERENCE_EXPRESSION:[referencedName=G] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=CharSequence] + TYPE_CONSTRAINT:[isClassObjectConstraint=false] + REFERENCE_EXPRESSION:[referencedName=C] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Any] + CLASS_BODY: diff --git a/idea/testData/decompiler/stubBuilder/TypeParams/TypeParams.kt b/idea/testData/decompiler/stubBuilder/TypeParams/TypeParams.kt new file mode 100644 index 00000000000..7fbf1086988 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/TypeParams/TypeParams.kt @@ -0,0 +1,45 @@ +package test + +class TypeParams Int, T4, T5 : Any?, T6 : T5, T7 : Any> where T1 : Any?, T1 : Int?, T1 : Int, T2 : String, T7 : T6 { + + fun useParams(p1: T1, p2: (T2) -> Unit, p3: T3, p4: T4, P5: T5) { + } + + fun useParamsInOtherOrder(p1: T3, p2: T3, p3: T1, p4: T5, P5: T1) { + } + + fun useParamsInTypeArg(p1: List, p2: Map, p3: (T4).(T2, T3) -> T1) { + + } + + fun withOwnParams(p1: G1, p2: G2, p3: G3, p4: T1, p5: (T2) -> Unit) { + } + + fun withOwnParamsAndTypeConstraints(p1: G1, p2: G2, p3: G3, p4: T1, p5: (T2) -> Unit) where G3 : G1, G3 : String, G3 : String? { + } + + fun withOwnParamsClashing(p1: T1, p2: T2, p3: T3, p4: T4, p5: T5) { + } + + fun T1.withOwnParamExtension(p: T1) { + } + + fun T1.withOwnParamExtensionAfterName(p: T1) { + } + + val withOwnParam: G1 + get() = throw IllegalStateException() + + val withOwnBoundedParam: G1 + get() = throw IllegalStateException() + + val withOwnBoundedParamByOther: G1 + get() = throw IllegalStateException() + + val useSomeParam: T2 + get() = throw IllegalStateException() + + + public inline fun f(g: G, body: (G)-> T): T = body(g) + +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/TypeParams/TypeParams.txt b/idea/testData/decompiler/stubBuilder/TypeParams/TypeParams.txt new file mode 100644 index 00000000000..d250fd5a1c4 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/TypeParams/TypeParams.txt @@ -0,0 +1,436 @@ +PsiJetFileStubImpl[package=test] + PACKAGE_DIRECTIVE: + REFERENCE_EXPRESSION:[referencedName=test] + CLASS:[fqName=test.TypeParams, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=TypeParams, superNames=[]] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=true, isOutVariance=false, name=T1] + MODIFIER_LIST:[in] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Any] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=true, name=T2] + MODIFIER_LIST:[out] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T3] + TYPE_REFERENCE: + FUNCTION_TYPE: + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=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=Int] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T4] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T5] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T6] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T5] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T7] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Any] + VALUE_PARAMETER_LIST: + TYPE_CONSTRAINT_LIST: + TYPE_CONSTRAINT:[isClassObjectConstraint=false] + REFERENCE_EXPRESSION:[referencedName=T1] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Any] + TYPE_CONSTRAINT:[isClassObjectConstraint=false] + REFERENCE_EXPRESSION:[referencedName=T1] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + TYPE_CONSTRAINT:[isClassObjectConstraint=false] + REFERENCE_EXPRESSION:[referencedName=T1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + TYPE_CONSTRAINT:[isClassObjectConstraint=false] + REFERENCE_EXPRESSION:[referencedName=T7] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T6] + CLASS_BODY: + PROPERTY:[fqName=test.TypeParams.useSomeParam, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=useSomeParam] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T2] + PROPERTY:[fqName=test.TypeParams.withOwnBoundedParam, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=withOwnBoundedParam] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G1] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G1] + PROPERTY:[fqName=test.TypeParams.withOwnBoundedParamByOther, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=withOwnBoundedParamByOther] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T4] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G1] + PROPERTY:[fqName=test.TypeParams.withOwnParam, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=withOwnParam] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G1] + FUN:[fqName=test.TypeParams.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=f] + MODIFIER_LIST:[public final] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=inline] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=inline] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G] + MODIFIER_LIST:[reified] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T] + MODIFIER_LIST:[reified] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=g] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=body] + TYPE_REFERENCE: + FUNCTION_TYPE: + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T] + FUN:[fqName=test.TypeParams.useParams, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=useParams] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p2] + TYPE_REFERENCE: + FUNCTION_TYPE: + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T3] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p4] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T4] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=P5] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T5] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=test.TypeParams.useParamsInOtherOrder, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=useParamsInOtherOrder] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T3] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T3] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p4] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T5] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=P5] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=test.TypeParams.useParamsInTypeArg, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=useParamsInTypeArg] + MODIFIER_LIST:[internal final] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + 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] + REFERENCE_EXPRESSION:[referencedName=T1] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Map] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T4] + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T5] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p3] + TYPE_REFERENCE: + FUNCTION_TYPE: + FUNCTION_TYPE_RECEIVER: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T4] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T2] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=test.TypeParams.withOwnParams, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=withOwnParams] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G1] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G2] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G3] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G1] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G2] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G3] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p4] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p5] + TYPE_REFERENCE: + FUNCTION_TYPE: + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=test.TypeParams.withOwnParamsAndTypeConstraints, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=withOwnParamsAndTypeConstraints] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G1] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G1] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=G3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G1] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G1] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G2] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=G3] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p4] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p5] + TYPE_REFERENCE: + FUNCTION_TYPE: + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + TYPE_CONSTRAINT_LIST: + TYPE_CONSTRAINT:[isClassObjectConstraint=false] + REFERENCE_EXPRESSION:[referencedName=G3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + TYPE_CONSTRAINT:[isClassObjectConstraint=false] + REFERENCE_EXPRESSION:[referencedName=G3] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + FUN:[fqName=test.TypeParams.withOwnParamsClashing, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=false, isProbablyNothingType=false, isTopLevel=false, name=withOwnParamsClashing] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T1] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T2] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T3] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p2] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T2] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p3] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T3] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p4] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T4] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p5] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T5] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=test.TypeParams.withOwnParamExtension, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=true, isProbablyNothingType=false, isTopLevel=false, name=withOwnParamExtension] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=test.TypeParams.withOwnParamExtensionAfterName, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=true, isProbablyNothingType=false, isTopLevel=false, name=withOwnParamExtensionAfterName] + MODIFIER_LIST:[internal final] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=p] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=T1] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] diff --git a/idea/testData/decompiler/stubBuilder/Types/Types.kt b/idea/testData/decompiler/stubBuilder/Types/Types.kt new file mode 100644 index 00000000000..90b6719de57 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Types/Types.kt @@ -0,0 +1,16 @@ +package test + +abstract class Types { + val nullable: Int? = null + abstract val list: List + abstract val map: Map + abstract val nullableMap: Map? + abstract val projections: Map + val function: () -> Unit = {} + abstract val functionWithParam: (String, Int) -> List + abstract val extFunction: String.() -> List + abstract val extFunctionWithParam: String.(Int, String) -> List + + abstract val extFunctionWithNullables: String.(Int?, String?) -> List? + abstract val deepExtFunctionType: String.((Int) -> Int, String?) -> List? +} \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/Types/Types.txt b/idea/testData/decompiler/stubBuilder/Types/Types.txt new file mode 100644 index 00000000000..59a9e54f42f --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Types/Types.txt @@ -0,0 +1,277 @@ +PsiJetFileStubImpl[package=test] + PACKAGE_DIRECTIVE: + REFERENCE_EXPRESSION:[referencedName=test] + CLASS:[fqName=test.Types, isEnumEntry=false, isLocal=false, isTopLevel=true, isTrait=false, name=Types, superNames=[]] + MODIFIER_LIST:[abstract internal] + VALUE_PARAMETER_LIST: + CLASS_BODY: + PROPERTY:[fqName=test.Types.deepExtFunctionType, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=deepExtFunctionType] + 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=String] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + FUNCTION_TYPE: + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=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=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + TYPE_REFERENCE: + NULLABLE_TYPE: + 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: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + PROPERTY:[fqName=test.Types.extFunction, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=extFunction] + 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=String] + VALUE_PARAMETER_LIST: + 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=String] + PROPERTY:[fqName=test.Types.extFunctionWithNullables, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=extFunctionWithNullables] + 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=String] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + TYPE_REFERENCE: + NULLABLE_TYPE: + 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: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + PROPERTY:[fqName=test.Types.extFunctionWithParam, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=extFunctionWithParam] + 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=String] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + 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=String] + PROPERTY:[fqName=test.Types.function, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=function] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + FUNCTION_TYPE: + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] + PROPERTY:[fqName=test.Types.functionWithParam, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=functionWithParam] + MODIFIER_LIST:[abstract internal] + TYPE_REFERENCE: + FUNCTION_TYPE: + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=false, isMutable=false, name=null] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVarNode=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=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=String] + PROPERTY:[fqName=test.Types.list, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=list] + 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=Int] + PROPERTY:[fqName=test.Types.map, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=map] + MODIFIER_LIST:[abstract internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Map] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + 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.nullable, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=nullable] + MODIFIER_LIST:[internal final] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=test.Types.nullableMap, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=nullableMap] + MODIFIER_LIST:[abstract internal] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Map] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + TYPE_PROJECTION:[projectionKind=NONE] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + PROPERTY:[fqName=test.Types.projections, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReceiverTypeRef=false, hasReturnTypeRef=true, isProbablyNothingType=false, isTopLevel=false, isVar=false, name=projections] + MODIFIER_LIST:[abstract internal] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Map] + TYPE_ARGUMENT_LIST: + TYPE_PROJECTION:[projectionKind=IN] + MODIFIER_LIST:[in] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Int] + TYPE_PROJECTION:[projectionKind=OUT] + MODIFIER_LIST:[out] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=String] diff --git a/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/AbstractClsStubBuilderTest.kt b/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/AbstractClsStubBuilderTest.kt new file mode 100644 index 00000000000..fde87bcf273 --- /dev/null +++ b/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/AbstractClsStubBuilderTest.kt @@ -0,0 +1,79 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.decompiler.stubBuilder + +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase +import org.jetbrains.jet.lang.psi.stubs.elements.JetFileStubBuilder +import org.jetbrains.jet.JetTestUtils +import java.io.File +import org.jetbrains.jet.MockLibraryUtil +import com.intellij.openapi.vfs.LocalFileSystem +import com.intellij.util.indexing.FileContentImpl +import com.intellij.psi.PsiElement +import com.intellij.psi.stubs.StubElement +import com.google.common.io.Files +import com.intellij.openapi.vfs.VirtualFile +import org.junit.Assert +import org.jetbrains.jet.plugin.stubs.AbstractStubBuilderTest +import java.util.LinkedHashSet +import com.intellij.openapi.vfs.VfsUtilCore +import org.jetbrains.jet.utils.addIfNotNull + +public abstract class AbstractClsStubBuilderTest : LightCodeInsightFixtureTestCase() { + fun doTest(sourcePath: String) { + val classFile = getClassFileToDecompile(sourcePath) + val txtFilePath = File("$sourcePath/${lastSegment(sourcePath)}.txt") + testClsStubsForFile(classFile, txtFilePath) + } + + protected fun testClsStubsForFile(classFile: VirtualFile, txtFile: File?) { + val stubTreeFromCls = KotlinClsStubBuilder().buildFileStub(FileContentImpl.createByFile(classFile))!! + myFixture.configureFromExistingVirtualFile(classFile) + val psiFile = myFixture.getFile() + val stubTreeFromDecompiledText = JetFileStubBuilder().buildStubTree(psiFile) + val expectedText = stubTreeFromDecompiledText.serializeToString() + Assert.assertEquals(expectedText, stubTreeFromCls.serializeToString()) + if (txtFile != null) { + JetTestUtils.assertEqualsToFile(txtFile, expectedText) + } + } + + private fun getClassFileToDecompile(sourcePath: String): VirtualFile { + val outDir = JetTestUtils.tmpDir("libForStubTest-" + sourcePath) + MockLibraryUtil.compileKotlin(sourcePath, outDir) + val root = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(outDir) + return root.findClassFileByName(lastSegment(sourcePath)) + } + + private fun lastSegment(sourcePath: String): String { + return Files.getNameWithoutExtension(sourcePath.split("/").last())!! + } +} + +private fun StubElement.serializeToString(): String { + return AbstractStubBuilderTest.serializeStubToString(this) +} + +fun VirtualFile.findClassFileByName(className: String): VirtualFile { + val files = LinkedHashSet() + VfsUtilCore.iterateChildrenRecursively( + this, + { virtualFile -> virtualFile.isDirectory() || virtualFile.getName().equals("$className.class") }, + { virtualFile -> if (!virtualFile.isDirectory()) files.addIfNotNull(virtualFile); true }) + + return files.single() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/ClsStubBuilderTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/ClsStubBuilderTestGenerated.java new file mode 100644 index 00000000000..4782ec56192 --- /dev/null +++ b/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/ClsStubBuilderTestGenerated.java @@ -0,0 +1,140 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.decompiler.stubBuilder; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.jet.JUnit3RunnerWithInners; +import org.jetbrains.jet.JetTestUtils; +import org.jetbrains.jet.test.InnerTestClasses; +import org.jetbrains.jet.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("idea/testData/decompiler/stubBuilder") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class ClsStubBuilderTestGenerated extends AbstractClsStubBuilderTest { + public void testAllFilesPresentInStubBuilder() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/decompiler/stubBuilder"), Pattern.compile("^([^\\.]+)$"), false); + } + + @TestMetadata("AnnotationClass") + public void testAnnotationClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/AnnotationClass/"); + doTest(fileName); + } + + @TestMetadata("Annotations") + public void testAnnotations() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/Annotations/"); + doTest(fileName); + } + + @TestMetadata("ClassMembers") + public void testClassMembers() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/ClassMembers/"); + doTest(fileName); + } + + @TestMetadata("ClassObject") + public void testClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/ClassObject/"); + doTest(fileName); + } + + @TestMetadata("DataClass") + public void testDataClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/DataClass/"); + doTest(fileName); + } + + @TestMetadata("Delegation") + public void testDelegation() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/Delegation/"); + doTest(fileName); + } + + @TestMetadata("DependencyOnNestedClasses") + public void testDependencyOnNestedClasses() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/DependencyOnNestedClasses/"); + doTest(fileName); + } + + @TestMetadata("Enum") + public void testEnum() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/Enum/"); + doTest(fileName); + } + + @TestMetadata("FlexibleTypes") + public void testFlexibleTypes() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/FlexibleTypes/"); + doTest(fileName); + } + + @TestMetadata("InheritingClasses") + public void testInheritingClasses() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/InheritingClasses/"); + doTest(fileName); + } + + @TestMetadata("NestedClasses") + public void testNestedClasses() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/NestedClasses/"); + doTest(fileName); + } + + @TestMetadata("Objects") + public void testObjects() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/Objects/"); + doTest(fileName); + } + + @TestMetadata("TopLevelMembersAnnotatedPackage") + public void testTopLevelMembersAnnotatedPackage() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/TopLevelMembersAnnotatedPackage/"); + doTest(fileName); + } + + @TestMetadata("TopLevelMembersPackage") + public void testTopLevelMembersPackage() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/TopLevelMembersPackage/"); + doTest(fileName); + } + + @TestMetadata("TypeBoundsAndDelegationSpecifiers") + public void testTypeBoundsAndDelegationSpecifiers() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/TypeBoundsAndDelegationSpecifiers/"); + doTest(fileName); + } + + @TestMetadata("TypeParams") + public void testTypeParams() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/TypeParams/"); + doTest(fileName); + } + + @TestMetadata("Types") + public void testTypes() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/Types/"); + doTest(fileName); + } +} diff --git a/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/ClsStubConsistencyTest.kt b/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/ClsStubConsistencyTest.kt new file mode 100644 index 00000000000..ef05570dfac --- /dev/null +++ b/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/ClsStubConsistencyTest.kt @@ -0,0 +1,52 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.decompiler.stubBuilder + +import org.jetbrains.jet.plugin.JetLightCodeInsightFixtureTestCase +import org.jetbrains.jet.lang.resolve.name.FqName +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils +import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinderFactory +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.jet.plugin.decompiler.textBuilder.buildDecompiledText +import org.jetbrains.jet.plugin.JetWithJdkAndRuntimeLightProjectDescriptor +import com.intellij.util.indexing.FileContentImpl +import org.jetbrains.jet.lang.psi.JetPsiFactory +import org.jetbrains.jet.lang.psi.stubs.elements.JetFileStubBuilder +import org.junit.Assert + +public class ClsStubConsistencyTest : JetLightCodeInsightFixtureTestCase() { + + private val STANDARD_LIBRARY_FQNAME = FqName("kotlin") + + public fun testConsistencyForKotlinPackage() { + val project = getProject() + val packageClassFqName = PackageClassUtils.getPackageClassFqName(STANDARD_LIBRARY_FQNAME) + val virtualFileFinder = VirtualFileFinderFactory.SERVICE.getInstance(project).create(GlobalSearchScope.allScope(project)) + val kotlinPackageFile = virtualFileFinder.findVirtualFileWithHeader(packageClassFqName)!! + + val decompiledText = buildDecompiledText(kotlinPackageFile).text + val clsStub = KotlinClsStubBuilder().buildFileStub(FileContentImpl.createByFile(kotlinPackageFile))!! + + val fileWithDecompiledText = JetPsiFactory(project).createFile(decompiledText) + val stubTreeFromDecompiledText = JetFileStubBuilder().buildStubTree(fileWithDecompiledText) + + val expectedText = stubTreeFromDecompiledText.serializeToString() + Assert.assertEquals(expectedText, clsStub.serializeToString()) + } + + override fun getProjectDescriptor() = JetWithJdkAndRuntimeLightProjectDescriptor.INSTANCE +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/ClsStubForWrongAbiVersionTest.kt b/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/ClsStubForWrongAbiVersionTest.kt new file mode 100644 index 00000000000..1ac899de0f6 --- /dev/null +++ b/idea/tests/org/jetbrains/jet/plugin/decompiler/stubBuilder/ClsStubForWrongAbiVersionTest.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.decompiler.stubBuilder + +import com.intellij.testFramework.LightProjectDescriptor +import org.jetbrains.jet.plugin.JetJdkAndLibraryProjectDescriptor +import java.io.File +import org.jetbrains.jet.JetTestCaseBuilder +import org.jetbrains.jet.plugin.decompiler.navigation.NavigateToDecompiledLibraryTest + +class ClsStubBuilderForWrongAbiVersionTest : AbstractClsStubBuilderTest() { + + fun testPackage() = testStubsForFileWithWrongAbiVersion("WrongPackage") + + fun testClass() = testStubsForFileWithWrongAbiVersion("ClassWithWrongAbiVersion") + + private fun testStubsForFileWithWrongAbiVersion(className: String) { + val root = NavigateToDecompiledLibraryTest.findTestLibraryRoot(myModule!!) + val result = root.findClassFileByName(className) + testClsStubsForFile(result, null) + } + + override fun getProjectDescriptor(): LightProjectDescriptor { + return JetJdkAndLibraryProjectDescriptor(File(JetTestCaseBuilder.getTestDataPathBase() + "/cli/jvm/wrongAbiVersionLib/bin")) + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/decompiler/textBuilder/DecompiledTextConsistencyTest.kt b/idea/tests/org/jetbrains/jet/plugin/decompiler/textBuilder/DecompiledTextConsistencyTest.kt index 6cdc1a1921e..fef3a07863b 100644 --- a/idea/tests/org/jetbrains/jet/plugin/decompiler/textBuilder/DecompiledTextConsistencyTest.kt +++ b/idea/tests/org/jetbrains/jet/plugin/decompiler/textBuilder/DecompiledTextConsistencyTest.kt @@ -35,18 +35,22 @@ import org.jetbrains.jet.lang.resolve.name.ClassId import org.jetbrains.jet.lang.resolve.MemberComparator import org.jetbrains.jet.lang.resolve.descriptorUtil.module import org.jetbrains.jet.context.GlobalContext +import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinderFactory +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.jet.plugin.decompiler.stubBuilder.KotlinClsStubBuilder +import com.intellij.util.indexing.FileContentImpl public class DecompiledTextConsistencyTest : JetLightCodeInsightFixtureTestCase() { private val STANDARD_LIBRARY_FQNAME = FqName("kotlin") public fun testConsistencyWithJavaDescriptorResolver() { + val project = getProject() val packageClassFqName = PackageClassUtils.getPackageClassFqName(STANDARD_LIBRARY_FQNAME) - val kotlinPackageClass = myFixture.getJavaFacade()!!.findClass(packageClassFqName.asString())!! - val kotlinPackageFile = kotlinPackageClass.getContainingFile()!!.getVirtualFile()!! - val projectBasedText = buildDecompiledText(kotlinPackageFile, ProjectBasedResolverForDecompiler(getProject())).text - val deserializerForDecompiler = DeserializerForDecompiler(kotlinPackageFile.getParent()!!, STANDARD_LIBRARY_FQNAME) - val deserializedText = buildDecompiledText(kotlinPackageFile, deserializerForDecompiler).text + val virtualFileFinder = VirtualFileFinderFactory.SERVICE.getInstance(project).create(GlobalSearchScope.allScope(project)) + val kotlinPackageFile = virtualFileFinder.findVirtualFileWithHeader(packageClassFqName)!! + val projectBasedText = buildDecompiledText(kotlinPackageFile, ProjectBasedResolverForDecompiler(project)).text + val deserializedText = buildDecompiledText(kotlinPackageFile).text Assert.assertEquals(projectBasedText, deserializedText) // sanity checks Assert.assertTrue(projectBasedText.contains("linkedListOf")) diff --git a/idea/tests/org/jetbrains/jet/plugin/decompiler/textBuilder/DecompiledTextForWrongAbiVersionTest.kt b/idea/tests/org/jetbrains/jet/plugin/decompiler/textBuilder/DecompiledTextForWrongAbiVersionTest.kt index 89524836372..88571dac6f0 100644 --- a/idea/tests/org/jetbrains/jet/plugin/decompiler/textBuilder/DecompiledTextForWrongAbiVersionTest.kt +++ b/idea/tests/org/jetbrains/jet/plugin/decompiler/textBuilder/DecompiledTextForWrongAbiVersionTest.kt @@ -27,13 +27,10 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.impl.compiled.ClsFileImpl import org.jetbrains.jet.plugin.decompiler.navigation.NavigateToDecompiledLibraryTest import org.jetbrains.jet.lang.psi.JetFile -import com.intellij.openapi.vfs.VfsUtilCore -import org.jetbrains.jet.utils.addIfNotNull -import java.util.LinkedHashSet -import java.util.regex.Pattern import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass.Kind.PACKAGE_PART import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass.Kind.ANONYMOUS_FUNCTION import org.jetbrains.jet.plugin.decompiler.AbstractInternalCompiledClassesTest +import org.jetbrains.jet.plugin.decompiler.stubBuilder.findClassFileByName public class DecompiledTextForWrongAbiVersionTest : AbstractInternalCompiledClassesTest() { @@ -47,23 +44,13 @@ public class DecompiledTextForWrongAbiVersionTest : AbstractInternalCompiledClas fun testAnonymousFunctionIsInvisibleWrongAbiVersion() = doTestNoPsiFilesAreBuiltForSyntheticClass(ANONYMOUS_FUNCTION) - fun testClassWithWrongAbiVersion() = doTest("ClassWithWrongAbiVersion\\.class") + fun testClassWithWrongAbiVersion() = doTest("ClassWithWrongAbiVersion") - fun testPackageFacadeWithWrongAbiVersion() = doTest("WrongPackage\\.class") + fun testPackageFacadeWithWrongAbiVersion() = doTest("WrongPackage") - fun doTest(namePattern: String) { + fun doTest(name: String) { val root = NavigateToDecompiledLibraryTest.findTestLibraryRoot(myModule!!) - - val pattern = Pattern.compile(namePattern) - val files = LinkedHashSet() - VfsUtilCore.iterateChildrenRecursively( - root, - { virtualFile -> virtualFile.isDirectory() || pattern.matcher(virtualFile.getName()).matches() }, - { virtualFile -> if (!virtualFile.isDirectory()) files.addIfNotNull(virtualFile); true }) - - Assert.assertTrue("Only file should matches the pattern '$namePattern', but found: $files", files.size == 1) - - checkFileWithWrongAbiVersion(files.single()) + checkFileWithWrongAbiVersion(root.findClassFileByName(name)) } private fun checkFileWithWrongAbiVersion(file: VirtualFile) { @@ -74,4 +61,4 @@ public class DecompiledTextForWrongAbiVersionTest : AbstractInternalCompiledClas val decompiledText = decompiledPsiFile!!.getText()!! Assert.assertTrue(decompiledText.contains(INCOMPATIBLE_ABI_VERSION_GENERAL_COMMENT)) } -} \ No newline at end of file +} diff --git a/idea/tests/org/jetbrains/jet/plugin/stubs/AbstractStubBuilderTest.java b/idea/tests/org/jetbrains/jet/plugin/stubs/AbstractStubBuilderTest.java index 9781be9f7e3..79d36556350 100644 --- a/idea/tests/org/jetbrains/jet/plugin/stubs/AbstractStubBuilderTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/stubs/AbstractStubBuilderTest.java @@ -32,9 +32,13 @@ public abstract class AbstractStubBuilderTest extends LightCodeInsightFixtureTes JetFile file = (JetFile) myFixture.configureByFile(sourcePath); JetFileStubBuilder jetStubBuilder = new JetFileStubBuilder(); StubElement lighterTree = jetStubBuilder.buildStubTree(file); - String stubTree = DebugUtil.stubTreeToString(lighterTree) - .replace(SpecialNames.SAFE_IDENTIFIER_FOR_NO_NAME.asString(), ""); + String stubTree = serializeStubToString(lighterTree); String expectedFile = sourcePath.replace(".kt", ".expected"); JetTestUtils.assertEqualsToFile(new File(expectedFile), stubTree); } + + @NotNull + public static String serializeStubToString(@NotNull StubElement stubElement) { + return DebugUtil.stubTreeToString(stubElement).replace(SpecialNames.SAFE_IDENTIFIER_FOR_NO_NAME.asString(), ""); + } }