Fix functional type matching
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin.util;
|
package org.jetbrains.jet.plugin.util;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
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) {
|
private static <T> boolean checkListMatch(List<? extends T> list1, List<? extends T> list2, Predicate2<T, T> checker) {
|
||||||
int n = list1.size();
|
int n = list1.size();
|
||||||
if (list2.size() != n) return false;
|
if (list2.size() != n) return false;
|
||||||
@@ -205,7 +211,9 @@ public class JetPsiMatcher {
|
|||||||
public Boolean visitFunctionType(JetFunctionType type1, JetElement data) {
|
public Boolean visitFunctionType(JetFunctionType type1, JetElement data) {
|
||||||
JetFunctionType type2 = (JetFunctionType) 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
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user