@SuppressWarnings("serial") private List<Statement> generateDataFieldMetas(final String dataFieldMetasVarName, final Decorable decorable) { final Map<String, DataField> annoMap = DataFieldCodeDecorator.aggregateDataFieldAnnotationMap(decorable, decorable.getType()); final List<Statement> stmts = new ArrayList<>(annoMap.size()+1); stmts.add(declareFinalVariable(dataFieldMetasVarName, new TypeLiteral<Map<String, DataFieldMeta>>() { }, newObject(parameterizedAs(HashMap.class, typeParametersOf(String.class, DataFieldMeta.class)), annoMap.size()))); annoMap .entrySet() .stream() .map(entry -> { final String fieldName = entry.getKey(); final DataField dataField = entry.getValue(); Statement dataFieldMetaInstance; if (dataField.attributeRules().length == 0 && dataField.defaultStrategy().equals(ConflictStrategy.USE_TEMPLATE)) { dataFieldMetaInstance = newObject(DataFieldMeta.class); } else { dataFieldMetaInstance = newObject(DataFieldMeta.class, loadLiteral(dataField.attributeRules()), loadLiteral(dataField.defaultStrategy())); } return loadVariable(dataFieldMetasVarName).invoke("put", fieldName, dataFieldMetaInstance); }) .collect(Collectors.toCollection(() -> stmts)); return stmts; }
@SuppressWarnings("serial") private List<Statement> generateDataFieldMetas(final String dataFieldMetasVarName, final Decorable decorable) { final Map<String, DataField> annoMap = DataFieldCodeDecorator.aggregateDataFieldAnnotationMap(decorable, decorable.getType()); final List<Statement> stmts = new ArrayList<>(annoMap.size()+1); stmts.add(declareFinalVariable(dataFieldMetasVarName, new TypeLiteral<Map<String, DataFieldMeta>>() { }, newObject(parameterizedAs(HashMap.class, typeParametersOf(String.class, DataFieldMeta.class)), annoMap.size()))); annoMap .entrySet() .stream() .map(entry -> { final String fieldName = entry.getKey(); final DataField dataField = entry.getValue(); Statement dataFieldMetaInstance; if (dataField.attributeRules().length == 0 && dataField.defaultStrategy().equals(ConflictStrategy.USE_TEMPLATE)) { dataFieldMetaInstance = newObject(DataFieldMeta.class); } else { dataFieldMetaInstance = newObject(DataFieldMeta.class, loadLiteral(dataField.attributeRules()), loadLiteral(dataField.defaultStrategy())); } return loadVariable(dataFieldMetasVarName).invoke("put", fieldName, dataFieldMetaInstance); }) .collect(Collectors.toCollection(() -> stmts)); return stmts; }