public ModuleDataModelOracleBuilder addClass(final Class clazz, final boolean isEvent, final TypeSource typeSource) throws IOException { final FactBuilder builder = new ClassFactBuilder(this, discoveredFieldFactBuilders, clazz, isEvent, typeSource); factTypeBuilders.put(clazz.getName(), builder); return this; }
private Map<String, Set<Annotation>> buildTypeAnnotations() { final Map<String, Set<Annotation>> loadableTypeAnnotations = new HashMap<String, Set<Annotation>>(); loadableTypeAnnotations.put(getType(), annotations); return loadableTypeAnnotations; }
protected ModuleDataModelOracle getModuleOracle(Class clazz) { try { final ModuleDataModelOracleBuilder builder = ModuleDataModelOracleBuilder.newModuleOracleBuilder(evaluator); final ClassFactBuilder modelFactBuilder = new ClassFactBuilder(builder, clazz, false, TypeSource.JAVA_PROJECT); ModuleDataModelOracle oracle = modelFactBuilder.getDataModelBuilder().build(); Map<String, FactBuilder> builders = new HashMap<>(); for (FactBuilder factBuilder : modelFactBuilder.getInternalBuilders().values()) { if (factBuilder instanceof ClassFactBuilder) { builders.put(((ClassFactBuilder) factBuilder).getType(), factBuilder); factBuilder.build((ModuleDataModelOracleImpl) oracle); } } builders.put(modelFactBuilder.getType(), modelFactBuilder); modelFactBuilder.build((ModuleDataModelOracleImpl) oracle); return oracle; } catch (IOException ex) { } return null; }
final String factType = getType(); addParametricTypeForField(factType, fieldName, f.getGenericType()); final String genericReturnType = typeSystemConverter.translateClassToGenericType(returnType); addField(new ModelField(fieldName, returnType.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, genericReturnType)); addEnumsForField(factType, fieldName, returnType); discoverFieldFactBuilder(genericReturnType, returnType, discoveredFieldFactBuilders); discoverFieldFactBuilder(parameterClazz.getName(), parameterClazz, discoveredFieldFactBuilders);
@Override public void build(final ModuleDataModelOracleImpl oracle) { super.build(oracle); oracle.addModuleMethodInformation(methodInformation); oracle.addModuleFieldParametersType(fieldParametersType); oracle.addModuleSuperTypes(buildSuperTypes()); oracle.addModuleTypeAnnotations(buildTypeAnnotations()); oracle.addModuleTypeFieldsAnnotations(buildTypeFieldsAnnotations()); }
private void addEnumsForField(final String className, final String fieldName, final Class<?> fieldClazz) { if (fieldClazz.isEnum()) { final Field[] enumFields = fieldClazz.getDeclaredFields(); final List<String> enumValues = new ArrayList<String>(); for (final Field enumField : enumFields) { if (enumField.isEnumConstant()) { String shortName = fieldClazz.getName().substring(fieldClazz.getName().lastIndexOf(".") + 1) + "." + enumField.getName(); if (shortName.contains("$")) { shortName = shortName.replaceAll("\\$", "."); } enumValues.add(shortName + "=" + shortName); } } final String a[] = new String[enumValues.size()]; enumValues.toArray(a); getDataModelBuilder().addEnum(className, fieldName, a); } }
private Map<String, List<String>> buildSuperTypes() { final Map<String, List<String>> loadableSuperTypes = new HashMap<String, List<String>>(); loadableSuperTypes.put(getType(), superTypes); return loadableSuperTypes; }
protected void discoverFieldFactBuilder(final String genericTypeName, final Class<?> genericType, final Map<String, FactBuilder> discoveredFieldFactBuilders) throws IOException { if (!discoveredFieldFactBuilders.containsKey(genericTypeName)) { discoveredFieldFactBuilders.put(genericTypeName, null); discoveredFieldFactBuilders.put(genericTypeName, new ClassFactBuilder(builder, discoveredFieldFactBuilders, genericType, false, typeSource)); } if (discoveredFieldFactBuilders.get(genericTypeName) != null) { fieldFactBuilders.put(genericTypeName, discoveredFieldFactBuilders.get(genericTypeName)); } }
private Map<String, Map<String, Set<Annotation>>> buildTypeFieldsAnnotations() { final Map<String, Map<String, Set<Annotation>>> loadableTypeFieldsAnnotations = new HashMap<String, Map<String, Set<Annotation>>>(); loadableTypeFieldsAnnotations.put(getType(), fieldAnnotations); return loadableTypeFieldsAnnotations; }