PSI Pattern Matching: Add equivalence tests for JetPsiUnifier
This commit is contained in:
@@ -340,4 +340,9 @@ public fun PsiElement.siblings(forward: Boolean = true, withItself: Boolean = tr
|
|||||||
val stepFun = if (forward) { (e: PsiElement) -> e.getNextSibling() } else { (e: PsiElement) -> e.getPrevSibling() }
|
val stepFun = if (forward) { (e: PsiElement) -> e.getNextSibling() } else { (e: PsiElement) -> e.getPrevSibling() }
|
||||||
val stream = stream(this, stepFun)
|
val stream = stream(this, stepFun)
|
||||||
return if (withItself) stream else stream.drop(1)
|
return if (withItself) stream else stream.drop(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun PsiElement.parents(withItself: Boolean = true): Stream<PsiElement> {
|
||||||
|
val stream = stream(this) { if (it is PsiFile) null else it.getParent() }
|
||||||
|
return if (withItself) stream else stream.drop(1)
|
||||||
}
|
}
|
||||||
@@ -119,6 +119,7 @@ import org.jetbrains.jet.lang.resolve.java.AbstractJavaTypeSubstitutorTest
|
|||||||
import org.jetbrains.jet.plugin.intentions.declarations.AbstractJoinLinesTest
|
import org.jetbrains.jet.plugin.intentions.declarations.AbstractJoinLinesTest
|
||||||
import org.jetbrains.jet.codegen.AbstractScriptCodegenTest
|
import org.jetbrains.jet.codegen.AbstractScriptCodegenTest
|
||||||
import org.jetbrains.jet.plugin.parameterInfo.AbstractFunctionParameterInfoTest
|
import org.jetbrains.jet.plugin.parameterInfo.AbstractFunctionParameterInfoTest
|
||||||
|
import org.jetbrains.jet.psi.patternMatching.AbstractJetPsiUnifierTest
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
System.setProperty("java.awt.headless", "true")
|
System.setProperty("java.awt.headless", "true")
|
||||||
@@ -309,6 +310,10 @@ fun main(args: Array<String>) {
|
|||||||
model("checker/infos", testMethod = "doTestWithInfos")
|
model("checker/infos", testMethod = "doTestWithInfos")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testClass(javaClass<AbstractJetPsiUnifierTest>()) {
|
||||||
|
model("unifier")
|
||||||
|
}
|
||||||
|
|
||||||
testClass(javaClass<AbstractCodeFragmentHighlightingTest>()) {
|
testClass(javaClass<AbstractCodeFragmentHighlightingTest>()) {
|
||||||
model("checker/codeFragments", extension = "kt", recursive = false)
|
model("checker/codeFragments", extension = "kt", recursive = false)
|
||||||
model("checker/codeFragments/imports", testMethod = "doTestWithImport", extension = "kt")
|
model("checker/codeFragments/imports", testMethod = "doTestWithImport", extension = "kt")
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo() {
|
||||||
|
when {
|
||||||
|
true -> <selection>{
|
||||||
|
val a = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = 1
|
||||||
|
}
|
||||||
|
val b = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = a() + 1
|
||||||
|
}
|
||||||
|
println(a() - b())
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
true -> {
|
||||||
|
val b = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = 1
|
||||||
|
}
|
||||||
|
val a = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = b() + 1
|
||||||
|
}
|
||||||
|
println(b() - a())
|
||||||
|
}
|
||||||
|
|
||||||
|
true -> {
|
||||||
|
val b = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = 1
|
||||||
|
}
|
||||||
|
val a = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = b() + 1
|
||||||
|
}
|
||||||
|
println(a() - b())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
val a = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = 1
|
||||||
|
}
|
||||||
|
val b = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = a() + 1
|
||||||
|
}
|
||||||
|
println(a() - b())
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val b = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = 1
|
||||||
|
}
|
||||||
|
val a = object: Function0<Int> {
|
||||||
|
override fun invoke(): Int = b() + 1
|
||||||
|
}
|
||||||
|
println(b() - a())
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo() {
|
||||||
|
when {
|
||||||
|
true -> <selection>{
|
||||||
|
fun a() = 1
|
||||||
|
fun b() = a() + 1
|
||||||
|
println(a() - b())
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
true -> {
|
||||||
|
fun b() = 1
|
||||||
|
fun a() = b() + 1
|
||||||
|
println(b() - a())
|
||||||
|
}
|
||||||
|
|
||||||
|
true -> {
|
||||||
|
fun b() = 1
|
||||||
|
fun a() = b() + 1
|
||||||
|
println(a() - b())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
fun a() = 1
|
||||||
|
fun b() = a() + 1
|
||||||
|
println(a() - b())
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
fun b() = 1
|
||||||
|
fun a() = b() + 1
|
||||||
|
println(b() - a())
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo() {
|
||||||
|
when {
|
||||||
|
true -> <selection>{
|
||||||
|
val a = 1
|
||||||
|
val b = a + 1
|
||||||
|
println(a - b)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
true -> {
|
||||||
|
val b = 1
|
||||||
|
val a = b + 1
|
||||||
|
println(b - a)
|
||||||
|
}
|
||||||
|
|
||||||
|
true -> {
|
||||||
|
val b = 1
|
||||||
|
val a = b + 1
|
||||||
|
println(a - b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
val a = 1
|
||||||
|
val b = a + 1
|
||||||
|
println(a - b)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val b = 1
|
||||||
|
val a = b + 1
|
||||||
|
println(b - a)
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
fun foo(a: Int) {
|
||||||
|
@A
|
||||||
|
while (true) {
|
||||||
|
@B
|
||||||
|
while (true) {
|
||||||
|
if (a > 0) break@A
|
||||||
|
if (a < 0) <selection>break@B</selection>
|
||||||
|
}
|
||||||
|
|
||||||
|
@B
|
||||||
|
while (true) {
|
||||||
|
if (a > 0) break@A
|
||||||
|
if (a < 0) break@B
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
break@B
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
fun foo(a: Int) {
|
||||||
|
@A
|
||||||
|
while (true) {
|
||||||
|
@B
|
||||||
|
while (true) {
|
||||||
|
if (a > 0) <selection>continue@A</selection>
|
||||||
|
if (a < 0) continue@B
|
||||||
|
}
|
||||||
|
|
||||||
|
@B
|
||||||
|
while (true) {
|
||||||
|
if (a > 0) continue@A
|
||||||
|
if (a < 0) continue@B
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
continue@A
|
||||||
|
|
||||||
|
continue@A
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(a: Int, b: Int) {
|
||||||
|
var t = a
|
||||||
|
<selection>do {
|
||||||
|
println((t))
|
||||||
|
t++
|
||||||
|
} while (t != (a + b))</selection>
|
||||||
|
|
||||||
|
var u = a
|
||||||
|
do {
|
||||||
|
println(t)
|
||||||
|
t++
|
||||||
|
} while (u != a + b)
|
||||||
|
|
||||||
|
while (t != a + b) {
|
||||||
|
println(t)
|
||||||
|
t++
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
println(t)
|
||||||
|
t++
|
||||||
|
} while (t != a + b)
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
do {
|
||||||
|
println((t))
|
||||||
|
t++
|
||||||
|
} while (t != (a + b))
|
||||||
|
|
||||||
|
do {
|
||||||
|
println(t)
|
||||||
|
t++
|
||||||
|
} while (t != a + b)
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(a: Int, b: Int) {
|
||||||
|
<selection>for (i in a - b..a + b) {
|
||||||
|
println(i*i)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
for (k in a - b..a + b) {
|
||||||
|
println(k*k)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i in a..a + b) {
|
||||||
|
println(i*i)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i in (a - b..a + b)) {
|
||||||
|
println(i*i)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
for (i in a - b..a + b) {
|
||||||
|
println(i*i)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (k in a - b..a + b) {
|
||||||
|
println(k*k)
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i in (a - b..a + b)) {
|
||||||
|
println(i*i)
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(a: Int, b: Int) {
|
||||||
|
<selection>if ((a) + b > 0) {
|
||||||
|
println(a*(b))
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
println(a*b)
|
||||||
|
|
||||||
|
if (a + b > 0) {
|
||||||
|
println(a*(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a + b > 0) {
|
||||||
|
println((a*b))
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
println(a + b)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
if ((a) + b > 0) {
|
||||||
|
println(a*(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a + b > 0) {
|
||||||
|
println(a*(b))
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(a: Int, b: Int) {
|
||||||
|
if ((a) + b > 0) {
|
||||||
|
println(a*b)
|
||||||
|
}
|
||||||
|
|
||||||
|
println(a*b)
|
||||||
|
|
||||||
|
if (a + b > (0)) {
|
||||||
|
println(a*(b))
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
println(a + b)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a + b > 0) {
|
||||||
|
println(a*b)
|
||||||
|
}
|
||||||
|
|
||||||
|
<selection>if (a + (b) > 0) {
|
||||||
|
println(a*b)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
println((a + b))
|
||||||
|
}</selection>
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
if (a + b > (0)) {
|
||||||
|
println(a*(b))
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
println(a + b)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a + (b) > 0) {
|
||||||
|
println(a*b)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
println((a + b))
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
inline fun run(f: () -> Unit) = f()
|
||||||
|
|
||||||
|
fun foo(a: Int) {
|
||||||
|
run {
|
||||||
|
run {
|
||||||
|
if (a > 0) <selection>return@foo</selection>
|
||||||
|
if (a < 0) return
|
||||||
|
return@foo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
return@foo
|
||||||
|
|
||||||
|
return@foo
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
fun foo() {
|
||||||
|
<selection>throw AssertionError()</selection>
|
||||||
|
throw NullPointerException()
|
||||||
|
AssertionError()
|
||||||
|
throw (AssertionError())
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
throw AssertionError()
|
||||||
|
|
||||||
|
throw (AssertionError())
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
fun foo(a: Int) {
|
||||||
|
if (a > 0) <selection>return</selection>
|
||||||
|
if (a < 0) return a
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
return
|
||||||
|
|
||||||
|
return
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
fun foo(a: Int): Int {
|
||||||
|
if (a > 0) <selection>return (a) + 1</selection>
|
||||||
|
if (a < 0) return
|
||||||
|
if (a == 0) return a
|
||||||
|
return (a + 1)
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
return (a) + 1
|
||||||
|
|
||||||
|
return (a + 1)
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(a: Int, b: Int) {
|
||||||
|
<selection>when((a)) {
|
||||||
|
1 -> println(b)
|
||||||
|
(2) -> println((a - b))
|
||||||
|
else -> println(a + b)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
when(a) {
|
||||||
|
1 -> println(b)
|
||||||
|
2 -> println(a - b)
|
||||||
|
}
|
||||||
|
|
||||||
|
when {
|
||||||
|
a == 1 -> println(b)
|
||||||
|
a == 2 -> println(a - b)
|
||||||
|
else -> println(a + b)
|
||||||
|
}
|
||||||
|
|
||||||
|
when(a) {
|
||||||
|
1 -> println(b)
|
||||||
|
2 -> println(a - b)
|
||||||
|
else -> println(a + b)
|
||||||
|
}
|
||||||
|
|
||||||
|
when(a) {
|
||||||
|
2 -> println(a - b)
|
||||||
|
1 -> println(b)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
when((a)) {
|
||||||
|
1 -> println(b)
|
||||||
|
(2) -> println((a - b))
|
||||||
|
else -> println(a + b)
|
||||||
|
}
|
||||||
|
|
||||||
|
when(a) {
|
||||||
|
1 -> println(b)
|
||||||
|
2 -> println(a - b)
|
||||||
|
else -> println(a + b)
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(a: Int, b: Int) {
|
||||||
|
<selection>when {
|
||||||
|
(a == 1) -> println(b)
|
||||||
|
a == 2 -> println(a - b)
|
||||||
|
else -> println(a + b)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
when {
|
||||||
|
a == 1 -> println(b)
|
||||||
|
a == 2 -> println(a - b)
|
||||||
|
}
|
||||||
|
|
||||||
|
when {
|
||||||
|
a == 1 -> println(b)
|
||||||
|
(a == 2) -> println((a - b))
|
||||||
|
else -> println(a + b)
|
||||||
|
}
|
||||||
|
|
||||||
|
when(a) {
|
||||||
|
2 -> println(a - b)
|
||||||
|
1 -> println(b)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
when {
|
||||||
|
(a == 1) -> println(b)
|
||||||
|
a == 2 -> println(a - b)
|
||||||
|
else -> println(a + b)
|
||||||
|
}
|
||||||
|
|
||||||
|
when {
|
||||||
|
a == 1 -> println(b)
|
||||||
|
(a == 2) -> println((a - b))
|
||||||
|
else -> println(a + b)
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(a: Int, b: Int) {
|
||||||
|
var t = a
|
||||||
|
<selection>while (t != (a + b)) {
|
||||||
|
println(t)
|
||||||
|
t++
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
var u = a
|
||||||
|
while (u != a + b) {
|
||||||
|
println(t)
|
||||||
|
t++
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
println(t)
|
||||||
|
t++
|
||||||
|
} while (t != a + b)
|
||||||
|
|
||||||
|
while (t != a + b) {
|
||||||
|
println((t))
|
||||||
|
t++
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
while (t != (a + b)) {
|
||||||
|
println(t)
|
||||||
|
t++
|
||||||
|
}
|
||||||
|
|
||||||
|
while (t != a + b) {
|
||||||
|
println((t))
|
||||||
|
t++
|
||||||
|
}
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
fun foo() {
|
||||||
|
{
|
||||||
|
val t = <selection>object {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}</selection>
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val v = object {
|
||||||
|
val x = 1
|
||||||
|
fun b() = x + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val w = object {
|
||||||
|
fun b() = a + 1
|
||||||
|
val a = 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
object {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
object {
|
||||||
|
fun b() = a + 1
|
||||||
|
val a = 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
fun foo() {
|
||||||
|
open class Z(p: Int)
|
||||||
|
trait T;
|
||||||
|
|
||||||
|
{
|
||||||
|
<selection>class A: Z(1), T</selection>
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class B: Z(1), T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class C: Z(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class D: Z(2), T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class E: T
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
class A: Z(1), T
|
||||||
|
|
||||||
|
class B: Z(1), T
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
fun foo() {
|
||||||
|
trait T
|
||||||
|
open class Z(p: Int): T;
|
||||||
|
|
||||||
|
{
|
||||||
|
<selection>class A: T by Z(1)</selection>
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class B: Z(1), T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class C: Z(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class D: T by Z(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class E: T by Z(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
class A: T by Z(1)
|
||||||
|
|
||||||
|
class D: T by Z(1)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fun foo() {
|
||||||
|
<selection>class A</selection>
|
||||||
|
|
||||||
|
class B {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class C {
|
||||||
|
val n: Int = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
class A
|
||||||
|
|
||||||
|
class B {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
fun foo() {
|
||||||
|
{
|
||||||
|
<selection>class A(p: Int = 1, val q: Int = p + 1) {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}</selection>
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class B(n: Int = 1, val q: Int = n + 1) {
|
||||||
|
fun b() = a + 1
|
||||||
|
val a = 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class C {
|
||||||
|
val x = 1
|
||||||
|
fun b() = x + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class D(n: Int = 1, val m: Int = n + 1) {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class E(val n: Int = 1, val q: Int = n + 1) {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
object F {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
class A(p: Int = 1, val q: Int = p + 1) {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class B(n: Int = 1, val q: Int = n + 1) {
|
||||||
|
fun b() = a + 1
|
||||||
|
val a = 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
fun foo() {
|
||||||
|
{
|
||||||
|
<selection>object A {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}</selection>
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class B {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
object C {
|
||||||
|
val x = 1
|
||||||
|
fun b() = x + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
object D {
|
||||||
|
fun b() = a + 1
|
||||||
|
val a = 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
object A {
|
||||||
|
val a = 1
|
||||||
|
fun b() = a + 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
object D {
|
||||||
|
fun b() = a + 1
|
||||||
|
val a = 1
|
||||||
|
val c: Int
|
||||||
|
get() = b() + 1
|
||||||
|
}
|
||||||
+42
@@ -0,0 +1,42 @@
|
|||||||
|
fun foo() {
|
||||||
|
<selection>{
|
||||||
|
open class Z<T>(p: T)
|
||||||
|
trait T
|
||||||
|
class A: Z<Int>(1), T
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
{
|
||||||
|
open class Z<A>(r: A)
|
||||||
|
trait T
|
||||||
|
class B: Z<Int>(1), T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
open class T<A>(r: A)
|
||||||
|
trait Z
|
||||||
|
class C: T<Int>(1), Z
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
open class Z<T>(q: T)
|
||||||
|
trait T
|
||||||
|
class D: Z<Int>(2), T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
open class Z<T>(q: T)
|
||||||
|
class E: Z<Int>(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
open class Z<A>(r: A)
|
||||||
|
trait T
|
||||||
|
class F: Z<String>("1"), T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
open class Z(r: Int)
|
||||||
|
trait T
|
||||||
|
class B: Z(1), T
|
||||||
|
}
|
||||||
|
}
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
open class Z<T>(p: T)
|
||||||
|
trait T
|
||||||
|
class A: Z<Int>(1), T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
open class Z<A>(r: A)
|
||||||
|
trait T
|
||||||
|
class B: Z<Int>(1), T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
open class T<A>(r: A)
|
||||||
|
trait Z
|
||||||
|
class C: T<Int>(1), Z
|
||||||
|
}
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
fun foo() {
|
||||||
|
<selection>class A {
|
||||||
|
fun a(x: Int): Int = b(x) + 1
|
||||||
|
fun b(y: Int): Int = a(y) - 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
class X
|
||||||
|
inner class Y
|
||||||
|
trait T
|
||||||
|
object O
|
||||||
|
|
||||||
|
val p = 1
|
||||||
|
val q = p + 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
class object {
|
||||||
|
fun f() = 1
|
||||||
|
val g = f() - 1
|
||||||
|
}
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
class B {
|
||||||
|
{
|
||||||
|
println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
class X
|
||||||
|
|
||||||
|
fun b(p: kotlin.Int): kotlin.Int = a(p) - 1
|
||||||
|
|
||||||
|
inner class Y
|
||||||
|
|
||||||
|
val p = 1
|
||||||
|
|
||||||
|
class object {
|
||||||
|
fun f() = 1
|
||||||
|
val g = f() - 1
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
println(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
object O
|
||||||
|
|
||||||
|
val q = p + 1
|
||||||
|
|
||||||
|
fun a(p: kotlin.Int): kotlin.Int = b(p) + 1
|
||||||
|
|
||||||
|
trait T
|
||||||
|
}
|
||||||
|
|
||||||
|
class C {
|
||||||
|
fun aa(x: Int): Int = bb(x) + 1
|
||||||
|
fun bb(y: Int): Int = aa(y) - 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
class X
|
||||||
|
inner class Y
|
||||||
|
trait T
|
||||||
|
object O
|
||||||
|
|
||||||
|
val p = 1
|
||||||
|
val q = p + 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
class object {
|
||||||
|
fun f() = 1
|
||||||
|
val g = f() - 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class D {
|
||||||
|
fun a(x: Int): Int = b(x) + 1
|
||||||
|
fun b(y: Int): Int = a(y) - 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
class X
|
||||||
|
inner class Y
|
||||||
|
trait T
|
||||||
|
object O
|
||||||
|
|
||||||
|
val q = p + 1
|
||||||
|
val p = 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
class object {
|
||||||
|
fun f() = 1
|
||||||
|
val g = f() - 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class E {
|
||||||
|
fun a(x: Int): Int = b(x) + 1
|
||||||
|
fun b(y: Int): Int = a(y) - 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
class XX
|
||||||
|
inner class Y
|
||||||
|
trait T
|
||||||
|
object O
|
||||||
|
|
||||||
|
val p = 1
|
||||||
|
val q = p + 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
class object {
|
||||||
|
fun f() = 1
|
||||||
|
val g = f() - 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
class A {
|
||||||
|
fun a(x: Int): Int = b(x) + 1
|
||||||
|
fun b(y: Int): Int = a(y) - 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
class X
|
||||||
|
inner class Y
|
||||||
|
trait T
|
||||||
|
object O
|
||||||
|
|
||||||
|
val p = 1
|
||||||
|
val q = p + 1
|
||||||
|
|
||||||
|
{
|
||||||
|
println(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
class object {
|
||||||
|
fun f() = 1
|
||||||
|
val g = f() - 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class B {
|
||||||
|
{
|
||||||
|
println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
class X
|
||||||
|
|
||||||
|
fun b(p: kotlin.Int): kotlin.Int = a(p) - 1
|
||||||
|
|
||||||
|
inner class Y
|
||||||
|
|
||||||
|
val p = 1
|
||||||
|
|
||||||
|
class object {
|
||||||
|
fun f() = 1
|
||||||
|
val g = f() - 1
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
println(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
object O
|
||||||
|
|
||||||
|
val q = p + 1
|
||||||
|
|
||||||
|
fun a(p: kotlin.Int): kotlin.Int = b(p) + 1
|
||||||
|
|
||||||
|
trait T
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
fun foo() {
|
||||||
|
open class Z(p: Int)
|
||||||
|
trait T
|
||||||
|
trait U;
|
||||||
|
|
||||||
|
{
|
||||||
|
<selection>class A: Z(1), T, U</selection>
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class B: Z(1), U, T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class C: Z(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class D: Z(1), T
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
class E: Z(1), U
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
class A: Z(1), T, U
|
||||||
|
|
||||||
|
class B: Z(1), U, T
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(f: (Int) -> Unit) {
|
||||||
|
<selection>{ (n: Int, s: String) ->
|
||||||
|
val a = n + 1
|
||||||
|
println(s)
|
||||||
|
f(a)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
{ (s: String, n: Int) ->
|
||||||
|
val a = n + 1
|
||||||
|
println(s)
|
||||||
|
f(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ (m: Int, r: String) ->
|
||||||
|
val b = m + 1
|
||||||
|
println(r)
|
||||||
|
f(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
val g: (Int, String) -> Unit = { (a, b) ->
|
||||||
|
val m = a + 1
|
||||||
|
println(b)
|
||||||
|
f(m)
|
||||||
|
}
|
||||||
|
}
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
{ (n: Int, s: String) ->
|
||||||
|
val a = n + 1
|
||||||
|
println(s)
|
||||||
|
f(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ (m: Int, r: String) ->
|
||||||
|
val b = m + 1
|
||||||
|
println(r)
|
||||||
|
f(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ (a, b) ->
|
||||||
|
val m = a + 1
|
||||||
|
println(b)
|
||||||
|
f(m)
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
fun foo(f: (Int) -> Unit) {
|
||||||
|
<selection>{
|
||||||
|
val a = 1
|
||||||
|
f(a)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
{
|
||||||
|
val b = 1
|
||||||
|
f(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
val g: () -> Unit = {
|
||||||
|
val c = 1
|
||||||
|
f(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
val a = 1
|
||||||
|
f(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val b = 1
|
||||||
|
f(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val c = 1
|
||||||
|
f(c)
|
||||||
|
}
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(f: (Int) -> Unit) {
|
||||||
|
{ (m: Int, n: Int, s: String) ->
|
||||||
|
val a = n + m
|
||||||
|
println(s)
|
||||||
|
f(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ (n: Int, s: String) ->
|
||||||
|
val a = n + 1
|
||||||
|
println(s)
|
||||||
|
f(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
<selection>{ Int.(n: Int, s: String) ->
|
||||||
|
val a = n + this
|
||||||
|
println(s)
|
||||||
|
f(a)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
{ Int.(m: Int, r: String) ->
|
||||||
|
val b = m + this
|
||||||
|
println(r)
|
||||||
|
f(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
val g: Int.(Int, String) -> Unit = { (a, b) ->
|
||||||
|
val m = a + this
|
||||||
|
println(b)
|
||||||
|
f(m)
|
||||||
|
}
|
||||||
|
}
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
{ Int.(n: Int, s: String) ->
|
||||||
|
val a = n + this
|
||||||
|
println(s)
|
||||||
|
f(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ Int.(m: Int, r: String) ->
|
||||||
|
val b = m + this
|
||||||
|
println(r)
|
||||||
|
f(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ (a, b) ->
|
||||||
|
val m = a + this
|
||||||
|
println(b)
|
||||||
|
f(m)
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
fun foo(f: (Int) -> Unit) {
|
||||||
|
<selection>{ (n: Int) ->
|
||||||
|
val a = n + 1
|
||||||
|
f(a)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
val x: (Int) -> Unit = {
|
||||||
|
val a = it + 1
|
||||||
|
f(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ (m: Int) ->
|
||||||
|
val b = m + 1
|
||||||
|
f(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
val g: (Int) -> Unit = { a ->
|
||||||
|
val m = a + 1
|
||||||
|
f(m)
|
||||||
|
}
|
||||||
|
}
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
{ (n: Int) ->
|
||||||
|
val a = n + 1
|
||||||
|
f(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val a = it + 1
|
||||||
|
f(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ (m: Int) ->
|
||||||
|
val b = m + 1
|
||||||
|
f(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
{ a ->
|
||||||
|
val m = a + 1
|
||||||
|
f(m)
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
fun foo() {
|
||||||
|
val a: () -> Unit = <selection>{
|
||||||
|
val t = 1
|
||||||
|
t
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
{
|
||||||
|
val v = 1
|
||||||
|
v
|
||||||
|
}
|
||||||
|
|
||||||
|
val b = {
|
||||||
|
val u = 1
|
||||||
|
u
|
||||||
|
}
|
||||||
|
}
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
val t = 1
|
||||||
|
t
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val v = 1
|
||||||
|
v
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val u = 1
|
||||||
|
u
|
||||||
|
}
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
class A(val n: Int)
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
<selection>fun foo<T: A>(t: T): Int {
|
||||||
|
fun A.a(n: Int): Int = this.n + n
|
||||||
|
fun A.b(n: Int): Int = this.n - n
|
||||||
|
|
||||||
|
return t.n + A(1).a(2) - A(2).b(1)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
fun foo<U: A>(u: U): Int {
|
||||||
|
fun A.x(m: Int): Int = n + m
|
||||||
|
fun A.y(n: Int): Int = this.n - n
|
||||||
|
|
||||||
|
return u.n + A(1).x(2) - A(2).y(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo<V: A>(v: V): Int {
|
||||||
|
fun A.a(n: Int): Int = this.n + n
|
||||||
|
fun A.b(n: Int): Int = this.n + n
|
||||||
|
|
||||||
|
return v.n + A(1).a(2) - A(2).b(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
fun foo<T: A>(t: T): Int {
|
||||||
|
fun A.a(n: Int): Int = this.n + n
|
||||||
|
fun A.b(n: Int): Int = this.n - n
|
||||||
|
|
||||||
|
return t.n + A(1).a(2) - A(2).b(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo<U: A>(u: U): Int {
|
||||||
|
fun A.x(m: Int): Int = n + m
|
||||||
|
fun A.y(n: Int): Int = this.n - n
|
||||||
|
|
||||||
|
return u.n + A(1).x(2) - A(2).y(1)
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
class A(val n: Int)
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
<selection>fun foo<T: A>(t: T): Int {
|
||||||
|
fun a(p: Int): Int = p + 1
|
||||||
|
fun b(q: Int): Int = q - 1
|
||||||
|
|
||||||
|
return t.n + a(1) - b(2)
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
fun foo<U: A>(u: U): Int {
|
||||||
|
fun x(a: Int): Int = a + 1
|
||||||
|
fun y(a: Int): Int = a - 1
|
||||||
|
|
||||||
|
return u.n + x(1) - y(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo<V: A>(v: V): Int {
|
||||||
|
fun a(p: Int): Int = p + 1
|
||||||
|
fun b(p: Int): Int = p + 1
|
||||||
|
|
||||||
|
return v.n + a(1) - b(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun a(p: Int): Int = p + 1
|
||||||
|
fun b(q: Int): Int = q - 1
|
||||||
|
|
||||||
|
fun foo<W: A>(w: W): Int {
|
||||||
|
return w.n + a(1) - b(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
fun foo<T: A>(t: T): Int {
|
||||||
|
fun a(p: Int): Int = p + 1
|
||||||
|
fun b(q: Int): Int = q - 1
|
||||||
|
|
||||||
|
return t.n + a(1) - b(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo<U: A>(u: U): Int {
|
||||||
|
fun x(a: Int): Int = a + 1
|
||||||
|
fun y(a: Int): Int = a - 1
|
||||||
|
|
||||||
|
return u.n + x(1) - y(2)
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
fun foo1(): Int <selection>{
|
||||||
|
val a = 1
|
||||||
|
var b = 2
|
||||||
|
|
||||||
|
return a - b
|
||||||
|
}</selection>
|
||||||
|
|
||||||
|
fun foo2(): Int {
|
||||||
|
val x = 1
|
||||||
|
var y = 2
|
||||||
|
|
||||||
|
return x - y
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo3(): Int {
|
||||||
|
val x = 1
|
||||||
|
val y = 2
|
||||||
|
|
||||||
|
return x - y
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo4(): Int {
|
||||||
|
val a = 1
|
||||||
|
var b = 0
|
||||||
|
|
||||||
|
return a - b
|
||||||
|
}
|
||||||
|
|
||||||
|
val a = 1
|
||||||
|
var b = 2
|
||||||
|
|
||||||
|
fun foo5(): Int {
|
||||||
|
return a - b
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
val a = 1
|
||||||
|
var b = 2
|
||||||
|
|
||||||
|
return a - b
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
val x = 1
|
||||||
|
var y = 2
|
||||||
|
|
||||||
|
return x - y
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
data class A(val a: Int, val b: String)
|
||||||
|
|
||||||
|
fun foo1() {
|
||||||
|
<selection>val (a, b) = A(1, "2")</selection>
|
||||||
|
val (u, v) = A(2, "2")
|
||||||
|
val (x, y) = A(1, "2")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo2() {
|
||||||
|
fun A.component1(): Int = a + 1
|
||||||
|
|
||||||
|
val (aa, bb) = A(1, "2")
|
||||||
|
val (uu, vv) = A(2, "2")
|
||||||
|
val (xx, yy) = A(1, "2")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo3() {
|
||||||
|
val (u, v) = A(2, "2")
|
||||||
|
val (x, y) = A(1, "2")
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
val (a, b) = A(1, "2")
|
||||||
|
|
||||||
|
val (x, y) = A(1, "2")
|
||||||
|
|
||||||
|
val (x, y) = A(1, "2")
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
fun foo() {
|
||||||
|
trait T
|
||||||
|
|
||||||
|
<selection>fun bar1<A, B, C>(a: A, b: B, c: C): A where B: A, C: B, C: T = c</selection>
|
||||||
|
|
||||||
|
fun bar2<X, Y: X, Z>(x: X, y: Y, z: Z): X where Z: Y, Z: T = z
|
||||||
|
|
||||||
|
fun bar3<X, Y, Z: Y>(x: X, y: Y, z: Z): X where Y: X, Z: T = z
|
||||||
|
|
||||||
|
fun bar4<X, Y: X, Z: Y>(x: X, y: Y, z: Z): X where Z: T = z
|
||||||
|
|
||||||
|
fun bar5<X, Y: X, Z: T>(x: X, y: Y, z: Z): X where Z: Y = z
|
||||||
|
|
||||||
|
fun bar6<X, Z: Y, Y>(x: X, y: Y, z: Z): X where Y: X, Z: T = z
|
||||||
|
|
||||||
|
fun bar7<X, Y: T, Z>(x: X, y: Y, z: Z): X where Y: X, Z: Y, Z: T = z
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
fun bar1<A, B, C>(a: A, b: B, c: C): A where B: A, C: B, C: T = c
|
||||||
|
|
||||||
|
fun bar2<X, Y: X, Z>(x: X, y: Y, z: Z): X where Z: Y, Z: T = z
|
||||||
|
|
||||||
|
fun bar3<X, Y, Z: Y>(x: X, y: Y, z: Z): X where Y: X, Z: T = z
|
||||||
|
|
||||||
|
fun bar4<X, Y: X, Z: Y>(x: X, y: Y, z: Z): X where Z: T = z
|
||||||
|
|
||||||
|
fun bar5<X, Y: X, Z: T>(x: X, y: Y, z: Z): X where Z: Y = z
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
fun foo(a: Array<Int>) {
|
||||||
|
<selection>a[0]</selection>
|
||||||
|
a[1]
|
||||||
|
a[0] = a[0] + a[1]
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
a[0]
|
||||||
|
|
||||||
|
a[0]
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
class A {
|
||||||
|
inner class B
|
||||||
|
|
||||||
|
inner class C
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
<selection>::B</selection>
|
||||||
|
::C
|
||||||
|
A::B
|
||||||
|
A::C
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
::B
|
||||||
|
|
||||||
|
A::B
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
class A {
|
||||||
|
fun bar() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun baz() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
<selection>::bar</selection>
|
||||||
|
::baz
|
||||||
|
A::bar
|
||||||
|
A::baz
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
::bar
|
||||||
|
|
||||||
|
A::bar
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
class Bar {
|
||||||
|
{
|
||||||
|
Foo()()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Foo() {
|
||||||
|
fun Bar.invoke() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foobar(f: Foo) {
|
||||||
|
<selection>Bar().f()</selection>
|
||||||
|
Bar().f()
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
Bar().f()
|
||||||
|
|
||||||
|
Bar().f()
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun Int.contains(n: Int): Boolean = n < this
|
||||||
|
|
||||||
|
fun foo(n: Int): Int {
|
||||||
|
if (n in 1) {
|
||||||
|
println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
when(n) {
|
||||||
|
<selection>in 1</selection> -> println(1)
|
||||||
|
in 2 -> println(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (1.contains(n)) {
|
||||||
|
println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
when(n) {
|
||||||
|
in 1 -> println(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
in 1
|
||||||
|
|
||||||
|
in 1
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
fun bar(n: Int): Int = n + 1
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
<selection>bar(1, 2)</selection>
|
||||||
|
bar(1)
|
||||||
|
bar(1, 2)
|
||||||
|
bar(2, 1)
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
bar(1, 2)
|
||||||
|
|
||||||
|
bar(1, 2)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
class A {
|
||||||
|
fun bar() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun A.foo() {
|
||||||
|
<selection>bar()</selection>
|
||||||
|
this.bar()
|
||||||
|
this@foo.bar()
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
bar()
|
||||||
|
|
||||||
|
this.bar()
|
||||||
|
|
||||||
|
this@foo.bar()
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
class A {
|
||||||
|
fun bar() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
<selection>bar()</selection>
|
||||||
|
this.bar()
|
||||||
|
this@A.bar()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
bar()
|
||||||
|
|
||||||
|
this.bar()
|
||||||
|
|
||||||
|
this@A.bar()
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
fun Any.s(): String = toString()
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
Any().s()
|
||||||
|
<selection>Any()?.s()</selection>
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Any()?.s()
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
fun foo() {
|
||||||
|
<selection>bar(1, 2)</selection>
|
||||||
|
bar(2, 1)
|
||||||
|
bar(1, 2)
|
||||||
|
bar(1)
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
bar(1, 2)
|
||||||
|
|
||||||
|
bar(1, 2)
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fun bar(vararg n: Int) {}
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
<selection>bar(1, 2, 3)</selection>
|
||||||
|
bar(1, 2)
|
||||||
|
bar(1, 2, 3)
|
||||||
|
bar(*IntArray(3))
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
bar(1, 2, 3)
|
||||||
|
|
||||||
|
bar(1, 2, 3)
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
fun foo(a: Any, b: Any) {
|
||||||
|
<selection>a as String</selection>
|
||||||
|
a is String
|
||||||
|
b as String
|
||||||
|
a as? String
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
a as String
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
fun foo(a: Any, b: Any) {
|
||||||
|
<selection>a is String</selection>
|
||||||
|
a as String
|
||||||
|
b is String
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
a is String
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
fun foo(a: Any, b: Any) {
|
||||||
|
<selection>a as? String</selection>
|
||||||
|
b as String
|
||||||
|
a is String
|
||||||
|
a as String
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
a as? String
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user