Add more stub generator tests for external dependencies
This commit is contained in:
+10
@@ -0,0 +1,10 @@
|
||||
// !DUMP_DEPENDENCIES
|
||||
// FILE: JEnum.java
|
||||
|
||||
public enum JEnum {
|
||||
ONE, TWO, THREE;
|
||||
}
|
||||
|
||||
// FILE: javaEnum.kt
|
||||
|
||||
val test = JEnum.ONE
|
||||
@@ -0,0 +1,9 @@
|
||||
FILE /javaEnum.kt
|
||||
PROPERTY public val test: JEnum
|
||||
FIELD PROPERTY_BACKING_FIELD public val test: JEnum
|
||||
EXPRESSION_BODY
|
||||
GET_ENUM 'ONE' type=JEnum
|
||||
FUN DEFAULT_PROPERTY_ACCESSOR public fun <get-test>(): JEnum
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='<get-test>(): JEnum'
|
||||
GET_FIELD 'test: JEnum' type=JEnum origin=null
|
||||
@@ -0,0 +1,23 @@
|
||||
MODULE_FRAGMENT <test-module>
|
||||
EXTERNAL_PACKAGE_FRAGMENT <root>
|
||||
CLASS IR_EXTERNAL_DECLARATION_STUB ENUM_CLASS JEnum
|
||||
CONSTRUCTOR IR_EXTERNAL_DECLARATION_STUB public constructor JEnum()
|
||||
ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB enum entry ONE
|
||||
ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB enum entry THREE
|
||||
ENUM_ENTRY IR_EXTERNAL_DECLARATION_STUB enum entry TWO
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB protected final override fun clone(): kotlin.Any
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB protected/*protected and package*/ final override fun finalize(): kotlin.Unit
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final override fun getDeclaringClass(): java.lang.Class<JEnum!>!
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final override fun compareTo(other: JEnum!): kotlin.Int
|
||||
VALUE_PARAMETER value-parameter other: JEnum!
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final override fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||
VALUE_PARAMETER value-parameter other: kotlin.Any?
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final override fun hashCode(): kotlin.Int
|
||||
PROPERTY IR_EXTERNAL_DECLARATION_STUB public final override val name: kotlin.String
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final override fun <get-name>(): kotlin.String
|
||||
PROPERTY IR_EXTERNAL_DECLARATION_STUB public final override val ordinal: kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final override fun <get-ordinal>(): kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun toString(): kotlin.String
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final fun valueOf(value: kotlin.String): JEnum
|
||||
VALUE_PARAMETER value-parameter value: kotlin.String
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final fun values(): kotlin.Array<JEnum>
|
||||
@@ -0,0 +1,18 @@
|
||||
// !DUMP_DEPENDENCIES
|
||||
// FILE: J.java
|
||||
|
||||
public class J {
|
||||
public class JInner {
|
||||
public void foo() {}
|
||||
public int z = 0;
|
||||
}
|
||||
public void bar() {}
|
||||
public int x = 0;
|
||||
}
|
||||
|
||||
// FILE: javaInnerClass.kt
|
||||
|
||||
class Test1 : J() {
|
||||
val test = JInner()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
FILE /javaInnerClass.kt
|
||||
CLASS CLASS Test1
|
||||
$this: VALUE_PARAMETER this@Test1: Test1
|
||||
CONSTRUCTOR public constructor Test1()
|
||||
BLOCK_BODY
|
||||
DELEGATING_CONSTRUCTOR_CALL 'constructor J()'
|
||||
INSTANCE_INITIALIZER_CALL classDescriptor='Test1'
|
||||
PROPERTY public final val test: J.JInner
|
||||
FIELD PROPERTY_BACKING_FIELD public final val test: J.JInner
|
||||
EXPRESSION_BODY
|
||||
CALL 'constructor JInner()' type=J.JInner origin=null
|
||||
$this: GET_VAR 'this@Test1: Test1' type=Test1 origin=null
|
||||
FUN DEFAULT_PROPERTY_ACCESSOR public final fun <get-test>(): J.JInner
|
||||
$this: VALUE_PARAMETER this@Test1: Test1
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='<get-test>(): J.JInner'
|
||||
GET_FIELD 'test: J.JInner' type=J.JInner origin=null
|
||||
receiver: GET_VAR 'this@Test1: Test1' type=Test1 origin=null
|
||||
PROPERTY FAKE_OVERRIDE public final override var x: kotlin.Int
|
||||
FIELD FAKE_OVERRIDE public final override var x: kotlin.Int
|
||||
FUN FAKE_OVERRIDE public open override fun bar(): kotlin.Unit
|
||||
$this: VALUE_PARAMETER this@J: J
|
||||
FUN FAKE_OVERRIDE public open override fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||
$this: VALUE_PARAMETER this@Any: Any
|
||||
VALUE_PARAMETER value-parameter other: kotlin.Any?
|
||||
FUN FAKE_OVERRIDE public open override fun hashCode(): kotlin.Int
|
||||
$this: VALUE_PARAMETER this@Any: Any
|
||||
FUN FAKE_OVERRIDE public open override fun toString(): kotlin.String
|
||||
$this: VALUE_PARAMETER this@Any: Any
|
||||
@@ -0,0 +1,20 @@
|
||||
MODULE_FRAGMENT <test-module>
|
||||
EXTERNAL_PACKAGE_FRAGMENT <root>
|
||||
CLASS IR_EXTERNAL_DECLARATION_STUB CLASS J
|
||||
CONSTRUCTOR IR_EXTERNAL_DECLARATION_STUB public constructor J()
|
||||
PROPERTY IR_EXTERNAL_DECLARATION_STUB public final var x: kotlin.Int
|
||||
FIELD IR_EXTERNAL_DECLARATION_STUB public final var x: kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open fun bar(): kotlin.Unit
|
||||
CLASS IR_EXTERNAL_DECLARATION_STUB CLASS JInner
|
||||
CONSTRUCTOR IR_EXTERNAL_DECLARATION_STUB public constructor JInner()
|
||||
PROPERTY IR_EXTERNAL_DECLARATION_STUB public final var z: kotlin.Int
|
||||
FIELD IR_EXTERNAL_DECLARATION_STUB public final var z: kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open fun foo(): kotlin.Unit
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||
VALUE_PARAMETER value-parameter other: kotlin.Any?
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun hashCode(): kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun toString(): kotlin.String
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||
VALUE_PARAMETER value-parameter other: kotlin.Any?
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun hashCode(): kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun toString(): kotlin.String
|
||||
@@ -0,0 +1,13 @@
|
||||
// !DUMP_DEPENDENCIES
|
||||
// FILE: J.java
|
||||
|
||||
public class J {
|
||||
public static class JJ {
|
||||
public void foo() {}
|
||||
public static void bar() {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// FILE: javaNestedClass.kt
|
||||
fun test(jj: J.JJ) = jj.foo()
|
||||
@@ -0,0 +1,7 @@
|
||||
FILE /javaNestedClass.kt
|
||||
FUN public fun test(jj: J.JJ): kotlin.Unit
|
||||
VALUE_PARAMETER value-parameter jj: J.JJ
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test(J.JJ): Unit'
|
||||
CALL 'foo(): Unit' type=kotlin.Unit origin=null
|
||||
$this: GET_VAR 'value-parameter jj: J.JJ' type=J.JJ origin=null
|
||||
@@ -0,0 +1,16 @@
|
||||
MODULE_FRAGMENT <test-module>
|
||||
EXTERNAL_PACKAGE_FRAGMENT <root>
|
||||
CLASS IR_EXTERNAL_DECLARATION_STUB CLASS J
|
||||
CONSTRUCTOR IR_EXTERNAL_DECLARATION_STUB public constructor J()
|
||||
CLASS IR_EXTERNAL_DECLARATION_STUB CLASS JJ
|
||||
CONSTRUCTOR IR_EXTERNAL_DECLARATION_STUB public constructor JJ()
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open fun foo(): kotlin.Unit
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||
VALUE_PARAMETER value-parameter other: kotlin.Any?
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun hashCode(): kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun toString(): kotlin.String
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open fun bar(): kotlin.Unit
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||
VALUE_PARAMETER value-parameter other: kotlin.Any?
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun hashCode(): kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun toString(): kotlin.String
|
||||
@@ -0,0 +1,13 @@
|
||||
// !DUMP_DEPENDENCIES
|
||||
|
||||
// FILE: external.kt
|
||||
// EXTERNAL_FILE
|
||||
class Outer {
|
||||
inner class Inner {
|
||||
fun foo() {}
|
||||
}
|
||||
fun bar() {}
|
||||
}
|
||||
|
||||
// FILE: kotlinInnerClass.kt
|
||||
fun test(inner: Outer.Inner) = inner.foo()
|
||||
@@ -0,0 +1,7 @@
|
||||
FILE /kotlinInnerClass.kt
|
||||
FUN public fun test(inner: Outer.Inner): kotlin.Unit
|
||||
VALUE_PARAMETER value-parameter inner: Outer.Inner
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test(Outer.Inner): Unit'
|
||||
CALL 'foo(): Unit' type=kotlin.Unit origin=null
|
||||
$this: GET_VAR 'value-parameter inner: Outer.Inner' type=Outer.Inner origin=null
|
||||
@@ -0,0 +1,8 @@
|
||||
MODULE_FRAGMENT <built-ins module>
|
||||
EXTERNAL_PACKAGE_FRAGMENT kotlin
|
||||
CLASS IR_EXTERNAL_DECLARATION_STUB CLASS Any
|
||||
CONSTRUCTOR IR_EXTERNAL_DECLARATION_STUB public constructor Any()
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open fun hashCode(): kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open fun toString(): kotlin.String
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open operator fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||
VALUE_PARAMETER value-parameter other: kotlin.Any?
|
||||
@@ -0,0 +1,16 @@
|
||||
MODULE_FRAGMENT <test-module>
|
||||
EXTERNAL_PACKAGE_FRAGMENT <root>
|
||||
CLASS IR_EXTERNAL_DECLARATION_STUB CLASS Outer
|
||||
CONSTRUCTOR IR_EXTERNAL_DECLARATION_STUB public constructor Outer()
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final fun bar(): kotlin.Unit
|
||||
CLASS IR_EXTERNAL_DECLARATION_STUB CLASS Inner
|
||||
CONSTRUCTOR IR_EXTERNAL_DECLARATION_STUB public constructor Inner()
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public final fun foo(): kotlin.Unit
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||
VALUE_PARAMETER value-parameter other: kotlin.Any?
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun hashCode(): kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun toString(): kotlin.String
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun equals(other: kotlin.Any?): kotlin.Boolean
|
||||
VALUE_PARAMETER value-parameter other: kotlin.Any?
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun hashCode(): kotlin.Int
|
||||
FUN IR_EXTERNAL_DECLARATION_STUB public open override fun toString(): kotlin.String
|
||||
@@ -66,7 +66,7 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
|
||||
addReflect -> ConfigurationKind.ALL
|
||||
addRuntime -> ConfigurationKind.NO_KOTLIN_REFLECT
|
||||
else -> ConfigurationKind.JDK_ONLY
|
||||
};
|
||||
}
|
||||
|
||||
val configuration = createConfiguration(
|
||||
configurationKind, jdkKind,
|
||||
@@ -80,10 +80,10 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
|
||||
|
||||
protected abstract fun doTest(wholeFile: File, testFiles: List<TestFile>)
|
||||
|
||||
protected fun generateIrModule(ignoreErrors: Boolean = false): IrModuleFragment {
|
||||
protected fun generateIrModule(ignoreErrors: Boolean = false, shouldGenerate: (KtFile) -> Boolean = { true }): IrModuleFragment {
|
||||
assert(myFiles != null) { "myFiles not initialized" }
|
||||
assert(myEnvironment != null) { "myEnvironment not initialized" }
|
||||
return generateIrModule(myFiles.psiFiles, myEnvironment, Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors)))
|
||||
return generateIrModule(myFiles.psiFiles, myEnvironment, Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors)), shouldGenerate)
|
||||
}
|
||||
|
||||
protected fun generateIrFilesAsSingleModule(testFiles: List<TestFile>, ignoreErrors: Boolean = false): Map<TestFile, IrFile> {
|
||||
@@ -109,13 +109,19 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
|
||||
return textFile
|
||||
}
|
||||
|
||||
fun generateIrModule(ktFiles: List<KtFile>, environment: KotlinCoreEnvironment, psi2ir: Psi2IrTranslator): IrModuleFragment {
|
||||
val analysisResult = JvmResolveUtil.analyze(ktFiles, environment)
|
||||
fun generateIrModule(
|
||||
ktFilesToAnalyze: List<KtFile>,
|
||||
environment: KotlinCoreEnvironment,
|
||||
psi2ir: Psi2IrTranslator,
|
||||
shouldGenerate: (KtFile) -> Boolean
|
||||
): IrModuleFragment {
|
||||
val analysisResult = JvmResolveUtil.analyze(ktFilesToAnalyze, environment)
|
||||
if (!psi2ir.configuration.ignoreErrors) {
|
||||
analysisResult.throwIfError()
|
||||
AnalyzingUtils.throwExceptionOnErrors(analysisResult.bindingContext)
|
||||
}
|
||||
return generateIrModule(ktFiles, analysisResult.moduleDescriptor, analysisResult.bindingContext, psi2ir)
|
||||
val fileToGenerate = ktFilesToAnalyze.filter { shouldGenerate(it) }
|
||||
return generateIrModule(fileToGenerate, analysisResult.moduleDescriptor, analysisResult.bindingContext, psi2ir)
|
||||
}
|
||||
|
||||
fun generateIrModule(ktFiles: List<KtFile>, moduleDescriptor: ModuleDescriptor, bindingContext: BindingContext, ignoreErrors: Boolean = false) =
|
||||
|
||||
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.utils.rethrow
|
||||
import java.io.File
|
||||
@@ -60,6 +61,8 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
|
||||
}
|
||||
|
||||
protected fun doTestIrFileAgainstExpectations(dir: File, testFile: TestFile, irFile: IrFile) {
|
||||
if (testFile.isExternalFile()) return
|
||||
|
||||
val expectations = parseExpectations(dir, testFile)
|
||||
val irFileDump = irFile.dump()
|
||||
|
||||
@@ -234,9 +237,17 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
|
||||
|
||||
private val DUMP_DEPENDENCIES_PATTERN = Regex("""// !DUMP_DEPENDENCIES""")
|
||||
|
||||
private val EXTERNAL_FILE_PATTERN = Regex("""// EXTERNAL_FILE""")
|
||||
|
||||
internal fun shouldDumpDependencies(wholeFile: File): Boolean =
|
||||
DUMP_DEPENDENCIES_PATTERN.containsMatchIn(wholeFile.readText())
|
||||
|
||||
internal fun TestFile.isExternalFile() =
|
||||
EXTERNAL_FILE_PATTERN.containsMatchIn(content)
|
||||
|
||||
internal fun KtFile.isExternalFile() =
|
||||
EXTERNAL_FILE_PATTERN.containsMatchIn(text)
|
||||
|
||||
internal fun parseExpectations(dir: File, testFile: TestFile): Expectations {
|
||||
val regexps = ArrayList<RegexpInText>()
|
||||
val treeFiles = ArrayList<IrTreeFileLabel>()
|
||||
|
||||
@@ -1103,6 +1103,30 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/ir/irText/stubs"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("javaEnum.kt")
|
||||
public void testJavaEnum() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/javaEnum.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("javaInnerClass.kt")
|
||||
public void testJavaInnerClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/javaInnerClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("javaNestedClass.kt")
|
||||
public void testJavaNestedClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/javaNestedClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("kotlinInnerClass.kt")
|
||||
public void testKotlinInnerClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/kotlinInnerClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("simple.kt")
|
||||
public void testSimple() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/simple.kt");
|
||||
|
||||
+1
@@ -53,4 +53,5 @@ public class SourceMapGenerationSmokeTestGenerated extends AbstractSourceMapGene
|
||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/sourcemap/methodCallInMethod.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user