lambda: functional interface can contain multiple default methods

This commit is contained in:
Anna Kozlova
2012-08-31 15:34:16 +04:00
parent 328aa58823
commit 2c05b4d750
3 changed files with 25 additions and 6 deletions
@@ -216,12 +216,12 @@ public class LambdaUtil {
private static List<MethodSignature> findFunctionCandidates(PsiClass psiClass) {
if (psiClass.isInterface()) {
final List<MethodSignature> methods = new ArrayList<MethodSignature>();
final PsiMethod[] psiClassMethods = psiClass.getAllMethods();
for (PsiMethod psiMethod : psiClassMethods) {
final Collection<HierarchicalMethodSignature> visibleSignatures = psiClass.getVisibleSignatures();
for (HierarchicalMethodSignature signature : visibleSignatures) {
final PsiMethod psiMethod = signature.getMethod();
if (!psiMethod.hasModifierProperty(PsiModifier.ABSTRACT)) continue;
final PsiClass methodContainingClass = psiMethod.getContainingClass();
if (!overridesPublicObjectMethod(psiMethod)) {
methods.add(getMethodSignature(psiMethod, psiClass, methodContainingClass));
if (!overridesPublicObjectMethod(psiMethod) && !PsiUtil.isExtensionMethod(psiMethod)) {
methods.add(signature);
}
}
@@ -0,0 +1,17 @@
class Test {
public static final BinaryOperator<Integer> rPlus = (x, y) -> x + y;
interface BinaryOperator<T> extends Combiner<T,T,T> {
public T operate(T left, T right);
@Override
T combine(T t1, T t2) default {
return operate(t1, t2);
}
}
interface Combiner<T, U, V> {
V combine(T t, U u);
}
}
@@ -85,7 +85,9 @@ public class LambdaHighlightingTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testDefaultMethod() throws Exception {
doTest();
}
public void testNoInferenceResult() throws Exception {
doTest();