Fix functional type matching

This commit is contained in:
Alexey Sedunov
2013-05-29 15:33:32 +04:00
parent 3a635c537e
commit 3a2be3be01
@@ -16,7 +16,6 @@
package org.jetbrains.jet.plugin.util;
import com.google.common.collect.Lists;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.*;
@@ -62,6 +61,13 @@ public class JetPsiMatcher {
}
};
private static final Predicate2<JetParameter, JetParameter> PARAMETER_TYPE_CHECKER = new Predicate2<JetParameter, JetParameter>() {
@Override
public boolean apply(JetParameter param1, JetParameter param2) {
return checkElementMatch(param1.getTypeReference(), param2.getTypeReference());
}
};
private static <T> boolean checkListMatch(List<? extends T> list1, List<? extends T> list2, Predicate2<T, T> checker) {
int n = list1.size();
if (list2.size() != n) return false;
@@ -205,7 +211,9 @@ public class JetPsiMatcher {
public Boolean visitFunctionType(JetFunctionType type1, JetElement data) {
JetFunctionType type2 = (JetFunctionType) data;
return checkListMatch(type1.getTypeArgumentsAsTypes(), type2.getTypeArgumentsAsTypes());
return checkElementMatch(type1.getReceiverTypeRef(), type2.getReceiverTypeRef()) &&
checkElementMatch(type1.getReturnTypeRef(), type2.getReturnTypeRef()) &&
checkListMatch(type1.getParameters(), type2.getParameters(), PARAMETER_TYPE_CHECKER);
}
@Override