Skip to content

Commit 646f50d

Browse files
cypressiousasedunov
authored andcommitted
Extract method refactoring should order parameters by first usage
Fixes #KT-16198
1 parent 1296c54 commit 646f50d

30 files changed

+74
-77
lines changed

idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2010-2016 JetBrains s.r.o.
2+
* Copyright 2010-2017 JetBrains s.r.o.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -39,7 +39,6 @@ import org.jetbrains.kotlin.cfg.pseudocodeTraverser.traverseFollowingInstruction
3939
import org.jetbrains.kotlin.descriptors.*
4040
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
4141
import org.jetbrains.kotlin.diagnostics.Errors
42-
import org.jetbrains.kotlin.idea.caches.resolve.analyze
4342
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
4443
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
4544
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
@@ -65,7 +64,6 @@ import org.jetbrains.kotlin.resolve.BindingContext
6564
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
6665
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsStatement
6766
import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny
68-
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
6967
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
7068
import org.jetbrains.kotlin.types.*
7169
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
@@ -694,7 +692,7 @@ fun ExtractionData.performAnalysis(): AnalysisResult {
694692
}
695693
}
696694
)
697-
val adjustedParameters = paramsInfo.parameters.filterTo(HashSet<Parameter>()) { it.refCount > 0 }
695+
val adjustedParameters = paramsInfo.parameters.filterTo(LinkedHashSet<Parameter>()) { it.refCount > 0 }
698696

