Search in sources :

Example 6 with DoPreservedField

use of com.cjsoftware.processor.uistatepreservation.model.DoPreservedField in project ucsFramework by cjsoftware-lib.

the class PreserveUiStateProcessor method addStrategyFields.

private void addStrategyFields(TypeSpec.Builder preservationClass, List<DoPreservedField> fieldList, TypeMirror preservedFieldContainingType) {
    Types typeUtils = getProcessorModel().getTypeUtils();
    Elements elementUtils = getProcessorModel().getElementUtils();
    TypeMirror valueStrategy = elementUtils.getTypeElement(ValuePreservationStrategy.class.getCanonicalName()).asType();
    for (DoPreservedField field : fieldList) {
        for (TypeMirror strategy : field.getPreservationStrategyList()) {
            String fieldName = String.format(FIELD_PRESERVE_STRATEGY_INSTANCE, field.getField().getSimpleName(), typeUtils.asElement(strategy).getSimpleName());
            FieldSpec.Builder strategyInstanceField;
            if (typeUtils.isAssignable(strategy, valueStrategy)) {
                // Value preservation strategy is parametric on preserved value type
                TypeMirror safeType = field.getField().asType();
                if (safeType.getKind().isPrimitive()) {
                    safeType = typeUtils.boxedClass((PrimitiveType) safeType).asType();
                }
                strategyInstanceField = FieldSpec.builder(ParameterizedTypeName.get((ClassName) ClassName.get(strategy), TypeName.get(preservedFieldContainingType), TypeName.get(safeType)), fieldName, Modifier.PRIVATE).initializer("new $T<>()", strategy);
            } else {
                strategyInstanceField = FieldSpec.builder(TypeName.get(strategy), fieldName, Modifier.PRIVATE).initializer("new $T()", strategy);
            }
            preservationClass.addField(strategyInstanceField.build());
        }
    }
}
Also used : Types(javax.lang.model.util.Types) DoPreservedField(com.cjsoftware.processor.uistatepreservation.model.DoPreservedField) TypeMirror(javax.lang.model.type.TypeMirror) ClassName(com.squareup.javapoet.ClassName) Elements(javax.lang.model.util.Elements) FieldSpec(com.squareup.javapoet.FieldSpec)

Aggregations

DoPreservedField (com.cjsoftware.processor.uistatepreservation.model.DoPreservedField)6 TypeElement (javax.lang.model.element.TypeElement)3 ClassName (com.squareup.javapoet.ClassName)2 MethodSpec (com.squareup.javapoet.MethodSpec)2 Elements (javax.lang.model.util.Elements)2 StatePreservationManager (com.cjsoftware.library.uistatepreservation.StatePreservationManager)1 FieldSpec (com.squareup.javapoet.FieldSpec)1 JavaFile (com.squareup.javapoet.JavaFile)1 TypeSpec (com.squareup.javapoet.TypeSpec)1 IOException (java.io.IOException)1 HashSet (java.util.HashSet)1 PackageElement (javax.lang.model.element.PackageElement)1 MirroredTypesException (javax.lang.model.type.MirroredTypesException)1 TypeMirror (javax.lang.model.type.TypeMirror)1 Types (javax.lang.model.util.Types)1