in meta/src/main/java/org/arend/lib/util/DefImplInstanceSearchParameters.java [37:78]
public boolean testGlobalInstance(@NotNull CoreFunctionDefinition instance) {
if (!(instance.getResultType() instanceof CoreClassCallExpression)) {
return false;
}
for (CoreClassField relationField : relationFields) {
CoreAbsExpression absImpl = ((CoreClassCallExpression) instance.getResultType()).getAbsImplementation(relationField);
if (absImpl == null) {
continue;
}
CoreExpression impl = absImpl.getExpression();
if (!(impl instanceof CoreLamExpression)) {
continue;
}
CoreParameter param1 = ((CoreLamExpression) impl).getParameters();
CoreParameter param2 = param1.getNext();
CoreExpression body = ((CoreLamExpression) impl).getBody();
if (!param2.hasNext()) {
if (!(body instanceof CoreLamExpression)) {
continue;
}
param2 = ((CoreLamExpression) body).getParameters();
body = ((CoreLamExpression) body).getBody();
}
if (param2.getNext().hasNext()) {
continue;
}
if (!(body instanceof CoreDefCallExpression)) {
continue;
}
CoreDefCallExpression defCall = (CoreDefCallExpression) body;
var args = defCall.getDefCallArguments();
if (defCall.getDefinition() == definition && args.size() >= 2 && args.get(args.size() - 2) instanceof CoreReferenceExpression && ((CoreReferenceExpression) args.get(args.size() - 2)).getBinding() == param1.getBinding() && args.get(args.size() - 1) instanceof CoreReferenceExpression && ((CoreReferenceExpression) args.get(args.size() - 1)).getBinding() == param2.getBinding()) {
this.relationField = relationField;
return true;
}
}
return false;
}