blob: 396c2e480ec5172a19fef6b7e832511c5ca7fc67 [file] [log] [blame]
// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin.metadata.typealias_app
import com.android.tools.r8.kotlin.metadata.typealias_lib.API
import com.android.tools.r8.kotlin.metadata.typealias_lib.AlphaNaming
import com.android.tools.r8.kotlin.metadata.typealias_lib.Arr
import com.android.tools.r8.kotlin.metadata.typealias_lib.Arr2D
import com.android.tools.r8.kotlin.metadata.typealias_lib.Arr2DTester
import com.android.tools.r8.kotlin.metadata.typealias_lib.CWithConstructor
import com.android.tools.r8.kotlin.metadata.typealias_lib.CWithConstructorTester
import com.android.tools.r8.kotlin.metadata.typealias_lib.ClassWithCompanionC
import com.android.tools.r8.kotlin.metadata.typealias_lib.FunctionTester
import com.android.tools.r8.kotlin.metadata.typealias_lib.Impl
import com.android.tools.r8.kotlin.metadata.typealias_lib.InterfaceTester
import com.android.tools.r8.kotlin.metadata.typealias_lib.MyAdvancedMap
import com.android.tools.r8.kotlin.metadata.typealias_lib.MyI
import com.android.tools.r8.kotlin.metadata.typealias_lib.MyMapToSetOfInt
import com.android.tools.r8.kotlin.metadata.typealias_lib.OuterNested
import com.android.tools.r8.kotlin.metadata.typealias_lib.OuterNestedInner
import com.android.tools.r8.kotlin.metadata.typealias_lib.OuterTester
import com.android.tools.r8.kotlin.metadata.typealias_lib.SimpleClassTester
import com.android.tools.r8.kotlin.metadata.typealias_lib.StillCWithConstructor
import com.android.tools.r8.kotlin.metadata.typealias_lib.UnderlyingTypeTest
import com.android.tools.r8.kotlin.metadata.typealias_lib.UnusedTypeArgument
import com.android.tools.r8.kotlin.metadata.typealias_lib.VerticalClassMergingTester
import com.android.tools.r8.kotlin.metadata.typealias_lib.seq
import com.android.tools.r8.kotlin.metadata.typealias_lib.IntSet as IntSet1
class ProgramClass : Impl() {
override fun foo(): API {
super.foo()
println("Program::foo")
return this
}
}
fun testUnusedArgument() {
val u = UnusedTypeArgument<Int>();
}
fun testSimpleClass() {
val simple = object : AlphaNaming() { }
println(SimpleClassTester.f(SimpleClassTester.g(simple)).y)
}
fun testArr2D() {
val arr1d : Arr<Int> = Arr(42);
val arr2d : Arr2D<Int> = Arr2D(arr1d);
println(Arr2DTester.f(Arr2DTester.g(arr2d)).x.x);
}
fun testInterface() {
val myInstance = object : MyI {
override fun f() {
println("42");
}
}
InterfaceTester.f(InterfaceTester.g(myInstance)).f()
val map : MyMapToSetOfInt<Int> = HashMap();
val set : IntSet1 = mutableSetOf(42);
map.put(1, set);
println(InterfaceTester.i(InterfaceTester.h(map))[1]?.iterator()?.next() ?: "");
}
fun testFunctionTypes() {
FunctionTester.f(FunctionTester.g({ i : Int, a : Any ->
println(i)
println(a)
}))(42, "42")
FunctionTester.h(FunctionTester.i({ b ->
println(b)
false
}))(true)
}
fun testNestedClasses() {
val nested = OuterNested(42);
val myInner : OuterNestedInner = nested.Inner(1)
println(OuterTester.g(nested).y)
println(OuterTester.f(myInner).x)
}
fun testCompanion() {
ClassWithCompanionC.foo;
}
fun testConstructor() {
println(CWithConstructorTester.f(CWithConstructorTester.g(CWithConstructor(42))).x);
}
fun testUnderlyingType() {
val cWithConstructor = StillCWithConstructor(42)
println(UnderlyingTypeTest.f(UnderlyingTypeTest.g(cWithConstructor)).x)
val advancedMap : MyAdvancedMap = HashMap();
val nested = OuterNested(42);
val myInner : OuterNestedInner = nested.Inner(1)
advancedMap.put(nested, myInner);
val sameMap = UnderlyingTypeTest.h(UnderlyingTypeTest.i(advancedMap))
println(sameMap.get(nested)?.x)
}
fun testVerticalClassMerging() {
val apiImpl = VerticalClassMergingTester.produce()
VerticalClassMergingTester.passThrough(apiImpl).foo()
}
fun main() {
val instance = ProgramClass()
val l = seq(instance)
for (api in l) {
println(api == api.foo())
println(api.hey())
}
testUnusedArgument()
testSimpleClass()
testArr2D()
testInterface()
testFunctionTypes()
testNestedClasses()
testCompanion()
testConstructor()
testUnderlyingType();
testVerticalClassMerging();
}