Change Signature: Search & process as-property usages of Java methods (This ixes some muted tests on Change Signature for properties).
Improve test data
This commit is contained in:
committed by
Alexey Sedunov
parent
ad0c12935b
commit
8d3296e08d
+20
-1
@@ -23,6 +23,7 @@ import com.intellij.psi.*;
|
|||||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import com.intellij.psi.search.SearchScope;
|
import com.intellij.psi.search.SearchScope;
|
||||||
|
import com.intellij.psi.search.searches.MethodReferencesSearch;
|
||||||
import com.intellij.psi.search.searches.OverridingMethodsSearch;
|
import com.intellij.psi.search.searches.OverridingMethodsSearch;
|
||||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
@@ -59,6 +60,8 @@ import org.jetbrains.kotlin.idea.refactoring.CallableRefactoringKt;
|
|||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.*;
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.*;
|
||||||
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference;
|
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference;
|
||||||
import org.jetbrains.kotlin.idea.references.ReferenceUtilKt;
|
import org.jetbrains.kotlin.idea.references.ReferenceUtilKt;
|
||||||
|
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions;
|
||||||
|
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters;
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.UtilsKt;
|
import org.jetbrains.kotlin.idea.search.usagesSearch.UtilsKt;
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers;
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers;
|
||||||
import org.jetbrains.kotlin.idea.util.ScopeUtils;
|
import org.jetbrains.kotlin.idea.util.ScopeUtils;
|
||||||
@@ -253,6 +256,22 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Set<PsiReference> findReferences(PsiElement functionPsi) {
|
||||||
|
Set<PsiReference> result = new LinkedHashSet<PsiReference>();
|
||||||
|
|
||||||
|
SearchScope searchScope = functionPsi.getUseScope();
|
||||||
|
KotlinReferencesSearchOptions options = new KotlinReferencesSearchOptions(true, false, false, false);
|
||||||
|
KotlinReferencesSearchParameters parameters = new KotlinReferencesSearchParameters(functionPsi, searchScope, false, null, options);
|
||||||
|
result.addAll(ReferencesSearch.search(parameters).findAll());
|
||||||
|
if (functionPsi instanceof KtProperty || functionPsi instanceof KtParameter) {
|
||||||
|
for (PsiMethod lightMethod : LightClassUtilsKt.toLightMethods(functionPsi)) {
|
||||||
|
result.addAll(MethodReferencesSearch.search(lightMethod, searchScope, true).findAll());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private static void findOneMethodUsages(
|
private static void findOneMethodUsages(
|
||||||
@NotNull final JetCallableDefinitionUsage<?> functionUsageInfo,
|
@NotNull final JetCallableDefinitionUsage<?> functionUsageInfo,
|
||||||
final JetChangeInfo changeInfo,
|
final JetChangeInfo changeInfo,
|
||||||
@@ -267,7 +286,7 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro
|
|||||||
PsiElement functionPsi = functionUsageInfo.getElement();
|
PsiElement functionPsi = functionUsageInfo.getElement();
|
||||||
if (functionPsi == null) return;
|
if (functionPsi == null) return;
|
||||||
|
|
||||||
for (PsiReference reference : ReferencesSearch.search(functionPsi, functionPsi.getUseScope())) {
|
for (PsiReference reference : findReferences(functionPsi)) {
|
||||||
PsiElement element = reference.getElement();
|
PsiElement element = reference.getElement();
|
||||||
|
|
||||||
if (functionPsi instanceof KtClass && reference.resolve() != functionPsi) continue;
|
if (functionPsi instanceof KtClass && reference.resolve() != functionPsi) continue;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import java.lang.Override;
|
import java.lang.Override;
|
||||||
|
|
||||||
class J extends A {
|
public class J extends A {
|
||||||
private int p;
|
private int p;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -17,12 +17,15 @@ class J extends A {
|
|||||||
class Test {
|
class Test {
|
||||||
static void test() {
|
static void test() {
|
||||||
new A().getP("");
|
new A().getP("");
|
||||||
new A().setP("", 1);
|
new A().setP("", 3);
|
||||||
|
|
||||||
new B().getP("");
|
new AA().getP("");
|
||||||
new B().setP("", 2);
|
new AA().setP("", 3);
|
||||||
|
|
||||||
new J().getP("");
|
new J().getP("");
|
||||||
new J().setP("", 3);
|
new J().setP("", 3);
|
||||||
|
|
||||||
|
new B().getP("");
|
||||||
|
new B().setP("", 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,26 +1,35 @@
|
|||||||
public inline fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
|
public inline fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
|
||||||
|
|
||||||
open class A {
|
open class A {
|
||||||
open var <caret>String.p: Int = 1
|
open var String.p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class B: A() {
|
class AA : A() {
|
||||||
override var String.p: Int = 2
|
override var String.p: Int = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : J() {
|
||||||
|
override var String.p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
with(A()) {
|
with(A()) {
|
||||||
val t = "".p
|
val t = "".p
|
||||||
"".p = 1
|
"".p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(AA()) {
|
||||||
|
val t = "".p
|
||||||
|
"".p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(J()) {
|
||||||
|
val t = "".p
|
||||||
|
"".p = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
with(B()) {
|
with(B()) {
|
||||||
val t = "".p
|
val t = "".p
|
||||||
"".p = 2
|
"".p = 3
|
||||||
}
|
|
||||||
|
|
||||||
with(J()) {
|
|
||||||
val t = getP("")
|
|
||||||
setP("", 3)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import java.lang.Override;
|
import java.lang.Override;
|
||||||
|
|
||||||
class J extends A {
|
public class J extends A {
|
||||||
private int p;
|
private int p;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -17,12 +17,15 @@ class J extends A {
|
|||||||
class Test {
|
class Test {
|
||||||
static void test() {
|
static void test() {
|
||||||
new A().getP();
|
new A().getP();
|
||||||
new A().setP(1);
|
new A().setP(3);
|
||||||
|
|
||||||
new B().getP();
|
new AA().getP();
|
||||||
new B().setP(2);
|
new AA().setP(3);
|
||||||
|
|
||||||
new J().getP();
|
new J().getP();
|
||||||
new J().setP(3);
|
new J().setP(3);
|
||||||
|
|
||||||
|
new B().getP();
|
||||||
|
new B().setP(3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,23 +4,32 @@ open class A {
|
|||||||
open var <caret>p: Int = 1
|
open var <caret>p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class B: A() {
|
class AA : A() {
|
||||||
override var p: Int = 2
|
override var p: Int = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : J() {
|
||||||
|
override var p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
with(A()) {
|
with(A()) {
|
||||||
val t = p
|
val t = p
|
||||||
p = 1
|
p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(AA()) {
|
||||||
|
val t = p
|
||||||
|
p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(J()) {
|
||||||
|
val t = p
|
||||||
|
p = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
with(B()) {
|
with(B()) {
|
||||||
val t = p
|
val t = p
|
||||||
p = 2
|
p = 3
|
||||||
}
|
|
||||||
|
|
||||||
with(J()) {
|
|
||||||
val t = getP()
|
|
||||||
setP(3)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,5 +34,11 @@ class Test {
|
|||||||
|
|
||||||
new J().getS();
|
new J().getS();
|
||||||
new J().setS(4);
|
new J().setS(4);
|
||||||
|
|
||||||
|
new D().getS();
|
||||||
|
new D().setS(5);
|
||||||
|
|
||||||
|
new E().getS();
|
||||||
|
new E().setS(6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,12 @@ class C: A(0) {
|
|||||||
override var s: String = 1
|
override var s: String = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class D(override var s: String) : J()
|
||||||
|
|
||||||
|
class E : J() {
|
||||||
|
override var s: String = 1
|
||||||
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val t1 = A(0).s
|
val t1 = A(0).s
|
||||||
A(0).s = 1
|
A(0).s = 1
|
||||||
@@ -16,6 +22,12 @@ fun test() {
|
|||||||
val t3 = C().s
|
val t3 = C().s
|
||||||
C().s = 3
|
C().s = 3
|
||||||
|
|
||||||
val t4 = J().getS()
|
val t4 = J().s
|
||||||
J().setS(4)
|
J().s = 4
|
||||||
|
|
||||||
|
val t5 = D().s
|
||||||
|
D().s = 5
|
||||||
|
|
||||||
|
val t6 = E().s
|
||||||
|
E().s = 6
|
||||||
}
|
}
|
||||||
@@ -31,5 +31,11 @@ class Test {
|
|||||||
|
|
||||||
new J().getP();
|
new J().getP();
|
||||||
new J().setP(4);
|
new J().setP(4);
|
||||||
|
|
||||||
|
new D().getP();
|
||||||
|
new D().setP(5);
|
||||||
|
|
||||||
|
new E().getP();
|
||||||
|
new E().setP(6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,12 @@ class C: A(0) {
|
|||||||
override var p: Int = 1
|
override var p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class D(override var s: String) : J()
|
||||||
|
|
||||||
|
class E : J() {
|
||||||
|
override var s: String = 1
|
||||||
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val t1 = A(0).p
|
val t1 = A(0).p
|
||||||
A(0).p = 1
|
A(0).p = 1
|
||||||
@@ -16,6 +22,12 @@ fun test() {
|
|||||||
val t3 = C().p
|
val t3 = C().p
|
||||||
C().p = 3
|
C().p = 3
|
||||||
|
|
||||||
val t4 = J().getP()
|
val t4 = J().p
|
||||||
J().setP(4)
|
J().p = 4
|
||||||
|
|
||||||
|
val t5 = D().p
|
||||||
|
D().p = 5
|
||||||
|
|
||||||
|
val t6 = E().p
|
||||||
|
E().p = 6
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
import java.lang.Override;
|
import java.lang.Override;
|
||||||
|
|
||||||
class J extends A {
|
public class J extends A {
|
||||||
private int p;
|
private int p;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -20,12 +20,15 @@ class J extends A {
|
|||||||
class Test {
|
class Test {
|
||||||
static void test() {
|
static void test() {
|
||||||
new A().getS();
|
new A().getS();
|
||||||
new A().setS(1);
|
new A().setS(3);
|
||||||
|
|
||||||
new B().getS();
|
new AA().getS();
|
||||||
new B().setS(2);
|
new AA().setS(3);
|
||||||
|
|
||||||
new J().getS();
|
new J().getS();
|
||||||
new J().setS(3);
|
new J().setS(3);
|
||||||
|
|
||||||
|
new B().getS();
|
||||||
|
new B().setS(3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,35 @@
|
|||||||
|
public inline fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
|
||||||
|
|
||||||
open class A {
|
open class A {
|
||||||
open var <caret>s: String = 1
|
open var s: String = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class B: A() {
|
class AA : A() {
|
||||||
override var s: String = 2
|
override var s: String = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : J() {
|
||||||
|
override var s: String = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val t1 = A().s
|
with(A()) {
|
||||||
A().s = 1
|
val t = s
|
||||||
|
s = 3
|
||||||
|
}
|
||||||
|
|
||||||
val t2 = B().s
|
with(AA()) {
|
||||||
B().s = 2
|
val t = s
|
||||||
|
s = 3
|
||||||
|
}
|
||||||
|
|
||||||
val t3 = J().getS()
|
with(J()) {
|
||||||
J().setS(3)
|
val t = s
|
||||||
|
s = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(B()) {
|
||||||
|
val t = s
|
||||||
|
s = 3
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import java.lang.Override;
|
import java.lang.Override;
|
||||||
|
|
||||||
class J extends A {
|
public class J extends A {
|
||||||
private int p;
|
private int p;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -17,12 +17,15 @@ class J extends A {
|
|||||||
class Test {
|
class Test {
|
||||||
static void test() {
|
static void test() {
|
||||||
new A().getP();
|
new A().getP();
|
||||||
new A().setP(1);
|
new A().setP(3);
|
||||||
|
|
||||||
new B().getP();
|
new AA().getP();
|
||||||
new B().setP(2);
|
new AA().setP(3);
|
||||||
|
|
||||||
new J().getP();
|
new J().getP();
|
||||||
new J().setP(3);
|
new J().setP(3);
|
||||||
|
|
||||||
|
new B().getP();
|
||||||
|
new B().setP(3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,35 @@
|
|||||||
|
public inline fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
|
||||||
|
|
||||||
open class A {
|
open class A {
|
||||||
open var <caret>p: Int = 1
|
open var <caret>p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class B: A() {
|
class AA : A() {
|
||||||
override var p: Int = 2
|
override var p: Int = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : J() {
|
||||||
|
override var p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val t1 = A().p
|
with(A()) {
|
||||||
A().p = 1
|
val t = p
|
||||||
|
p = 3
|
||||||
|
}
|
||||||
|
|
||||||
val t2 = B().p
|
with(AA()) {
|
||||||
B().p = 2
|
val t = p
|
||||||
|
p = 3
|
||||||
|
}
|
||||||
|
|
||||||
val t3 = J().getP()
|
with(J()) {
|
||||||
J().setP(3)
|
val t = p
|
||||||
|
p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(B()) {
|
||||||
|
val t = p
|
||||||
|
p = 3
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+7
-4
@@ -1,6 +1,6 @@
|
|||||||
import java.lang.Override;
|
import java.lang.Override;
|
||||||
|
|
||||||
class J extends A {
|
public class J extends A {
|
||||||
private int p;
|
private int p;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -17,12 +17,15 @@ class J extends A {
|
|||||||
class Test {
|
class Test {
|
||||||
static void test() {
|
static void test() {
|
||||||
new A().getP("");
|
new A().getP("");
|
||||||
new A().setP("", 1);
|
new A().setP("", 3);
|
||||||
|
|
||||||
new B().getP("");
|
new AA().getP("");
|
||||||
new B().setP("", 2);
|
new AA().setP("", 3);
|
||||||
|
|
||||||
new J().getP("");
|
new J().getP("");
|
||||||
new J().setP("", 3);
|
new J().setP("", 3);
|
||||||
|
|
||||||
|
new B().getP("");
|
||||||
|
new B().setP("", 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,23 +4,32 @@ open class A {
|
|||||||
open var Int.<caret>p: Int = 1
|
open var Int.<caret>p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class B: A() {
|
class AA : A() {
|
||||||
override var Int.p: Int = 2
|
override var Int.p: Int = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : J() {
|
||||||
|
override var Int.p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
with(A()) {
|
with(A()) {
|
||||||
val t = "".p
|
val t = "".p
|
||||||
"".p = 1
|
"".p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(AA()) {
|
||||||
|
val t = "".p
|
||||||
|
"".p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(J()) {
|
||||||
|
val t = "".p
|
||||||
|
"".p = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
with(B()) {
|
with(B()) {
|
||||||
val t = "".p
|
val t = "".p
|
||||||
"".p = 2
|
"".p = 3
|
||||||
}
|
|
||||||
|
|
||||||
with(J()) {
|
|
||||||
val t = getP("")
|
|
||||||
setP("", 3)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+7
-4
@@ -1,6 +1,6 @@
|
|||||||
import java.lang.Override;
|
import java.lang.Override;
|
||||||
|
|
||||||
class J extends A {
|
public class J extends A {
|
||||||
private int p;
|
private int p;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -17,12 +17,15 @@ class J extends A {
|
|||||||
class Test {
|
class Test {
|
||||||
static void test() {
|
static void test() {
|
||||||
new A().getP("");
|
new A().getP("");
|
||||||
new A().setP("", 1);
|
new A().setP("", 3);
|
||||||
|
|
||||||
new B().getP("");
|
new AA().getP("");
|
||||||
new B().setP("", 2);
|
new AA().setP("", 3);
|
||||||
|
|
||||||
new J().getP("");
|
new J().getP("");
|
||||||
new J().setP("", 3);
|
new J().setP("", 3);
|
||||||
|
|
||||||
|
new B().getP("");
|
||||||
|
new B().setP("", 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,23 +4,32 @@ open class A {
|
|||||||
open var String.<caret>p: Int = 1
|
open var String.<caret>p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class B: A() {
|
class AA : A() {
|
||||||
override var String.p: Int = 2
|
override var String.p: Int = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : J() {
|
||||||
|
override var String.p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
with(A()) {
|
with(A()) {
|
||||||
val t = "".p
|
val t = "".p
|
||||||
"".p = 1
|
"".p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(AA()) {
|
||||||
|
val t = "".p
|
||||||
|
"".p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(J()) {
|
||||||
|
val t = "".p
|
||||||
|
"".p = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
with(B()) {
|
with(B()) {
|
||||||
val t = "".p
|
val t = "".p
|
||||||
"".p = 2
|
"".p = 3
|
||||||
}
|
|
||||||
|
|
||||||
with(J()) {
|
|
||||||
val t = getP("")
|
|
||||||
setP("", 3)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-3
@@ -1,17 +1,17 @@
|
|||||||
open class X: A() {
|
open class X: A() {
|
||||||
fun foo(x: Int): String? {
|
override fun foo(x: Int): String? {
|
||||||
return super.foo(1) + 1
|
return super.foo(1) + 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class Y: B() {
|
open class Y: B() {
|
||||||
fun foo(x: Int): String? {
|
override fun foo(x: Int): String? {
|
||||||
return s.length * 2
|
return s.length * 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class Z: X() {
|
open class Z: X() {
|
||||||
fun foo(x: Int): String? {
|
override fun foo(x: Int): String? {
|
||||||
return s.length
|
return s.length
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -1,17 +1,17 @@
|
|||||||
open class X: A() {
|
open class X: A() {
|
||||||
fun foo(s: String): Int {
|
override fun foo(s: String): Int {
|
||||||
return super.foo(s) + 1
|
return super.foo(s) + 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class Y: B() {
|
open class Y: B() {
|
||||||
fun foo(s: String): Int {
|
override fun foo(s: String): Int {
|
||||||
return s.length * 2
|
return s.length * 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class Z: X() {
|
open class Z: X() {
|
||||||
fun foo(s: String): Int {
|
override fun foo(s: String): Int {
|
||||||
return s.length
|
return s.length
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-4
@@ -1,6 +1,6 @@
|
|||||||
import java.lang.Override;
|
import java.lang.Override;
|
||||||
|
|
||||||
class J extends A {
|
public class J extends A {
|
||||||
private int p;
|
private int p;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -17,12 +17,15 @@ class J extends A {
|
|||||||
class Test {
|
class Test {
|
||||||
static void test() {
|
static void test() {
|
||||||
new A().getP();
|
new A().getP();
|
||||||
new A().setP(1);
|
new A().setP(3);
|
||||||
|
|
||||||
new B().getP();
|
new AA().getP();
|
||||||
new B().setP(2);
|
new AA().setP(3);
|
||||||
|
|
||||||
new J().getP();
|
new J().getP();
|
||||||
new J().setP(3);
|
new J().setP(3);
|
||||||
|
|
||||||
|
new B().getP();
|
||||||
|
new B().setP(3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,26 +1,35 @@
|
|||||||
public inline fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
|
public inline fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
|
||||||
|
|
||||||
open class A {
|
open class A {
|
||||||
open var <caret>p: Int = 1
|
open var p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class B: A() {
|
class AA : A() {
|
||||||
override var p: Int = 2
|
override var p: Int = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : J() {
|
||||||
|
override var p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
with(A()) {
|
with(A()) {
|
||||||
val t = p
|
val t = p
|
||||||
p = 1
|
p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(AA()) {
|
||||||
|
val t = p
|
||||||
|
p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(J()) {
|
||||||
|
val t = p
|
||||||
|
p = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
with(B()) {
|
with(B()) {
|
||||||
val t = p
|
val t = p
|
||||||
p = 2
|
p = 3
|
||||||
}
|
|
||||||
|
|
||||||
with(J()) {
|
|
||||||
val t = getP()
|
|
||||||
setP(3)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+7
-4
@@ -1,6 +1,6 @@
|
|||||||
import java.lang.Override;
|
import java.lang.Override;
|
||||||
|
|
||||||
class J extends A {
|
public class J extends A {
|
||||||
private int p;
|
private int p;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -17,12 +17,15 @@ class J extends A {
|
|||||||
class Test {
|
class Test {
|
||||||
static void test() {
|
static void test() {
|
||||||
new A().getP("");
|
new A().getP("");
|
||||||
new A().setP("", 1);
|
new A().setP("", 3);
|
||||||
|
|
||||||
new B().getP("");
|
new AA().getP("");
|
||||||
new B().setP("", 2);
|
new AA().setP("", 3);
|
||||||
|
|
||||||
new J().getP("");
|
new J().getP("");
|
||||||
new J().setP("", 3);
|
new J().setP("", 3);
|
||||||
|
|
||||||
|
new B().getP("");
|
||||||
|
new B().setP("", 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,23 +4,32 @@ open class A {
|
|||||||
open var String.<caret>p: Int = 1
|
open var String.<caret>p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class B: A() {
|
class AA : A() {
|
||||||
override var String.p: Int = 2
|
override var String.p: Int = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class B : J() {
|
||||||
|
override var String.p: Int = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
with(A()) {
|
with(A()) {
|
||||||
val t = "".p
|
val t = "".p
|
||||||
"".p = 1
|
"".p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(AA()) {
|
||||||
|
val t = "".p
|
||||||
|
"".p = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
with(J()) {
|
||||||
|
val t = "".p
|
||||||
|
"".p = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
with(B()) {
|
with(B()) {
|
||||||
val t = "".p
|
val t = "".p
|
||||||
"".p = 2
|
"".p = 3
|
||||||
}
|
|
||||||
|
|
||||||
with(J()) {
|
|
||||||
val t = getP("")
|
|
||||||
setP("", 3)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user