@Override
 public boolean processVariableElement(VariableElement field, DeclaredTypeName fieldType) {
   boolean isViewProperty = TypeConstants.isBasicPropertyType(fieldType);
   ViewQuery isViewQuery = field.getAnnotation(ViewQuery.class);
   Set<Modifier> modifiers = field.getModifiers();
   if (modifiers.containsAll(TypeConstants.PUBLIC_STATIC_FINAL)) {
     if (isViewQuery != null) {
       if (!TypeConstants.QUERY.equals(fieldType)) {
         utils
             .getMessager()
             .printMessage(
                 Diagnostic.Kind.ERROR,
                 "ViewQuery must be an instance of " + TypeConstants.QUERY.toString());
       } else if (modelSpec.hasMetadata(ViewModelSpecWrapper.METADATA_KEY_QUERY_ELEMENT)) {
         utils
             .getMessager()
             .printMessage(Diagnostic.Kind.ERROR, "Only one ViewQuery can be declared per spec");
       } else {
         modelSpec.putMetadata(ViewModelSpecWrapper.METADATA_KEY_VIEW_QUERY, isViewQuery);
         modelSpec.putMetadata(ViewModelSpecWrapper.METADATA_KEY_QUERY_ELEMENT, field);
       }
       return true;
     } else {
       return super.processVariableElement(field, fieldType);
     }
   } else if (isViewProperty) {
     utils
         .getMessager()
         .printMessage(
             Diagnostic.Kind.ERROR, "View properties must be public static final", field);
   }
   return false;
 }
 @Override
 protected void processVariableElement(VariableElement e, DeclaredTypeName typeName) {
   if (e.getAnnotation(Deprecated.class) != null) {
     return;
   }
   if (e.getAnnotation(ColumnSpec.class) != null) {
     utils
         .getMessager()
         .printMessage(Kind.WARNING, "ColumnSpec is ignored outside of table models", e);
   }
   boolean isViewProperty = TypeConstants.isPropertyType(typeName);
   ViewQuery isViewQuery = e.getAnnotation(ViewQuery.class);
   Set<Modifier> modifiers = e.getModifiers();
   if (modifiers.containsAll(TypeConstants.PUBLIC_STATIC_FINAL)) {
     if (isViewQuery != null) {
       if (!TypeConstants.QUERY.equals(typeName)) {
         utils
             .getMessager()
             .printMessage(
                 Kind.ERROR, "ViewQuery must be an instance of " + TypeConstants.QUERY.toString());
       } else if (queryElement != null) {
         utils.getMessager().printMessage(Kind.ERROR, "Only one ViewQuery per spec allowedd");
       } else {
         viewQueryAnnotation = isViewQuery;
         queryElement = e;
       }
     } else if (!isViewProperty) {
       constantElements.add(e);
     } else {
       initializePropertyGenerator(e);
     }
   } else if (isViewProperty) {
     utils
         .getMessager()
         .printMessage(Kind.ERROR, "View properties must be public static final", e);
   } else {
     utils.getMessager().printMessage(Kind.WARNING, "Unused field in spec", e);
   }
 }