private void addAllowedStereotypes(String namespace, ComponentDeclaration<?> declaration, MethodElement methodElement) { Map<String, NestableElementDeclaration<?>> nested = declaration.getNestedComponents().stream() .collect(toMap(NamedDeclaration::getName, n -> n)); methodElement.getParameters().stream() .filter(p -> nested.containsKey(p.getAlias())) .forEach(parameter -> { if (isProcessorChain(parameter)) { addAllowedStereotypes(namespace, parameter, (WithAllowedStereotypesDeclaration) nested.get(parameter.getAlias())); } else if (isRoute(parameter)) { NestedRouteDeclaration route = (NestedRouteDeclaration) nested.get(parameter.getAlias()); Optional<AllowedStereotypes> allowedStereotypes = parameter.getType().getAnnotation(AllowedStereotypes.class); allowedStereotypes.ifPresent(processorsStereotypes -> { NestableElementDeclaration processorsChain = route.getNestedComponents().stream() .filter(routeChild -> routeChild instanceof NestedChainDeclaration) .findFirst() .orElseThrow(() -> new IllegalStateException("Missing Chain component in Route declaration")); addAllowedStereotypes((WithAllowedStereotypesDeclaration) processorsChain, processorsStereotypes.value(), namespace); }); } }); }
private void addAllowedStereotypes(String namespace, ComponentDeclaration<?> declaration, MethodElement methodElement) { Map<String, NestableElementDeclaration<?>> nested = declaration.getNestedComponents().stream() .collect(toMap(NamedDeclaration::getName, n -> n)); methodElement.getParameters().stream() .filter(p -> nested.containsKey(p.getAlias())) .forEach(parameter -> { if (isProcessorChain(parameter)) { addAllowedStereotypes(namespace, parameter, (WithAllowedStereotypesDeclaration) nested.get(parameter.getAlias())); } else if (isRoute(parameter)) { NestedRouteDeclaration route = (NestedRouteDeclaration) nested.get(parameter.getAlias()); Optional<AllowedStereotypes> allowedStereotypes = parameter.getType().getAnnotation(AllowedStereotypes.class); allowedStereotypes.ifPresent(processorsStereotypes -> { NestableElementDeclaration processorsChain = route.getNestedComponents().stream() .filter(routeChild -> routeChild instanceof NestedChainDeclaration) .findFirst() .orElseThrow(() -> new IllegalStateException("Missing Chain component in Route declaration")); addAllowedStereotypes((WithAllowedStereotypesDeclaration) processorsChain, processorsStereotypes.value(), namespace); }); } }); }