private Optional<List<Type>> synthesizeLambdaArgumentTypes( BoundVariables.Builder bindings, List<TypeSignature> formalLambdaArgumentTypeSignatures) { ImmutableList.Builder<Type> lambdaArgumentTypesBuilder = ImmutableList.builder(); for (TypeSignature lambdaArgument : formalLambdaArgumentTypeSignatures) { if (typeVariableConstraints.containsKey(lambdaArgument.getBase())) { if (!bindings.containsTypeVariable(lambdaArgument.getBase())) { return Optional.empty(); } Type typeVariable = bindings.getTypeVariable(lambdaArgument.getBase()); lambdaArgumentTypesBuilder.add(typeVariable); } else { lambdaArgumentTypesBuilder.add(typeManager.getType(lambdaArgument)); } } return Optional.of(lambdaArgumentTypesBuilder.build()); }
private Optional<List<Type>> synthesizeLambdaArgumentTypes( BoundVariables.Builder bindings, List<TypeSignature> formalLambdaArgumentTypeSignatures) { ImmutableList.Builder<Type> lambdaArgumentTypesBuilder = ImmutableList.builder(); for (TypeSignature lambdaArgument : formalLambdaArgumentTypeSignatures) { if (typeVariableConstraints.containsKey(lambdaArgument.getBase())) { if (!bindings.containsTypeVariable(lambdaArgument.getBase())) { return Optional.empty(); } Type typeVariable = bindings.getTypeVariable(lambdaArgument.getBase()); lambdaArgumentTypesBuilder.add(typeVariable); } else { lambdaArgumentTypesBuilder.add(typeManager.getType(lambdaArgument)); } } return Optional.of(lambdaArgumentTypesBuilder.build()); }
@Override public SolverReturnStatus update(BoundVariables.Builder bindings) { if (!bindings.containsTypeVariable(typeParameter)) { if (!satisfiesConstraints(actualType)) { return SolverReturnStatus.UNSOLVABLE; } bindings.setTypeVariable(typeParameter, actualType); return SolverReturnStatus.CHANGED; } Type originalType = bindings.getTypeVariable(typeParameter); Optional<Type> commonSuperType = typeManager.getCommonSuperType(originalType, actualType); if (!commonSuperType.isPresent()) { return SolverReturnStatus.UNSOLVABLE; } if (!satisfiesConstraints(commonSuperType.get())) { // This check must not be skipped even if commonSuperType is equal to originalType return SolverReturnStatus.UNSOLVABLE; } if (commonSuperType.get().equals(originalType)) { return SolverReturnStatus.UNCHANGED_SATISFIED; } bindings.setTypeVariable(typeParameter, commonSuperType.get()); return SolverReturnStatus.CHANGED; }
@Override public SolverReturnStatus update(BoundVariables.Builder bindings) { if (!bindings.containsTypeVariable(typeParameter)) { if (!satisfiesConstraints(actualType)) { return SolverReturnStatus.UNSOLVABLE; } bindings.setTypeVariable(typeParameter, actualType); return SolverReturnStatus.CHANGED; } Type originalType = bindings.getTypeVariable(typeParameter); Optional<Type> commonSuperType = typeManager.getCommonSuperType(originalType, actualType); if (!commonSuperType.isPresent()) { return SolverReturnStatus.UNSOLVABLE; } if (!satisfiesConstraints(commonSuperType.get())) { // This check must not be skipped even if commonSuperType is equal to originalType return SolverReturnStatus.UNSOLVABLE; } if (commonSuperType.get().equals(originalType)) { return SolverReturnStatus.UNCHANGED_SATISFIED; } bindings.setTypeVariable(typeParameter, commonSuperType.get()); return SolverReturnStatus.CHANGED; }
@Override public SolverReturnStatus update(BoundVariables.Builder bindings) { for (String variable : typeVariables) { if (!bindings.containsTypeVariable(variable)) { return SolverReturnStatus.UNCHANGED_NOT_SATISFIED; } } for (String variable : longVariables) { if (!bindings.containsLongVariable(variable)) { return SolverReturnStatus.UNCHANGED_NOT_SATISFIED; } } TypeSignature boundSignature = applyBoundVariables(superTypeSignature, bindings.build()); return satisfiesCoercion(allowCoercion, actualType, boundSignature) ? SolverReturnStatus.UNCHANGED_SATISFIED : SolverReturnStatus.UNCHANGED_NOT_SATISFIED; } }
@Override public SolverReturnStatus update(BoundVariables.Builder bindings) { for (String variable : typeVariables) { if (!bindings.containsTypeVariable(variable)) { return SolverReturnStatus.UNCHANGED_NOT_SATISFIED; } } for (String variable : longVariables) { if (!bindings.containsLongVariable(variable)) { return SolverReturnStatus.UNCHANGED_NOT_SATISFIED; } } TypeSignature boundSignature = applyBoundVariables(superTypeSignature, bindings.build()); return satisfiesCoercion(allowCoercion, actualType, boundSignature) ? SolverReturnStatus.UNCHANGED_SATISFIED : SolverReturnStatus.UNCHANGED_NOT_SATISFIED; } }