private static void validateErrorDefinition(ErrorDefinition errorDef, Map<TypeName, TypeDefinition> definitionMap) { Stream.concat(errorDef.getSafeArgs().stream(), errorDef.getUnsafeArgs().stream()) .filter(arg -> recursivelyFindNestedOptionals(arg.getType(), definitionMap, false)) .findAny() .ifPresent(arg -> { throw new IllegalStateException( "Illegal nested optionals found in one of arguments of error " + errorDef.getErrorName().getName()); }); }
private static void checkForComplexType(FieldDefinition typeDef) { if (typeDef.getType().accept(TypeVisitor.IS_MAP)) { MapType mapType = typeDef.getType().accept(TypeVisitor.MAP); if (!mapType.getKeyType().accept(TypeVisitor.IS_PRIMITIVE_OR_REFERENCE)) { throw new IllegalStateException( String.format("Complex type '%s' not allowed in map key: %s.", mapType.getKeyType(), typeDef)); } } } }
private static Optional<TypeName> getReferenceType(TypeDefinition typeDef) { if (typeDef.accept(TypeDefinitionVisitor.IS_OBJECT)) { ObjectDefinition objectDef = typeDef.accept(TypeDefinitionVisitor.OBJECT); for (FieldDefinition currField : objectDef.getFields()) { Optional<TypeName> referenceType = resolveReferenceType(currField.getType()); if (referenceType.isPresent()) { return referenceType; } } } else if (typeDef.accept(TypeDefinitionVisitor.IS_ALIAS)) { AliasDefinition aliasDef = typeDef.accept(TypeDefinitionVisitor.ALIAS); return resolveReferenceType(aliasDef.getAlias()); } return Optional.empty(); }