@Override public Set<String> getStereotypes(Element element) { Set<String> stereotypes = new LinkedHashSet<>(); ElementKind kind = element.getKind(); if (kind != ElementKind.CLASS && kind != ElementKind.INTERFACE) { return stereotypes; } Set<Element> seen = new HashSet<>(); collectStereotypesOnAnnotations(seen, stereotypes, element); seen = new HashSet<>(); collectStereotypesOnTypes(seen, stereotypes, element); return stereotypes; }
private void collectStereotypesOnTypes(Set<Element> seen, Set<String> stereotypes, Element type) { if (!seen.contains(type)) { seen.add(type); if (isAnnotatedWithIndexed(type)) { stereotypes.add(this.typeHelper.getType(type)); } Element superClass = this.typeHelper.getSuperClass(type); if (superClass != null) { collectStereotypesOnTypes(seen, stereotypes, superClass); } this.typeHelper.getDirectInterfaces(type).forEach( i -> collectStereotypesOnTypes(seen, stereotypes, i)); } }
@Override public Set<String> getStereotypes(Element element) { Set<String> stereotypes = new LinkedHashSet<>(); ElementKind kind = element.getKind(); if (kind != ElementKind.CLASS && kind != ElementKind.INTERFACE) { return stereotypes; } Set<Element> seen = new HashSet<>(); collectStereotypesOnAnnotations(seen, stereotypes, element); seen = new HashSet<>(); collectStereotypesOnTypes(seen, stereotypes, element); return stereotypes; }
private void collectStereotypesOnTypes(Set<Element> seen, Set<String> stereotypes, Element type) { if (!seen.contains(type)) { seen.add(type); if (isAnnotatedWithIndexed(type)) { stereotypes.add(this.typeHelper.getType(type)); } Element superClass = this.typeHelper.getSuperClass(type); if (superClass != null) { collectStereotypesOnTypes(seen, stereotypes, superClass); } this.typeHelper.getDirectInterfaces(type).forEach( i -> collectStereotypesOnTypes(seen, stereotypes, i)); } }