private void resolveStereotype(ObjectType type, Function<Class<? extends StereotypeDefinition>, StereotypeModel> resolver) { type.accept(new MetadataTypeVisitor() { // This is created to avoid a recursive types infinite loop, producing an StackOverflow when resolving the stereotypes. private List<MetadataType> registeredTypes = new LinkedList<>(); @Override public void visitObject(ObjectType objectType) { if (!registeredTypes.contains(objectType)) { registeredTypes.add(objectType); objectType.getAnnotation(StereotypeTypeAnnotation.class).ifPresent(a -> a.resolveStereotypes(resolver)); objectType.getFields().forEach(f -> f.getValue().accept(this)); } } @Override public void visitArrayType(ArrayType arrayType) { arrayType.getType().accept(this); } @Override public void visitUnion(UnionType unionType) { unionType.getTypes().forEach(t -> t.accept(this)); } @Override public void visitIntersection(IntersectionType intersectionType) { intersectionType.getTypes().forEach(t -> t.accept(this)); } }); }
type.accept(getParameterDeclarerVisitor(configLine, dsl.resolve(type).get(), value -> topLevelParameter.withValue((ParameterObjectValue) value)));
private void resolveStereotype(ObjectType type, Function<Class<? extends StereotypeDefinition>, StereotypeModel> resolver) { type.accept(new MetadataTypeVisitor() { // This is created to avoid a recursive types infinite loop, producing an StackOverflow when resolving the stereotypes. private List<MetadataType> registeredTypes = new LinkedList<>(); @Override public void visitObject(ObjectType objectType) { if (!registeredTypes.contains(objectType)) { registeredTypes.add(objectType); objectType.getAnnotation(StereotypeTypeAnnotation.class).ifPresent(a -> a.resolveStereotypes(resolver)); objectType.getFields().forEach(f -> f.getValue().accept(this)); } } @Override public void visitArrayType(ArrayType arrayType) { arrayType.getType().accept(this); } @Override public void visitUnion(UnionType unionType) { unionType.getTypes().forEach(t -> t.accept(this)); } @Override public void visitIntersection(IntersectionType intersectionType) { intersectionType.getTypes().forEach(t -> t.accept(this)); } }); }
type.accept(getParameterDeclarerVisitor(configLine, dsl.resolve(type).get(), value -> topLevelParameter.withValue((ParameterObjectValue) value)));