private void initializeExplicitConstructor( TurinTypeContructorDefinitionNode constructor, SymbolResolver resolver) { List<? extends FormalParameter> allParams = constructor.getParameters(); List<FormalParameter> paramsWithoutDefaultValues = allParams .stream() .filter((p) -> !p.hasDefaultValue()) .collect(Collectors.<FormalParameter>toList()); List<String> paramSignatures = paramsWithoutDefaultValues .stream() .map((p) -> p.getType().jvmType().getSignature()) .collect(Collectors.toList()); boolean hasDefaultParameters = allParams.stream().filter((p) -> p.hasDefaultValue()).findFirst().isPresent(); if (hasDefaultParameters) { paramSignatures.add("Ljava/util/Map;"); } JvmConstructorDefinition constructorDefinition = new JvmConstructorDefinition( jvmType().getInternalName(), "(" + String.join("", paramSignatures) + ")V"); constructors.add( new InternalConstructorDefinition( new ReferenceTypeUsage(this), allParams, constructorDefinition)); }
public List<TurinTypeContructorDefinitionNode> getExplicitConstructors() { return members .stream() .filter((m) -> m instanceof TurinTypeContructorDefinitionNode) .map((m) -> (TurinTypeContructorDefinitionNode) m) .collect(Collectors.toList()); }
@Override public JvmConstructorDefinition resolveConstructorCall(List<ActualParam> actualParams) { // all named parameters should be after the named ones if (!ParamUtils.verifyOrder(actualParams)) { throw new IllegalArgumentException( "Named params should all be grouped after the positional ones"); } ensureIsInitialized(symbolResolver()); Optional<InternalConstructorDefinition> constructor = constructors.stream().filter((c) -> c.match(symbolResolver(), actualParams)).findFirst(); if (!constructor.isPresent()) { throw new UnsolvedConstructorException(getQualifiedName(), actualParams); } return constructor.get().getJvmConstructorDefinition(); }
private boolean isDefiningMethod( String name, List<TypeUsage> paramTypes, SymbolResolver resolver) { return getDirectMethods() .stream() .filter((m) -> m.getName().equals(name)) .filter( (m) -> m.getParameters() .stream() .map((p) -> p.calcType().jvmType()) .collect(Collectors.toList()) .equals( paramTypes .stream() .map((p) -> p.jvmType()) .collect(Collectors.toList()))) .count() > 0; }