699697
val receiverCandidates = adjustedParameters.filterTo(HashSet<Parameter>()) { it.receiverCandidate }
700698
val receiverParameter = if (receiverCandidates.size == 1 && !options.canWrapInWith) receiverCandidates.first() else null
@@ -705,7 +703,7 @@ fun ExtractionData.performAnalysis(): AnalysisResult {
705703
bindingContext,
706704
suggestFunctionNames(returnType),
707705
getDefaultVisibility(),
708-
adjustedParameters.sortedBy { it.name },
706+
adjustedParameters.toList(),
709707
receiverParameter,
710708
paramsInfo.typeParameters.sortedBy { it.originalDeclaration.name!! },
711709
paramsInfo.replacementMap,

idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/inferParameterInfo.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2010-2016 JetBrains s.r.o.
2+
* Copyright 2010-2017 JetBrains s.r.o.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -26,8 +26,6 @@ import org.jetbrains.kotlin.cfg.pseudocode.getExpectedTypePredicate
2626
import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.InstructionWithReceivers
2727
import org.jetbrains.kotlin.descriptors.*
2828
import org.jetbrains.kotlin.descriptors.annotations.Annotations
29-
import org.jetbrains.kotlin.diagnostics.Errors
30-
import org.jetbrains.kotlin.idea.caches.resolve.analyze
3129
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
3230
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
3331
import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator
@@ -47,7 +45,6 @@ import org.jetbrains.kotlin.resolve.calls.tasks.isSynthesizedInvoke
4745
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
4846
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
4947
import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor
50-
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
5148
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
5249
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
5350
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
@@ -62,7 +59,7 @@ import java.util.*
6259
internal class ParametersInfo {
6360
var errorMessage: AnalysisResult.ErrorMessage? = null
6461
val originalRefToParameter = MultiMap.create<KtSimpleNameExpression, MutableParameter>()
65-
val parameters = HashSet<MutableParameter>()
62+
val parameters = LinkedHashSet<MutableParameter>()
6663
val typeParameters = HashSet<TypeParameter>()
6764
val nonDenotableTypes = HashSet<KotlinType>()
6865
val replacementMap = MultiMap.create<KtSimpleNameExpression, Replacement>()
@@ -78,7 +75,7 @@ internal fun ExtractionData.inferParametersInfo(
7875
): ParametersInfo {
7976
val info = ParametersInfo()
8077

81-
val extractedDescriptorToParameter = HashMap<DeclarationDescriptor, MutableParameter>()
78+
val extractedDescriptorToParameter = LinkedHashMap<DeclarationDescriptor, MutableParameter>()
8279

8380
for (refInfo in getBrokenReferencesInfo(virtualBlock)) {
8481
val ref = refInfo.refExpr

idea/testData/refactoring/extractFunction/controlFlow/outputValues/outputValueWithReturn.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// WITH_RUNTIME
22
// PARAM_TYPES: kotlin.Int
33
// PARAM_TYPES: kotlin.Int
4-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
54
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
5+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
66
// SIBLING:
77
fun foo(a: Int): Int {
88
var b: Int = 1

idea/testData/refactoring/extractFunction/controlFlow/outputValues/outputValueWithReturn.kt.after

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
// WITH_RUNTIME
22
// PARAM_TYPES: kotlin.Int
33
// PARAM_TYPES: kotlin.Int
4-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
54
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
5+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
66
// SIBLING:
77
fun foo(a: Int): Int {
88
var b: Int = 1
99

10-
return i(a, b)
10+
return i(b, a)
1111
}
1212

13-
private fun i(a: Int, b: Int): Int {
13+
private fun i(b: Int, a: Int): Int {
1414
var b1 = b
1515
b1 += a
1616
println(b1)

idea/testData/refactoring/extractFunction/controlFlow/outputValues/outputValueWithSingleLineExpression.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// WITH_RUNTIME
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
5-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
65
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
6+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
77
// SIBLING:
88
fun foo(a: Int): Int {
99
var b: Int = 1

idea/testData/refactoring/extractFunction/controlFlow/outputValues/outputValueWithSingleLineExpression.kt.after

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22
// WITH_RUNTIME
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
5-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
65
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
6+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
77
// SIBLING:
88
fun foo(a: Int): Int {
99
var b: Int = 1
1010

11-
val pair = pair(a, b)
11+
val pair = pair(b, a)
1212
b = pair.second
1313
val t = pair.first
1414
println(b)
1515

1616
return t
1717
}
1818

19-
private fun pair(a: Int, b: Int): Pair<Int, Int> {
19+
private fun pair(b: Int, a: Int): Pair<Int, Int> {
2020
var b1 = b
2121
return Pair({ b1 += a; b1 }(), b1)
2222
}

idea/testData/refactoring/extractFunction/controlFlow/outputValues/pair.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// PARAM_TYPES: kotlin.Int
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
5-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
65
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
6+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
77
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
88
// SIBLING:
99
fun foo(a: Int): Int {

idea/testData/refactoring/extractFunction/controlFlow/outputValues/pair.kt.after

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@
22
// PARAM_TYPES: kotlin.Int
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
5-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
65
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
6+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
77
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
88
// SIBLING:
99
fun foo(a: Int): Int {
1010
var b: Int = 1
1111
var c: Int = 1
1212

13-
val pair = pair(a, b, c)
13+
val pair = pair(b, a, c)
1414
b = pair.first
1515
c = pair.second
1616

1717
return b + c
1818
}
1919

20-
private fun pair(a: Int, b: Int, c: Int): Pair<Int, Int> {
20+
private fun pair(b: Int, a: Int, c: Int): Pair<Int, Int> {
2121
var b1 = b
2222
var c1 = c
2323
b1 += a

idea/testData/refactoring/extractFunction/controlFlow/outputValues/pairWithNameClash.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// PARAM_TYPES: kotlin.Int
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
5-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
65
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
6+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
77
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
88
// SIBLING:
99
fun foo(a: Int): Int {

idea/testData/refactoring/extractFunction/controlFlow/outputValues/pairWithNameClash.kt.after

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@
22
// PARAM_TYPES: kotlin.Int
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
5-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
65
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
6+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
77
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
88
// SIBLING:
99
fun foo(a: Int): Int {
1010
var b: Int = 1
1111
var c: Int = 1
1212
val pair = 2
1313

14-
val pair1 = pair(a, b, c)
14+
val pair1 = pair(b, a, c)
1515
b = pair1.first
1616
c = pair1.second
1717

1818
return b + c
1919
}
2020

21-
private fun pair(a: Int, b: Int, c: Int): Pair<Int, Int> {
21+
private fun pair(b: Int, a: Int, c: Int): Pair<Int, Int> {
2222
var b1 = b
2323
var c1 = c
2424
b1 += a

idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValue.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// PARAM_TYPES: kotlin.Int
22
// PARAM_TYPES: kotlin.Int
3-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
43
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
4+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
55
// SIBLING:
66
fun foo(a: Int): Int {
77
var b: Int = 1

idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValue.kt.after

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
// PARAM_TYPES: kotlin.Int
22
// PARAM_TYPES: kotlin.Int
3-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
43
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
4+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
55
// SIBLING:
66
fun foo(a: Int): Int {
77
var b: Int = 1
88

9-
b = i(a, b)
9+
b = i(b, a)
1010

1111
return b
1212
}
1313

14-
private fun i(a: Int, b: Int): Int {
14+
private fun i(b: Int, a: Int): Int {
1515
var b1 = b
1616
b1 += a
1717
println(b1)

idea/testData/refactoring/extractFunction/controlFlow/outputValues/tooManyOutputValuesAsList.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
// PARAM_TYPES: kotlin.Int
66
// PARAM_TYPES: kotlin.Int
77
// PARAM_TYPES: kotlin.Int
8-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
98
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
9+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
1010
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
1111
// PARAM_DESCRIPTOR: var d: kotlin.Int defined in foo
1212
// PARAM_DESCRIPTOR: var e: kotlin.Int defined in foo

idea/testData/refactoring/extractFunction/controlFlow/outputValues/tooManyOutputValuesAsList.kt.after

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
// PARAM_TYPES: kotlin.Int
66
// PARAM_TYPES: kotlin.Int
77
// PARAM_TYPES: kotlin.Int
8-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
98
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
9+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
1010
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
1111
// PARAM_DESCRIPTOR: var d: kotlin.Int defined in foo
1212
// PARAM_DESCRIPTOR: var e: kotlin.Int defined in foo
@@ -17,7 +17,7 @@ fun foo(a: Int): Int {
1717
var d: Int = 1
1818
var e: Int = 1
1919

20-
val list = list(a, b, c, d, e)
20+
val list = list(b, a, c, d, e)
2121
b = list[0]
2222
c = list[1]
2323
d = list[2]
@@ -26,7 +26,7 @@ fun foo(a: Int): Int {
2626
return b + c + d + e
2727
}
2828

29-
private fun list(a: Int, b: Int, c: Int, d: Int, e: Int): List<Int> {
29+
private fun list(b: Int, a: Int, c: Int, d: Int, e: Int): List<Int> {
3030
var b1 = b
3131
var c1 = c
3232
var d1 = d

idea/testData/refactoring/extractFunction/controlFlow/outputValues/triple.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
55
// PARAM_TYPES: kotlin.Int
6-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
76
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
7+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
88
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
99
// PARAM_DESCRIPTOR: var d: kotlin.Int defined in foo
1010
// SIBLING:

idea/testData/refactoring/extractFunction/controlFlow/outputValues/triple.kt.after

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
55
// PARAM_TYPES: kotlin.Int
6-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
76
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
7+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
88
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
99
// PARAM_DESCRIPTOR: var d: kotlin.Int defined in foo
1010
// SIBLING:
@@ -13,15 +13,15 @@ fun foo(a: Int): Int {
1313
var c: Int = 1
1414
var d: Int = 1
1515

16-
val triple = triple(a, b, c, d)
16+
val triple = triple(b, a, c, d)
1717
b = triple.first
1818
c = triple.second
1919
d = triple.third
2020

2121
return b + c + d
2222
}
2323

24-
private fun triple(a: Int, b: Int, c: Int, d: Int): Triple<Int, Int, Int> {
24+
private fun triple(b: Int, a: Int, c: Int, d: Int): Triple<Int, Int, Int> {
2525
var b1 = b
2626
var c1 = c
2727
var d1 = d

idea/testData/refactoring/extractFunction/controlFlow/outputValues/usedAndUnusedOutputValues.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// PARAM_TYPES: kotlin.Int
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
5-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
65
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
6+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
77
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
88
// SIBLING:
99
fun foo(a: Int): Int {

idea/testData/refactoring/extractFunction/controlFlow/outputValues/usedAndUnusedOutputValues.kt.after

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22
// PARAM_TYPES: kotlin.Int
33
// PARAM_TYPES: kotlin.Int
44
// PARAM_TYPES: kotlin.Int
5-
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
65
// PARAM_DESCRIPTOR: var b: kotlin.Int defined in foo
6+
// PARAM_DESCRIPTOR: value-parameter a: kotlin.Int defined in foo
77
// PARAM_DESCRIPTOR: var c: kotlin.Int defined in foo
88
// SIBLING:
99
fun foo(a: Int): Int {
1010
var b: Int = 1
1111
var c: Int = 1
1212

13-
b = i(a, b, c)
13+
b = i(b, a, c)
1414

1515
return b
1616
}
1717

18-
private fun i(a: Int, b: Int, c: Int): Int {
18+
private fun i(b: Int, a: Int, c: Int): Int {
1919
var b1 = b
2020
var c1 = c
2121
b1 += a

idea/testData/refactoring/extractFunction/parameters/candidateTypes/nonNullableTypes.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
// PARAM_TYPES: kotlin.String, kotlin.Comparable<kotlin.String>, kotlin.CharSequence, java.io.Serializable, kotlin.Any
21
// PARAM_TYPES: X<kotlin.Any>
3-
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
2+
// PARAM_TYPES: kotlin.String, kotlin.Comparable<kotlin.String>, kotlin.CharSequence, java.io.Serializable, kotlin.Any
43
// PARAM_DESCRIPTOR: value-parameter x: X<kotlin.Any> defined in foo
4+
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
55
class X<T> {
66
fun add(t: T) {
77

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
// PARAM_TYPES: kotlin.String, kotlin.Comparable<kotlin.String>, kotlin.CharSequence, java.io.Serializable, kotlin.Any
21
// PARAM_TYPES: X<kotlin.Any>
3-
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
2+
// PARAM_TYPES: kotlin.String, kotlin.Comparable<kotlin.String>, kotlin.CharSequence, java.io.Serializable, kotlin.Any
43
// PARAM_DESCRIPTOR: value-parameter x: X<kotlin.Any> defined in foo
4+
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
55
class X<T> {
66
fun add(t: T) {
77

@@ -11,10 +11,10 @@ class X<T> {
1111
// SIBLING:
1212
fun foo(s: String?, x: X<Any>) {
1313
when {
14-
s != null -> __dummyTestFun__(s, x)
14+
s != null -> __dummyTestFun__(x, s)
1515
}
1616
}
1717

18-
private fun __dummyTestFun__(s: String, x: X<Any>) {
18+
private fun __dummyTestFun__(x: X<Any>, s: String) {
1919
x.add(s)
2020
}

0 commit comments

Comments
 (0)