Source:
private static SqlScalarFunction parseParametricScalar(ScalarHeaderAndMethods scalar, Optional<Constructor<?>> constructor) { ParametricImplementationsGroup.Builder<ParametricScalarImplementation> implementationsBuilder = ParametricImplementationsGroup.builder(); ScalarImplementationHeader header = scalar.getHeader(); checkArgument(!header.getName().isEmpty()); Map<Signature, ParametricScalarImplementation> signatures = new HashMap<Signature, ParametricScalarImplementation>(); for (Method method : scalar.getMethods()) { ParametricScalarImplementation implementation = ParametricScalarImplementation.Parser.parseImplementation(header.getName(), method, constructor); if (!signatures.containsKey(implementation.getSignature())) { signatures.put(implementation.getSignature(), implementation); implementationsBuilder.addImplementation(implementation); } else { ParametricScalarImplementation currentImplementation = signatures.get(implementation.getSignature()); if (!currentImplementation.getArgumentNativeContainerTypes().equals(implementation.getArgumentNativeContainerTypes())) { implementationsBuilder.addImplementation(implementation); } else if (!currentImplementation.getSpecializedTypeParameters().equals(implementation.getSpecializedTypeParameters())) { implementationsBuilder.addImplementation(implementation); } else { currentImplementation.updateChoices(implementation); } } } ParametricImplementationsGroup<ParametricScalarImplementation> implementations = implementationsBuilder.build(); Signature scalarSignature = implementations.getSignature(); header.getOperatorType().ifPresent(operatorType -> validateOperator(operatorType, scalarSignature.getReturnType(), scalarSignature.getArgumentTypes())); return new ParametricScalar(scalarSignature, header.getHeader(), implementations); }

Target:
private static SqlScalarFunction parseParametricScalar(ScalarHeaderAndMethods scalar, Optional<Constructor<?>> constructor) { ScalarImplementationHeader header = scalar.getHeader(); checkArgument(!header.getName().isEmpty()); Map<SpecializedSignature, ParametricScalarImplementation.Builder> signatures = new HashMap<>(); for (Method method : scalar.getMethods()) { ParametricScalarImplementation implementation = ParametricScalarImplementation.Parser.parseImplementation(header.getName(), method, constructor); if (!signatures.containsKey(implementation.getSpecializedSignature())) { ParametricScalarImplementation.Builder builder = new ParametricScalarImplementation.Builder( implementation.getSignature(), implementation.getArgumentNativeContainerTypes(), implementation.getSpecializedTypeParameters(), implementation.getReturnNativeContainerType()); signatures.put(implementation.getSpecializedSignature(), builder); builder.addChoices(implementation); } else { ParametricScalarImplementation.Builder builder = signatures.get(implementation.getSpecializedSignature()); builder.addChoices(implementation); } } ParametricImplementationsGroup.Builder<ParametricScalarImplementation> implementationsBuilder = ParametricImplementationsGroup.builder(); for (ParametricScalarImplementation.Builder implementation : signatures.values()) { implementationsBuilder.addImplementation(implementation.build()); } ParametricImplementationsGroup<ParametricScalarImplementation> implementations = implementationsBuilder.build(); Signature scalarSignature = implementations.getSignature(); header.getOperatorType().ifPresent(operatorType -> validateOperator(operatorType, scalarSignature.getReturnType(), scalarSignature.getArgumentTypes())); return new ParametricScalar(scalarSignature, header.getHeader(), implementations); }