package innovimax.quixproc.datamodel.generator.annotations; import java.util.EnumMap; import innovimax.quixproc.datamodel.generator.AGenerator.FileExtension; import innovimax.quixproc.datamodel.generator.ATreeGenerator.SpecialType; import innovimax.quixproc.datamodel.generator.ATreeGenerator.TreeType; public class TreeGeneratorRuntimeExtractor { public static void process(EnumMap<FileExtension, EnumMap<TreeType, EnumMap<SpecialType, Class<?>>>> map, Class<?> c) { for (Class<?> cc : c.getClasses()) { for (TreeGenerator generator : cc.getAnnotationsByType(TreeGenerator.class)) { // file extension final EnumMap<TreeType, EnumMap<SpecialType, Class<?>>> type; if (map.containsKey(generator.ext())) { type = map.get(generator.ext()); } else { type = new EnumMap<TreeType, EnumMap<SpecialType, Class<?>>>(TreeType.class); map.put(generator.ext(), type); } // type final EnumMap<SpecialType, Class<?>> stype; if (type.containsKey(generator.type())) { stype = type.get(generator.type()); } else { stype = new EnumMap<SpecialType, Class<?>>(SpecialType.class); type.put(generator.type(), stype); } if (stype.containsKey(generator.stype())) { throw new IllegalStateException( "There is already a declared class for such params " + generator.toString()); } stype.put(generator.stype(), cc); } } System.out.println(map); } public static void main(String[] args) { // process(AXMLGenerator.class); } }