IDEA-65234 Smart Completion: suggest most-probable method for delegation

This commit is contained in:
peter
2011-02-21 21:05:53 +01:00
parent ca8aaed24f
commit d91749f4c3
5 changed files with 57 additions and 4 deletions
@@ -79,11 +79,11 @@ public class RecursionWeigher extends CompletionWeigher {
if (object instanceof PsiMethod && positionMethod != null) {
final PsiMethod method = (PsiMethod)object;
if (PsiTreeUtil.isAncestor(reference, position, false) &&
Comparing.equal(method.getName(), positionMethod.getName()) &&
method.getParameterList().getParametersCount() == positionMethod.getParameterList().getParametersCount()) {
if (findDeepestSuper(method).equals(findDeepestSuper(positionMethod))) {
return isDelegate ? Result.delegation : Result.recursive;
Comparing.equal(method.getName(), positionMethod.getName())) {
if (!isDelegate && findDeepestSuper(method).equals(findDeepestSuper(positionMethod))) {
return Result.recursive;
}
return RecursionWeigher.Result.delegation;
}
}
@@ -0,0 +1,15 @@
class Goo {
int boo() {}
int doo() {}
int foo() {}
}
class Foooo {
Goo g;
int foo() {
return g.<caret>
}
}
@@ -0,0 +1,30 @@
/*
* Copyright 2000-2011 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class Goo {
int boo() {}
int doo() {}
int foo() {}
}
class Foooo {
Goo g;
int foo() {
return g.<caret>
}
}
@@ -201,4 +201,8 @@ public class NormalCompletionOrderingTest extends CompletionSortingTestCase {
assertFalse(getLookup().getItems().get(0).getObject() instanceof PsiClass);
}
public void testPreferSameNamedMethods() {
checkPreferredItems(0, "foo", "boo", "doo", "hashCode");
}
}
@@ -235,6 +235,10 @@ public class SmartTypeCompletionOrderingTest extends CompletionSortingTestCase {
assertPreferredItems(0, "myFoo", "myBar");
}
public void testPreferSameNamedMethods() {
checkPreferredItems(0, "foo", "boo", "doo", "hashCode");
}
@Override
protected String getBasePath() {
return JavaTestUtil.getRelativeJavaTestDataPath() + BASE_PATH;