List of usage examples for com.google.gwt.core.ext.typeinfo JField isEnumConstant
JEnumConstant isEnumConstant();
From source file:org.jboss.errai.bus.rebind.BusClientConfigGenerator.java
License:Apache License
private void generateMarshaller(JClassType visit, TreeLogger logger, SourceWriter writer) { Boolean enumType = visit.isEnum() != null; Map<String, Class> types = new HashMap<String, Class>(); Map<String, ValueExtractor> getters = new HashMap<String, ValueExtractor>(); Map<String, ValueBinder> setters = new HashMap<String, ValueBinder>(); Map<Class, Integer> arrayConverters = new HashMap<Class, Integer>(); try {/*from w w w . j a v a2 s . c om*/ JClassType scan = visit; do { for (JField f : scan.getFields()) { if (f.isTransient() || f.isStatic() || f.isEnumConstant() != null) continue; JClassType type = f.getType().isClassOrInterface(); JMethod getterMeth; JMethod setterMeth; if (type == null) { JPrimitiveType pType = f.getType().isPrimitive(); Class c; if (pType == null) { JArrayType aType = f.getType().isArray(); if (aType == null) continue; String name = aType.getQualifiedBinaryName(); int depth = 0; for (int i = 0; i < name.length(); i++) { if (name.charAt(i) == '[') depth++; else break; } types.put(f.getName(), c = Class.forName(name.substring(0, depth) + getInternalRep(aType.getQualifiedBinaryName().substring(depth)))); arrayConverters.put(c, depth); } else { types.put(f.getName(), c = ParseTools .unboxPrimitive(Class.forName(pType.getQualifiedBoxedSourceName()))); } } else { types.put(f.getName(), Class.forName(type.getQualifiedBinaryName())); } getterMeth = getAccessorMethod(visit, f); setterMeth = getSetterMethod(visit, f); if (getterMeth == null) { if (f.isPublic()) { getters.put(f.getName(), new ValueExtractor(f)); } else if (visit == scan) { throw new GenerationException("could not find a read accessor in class: " + visit.getQualifiedSourceName() + "; for field: " + f.getName() + "; should declare an accessor: " + ReflectionUtil.getGetter(f.getName())); } } else { getters.put(f.getName(), new ValueExtractor(getterMeth)); } if (setterMeth == null) { if (f.isPublic()) { setters.put(f.getName(), new ValueBinder(f)); } else if (visit == scan) { throw new GenerationException("could not find a write accessor in class: " + visit.getQualifiedSourceName() + "; for field: " + f.getName() + "; should declare an accessor: " + ReflectionUtil.getSetter(f.getName())); } } else { setters.put(f.getName(), new ValueBinder(setterMeth)); } } } while ((scan = scan.getSuperclass()) != null && !scan.getQualifiedSourceName().equals("java.lang.Object")); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new RuntimeException(e); } try { if (!enumType) visit.getConstructor(new JClassType[0]); } catch (NotFoundException e) { String errorMsg = "Type marked for serialization does not expose a default constructor: " + visit.getQualifiedSourceName(); logger.log(TreeLogger.Type.ERROR, errorMsg, e); throw new GenerationException(errorMsg, e); } Map<String, Object> templateVars = Make.Map.<String, Object>$() ._("className", visit.getQualifiedSourceName()) ._("canonicalClassName", visit.getQualifiedBinaryName())._("fields", types.keySet()) ._("targetTypes", types)._("getters", getters)._("setters", setters) ._("arrayConverters", arrayConverters)._("enumType", enumType)._(); String genStr; writer.print(genStr = (String) execute(demarshallerGenerator, templateVars)); log.debug("generated demarshaller: \n" + genStr); logger.log(TreeLogger.Type.INFO, genStr); writer.print(genStr = (String) execute(marshallerGenerator, templateVars)); log.debug("generated marshaller: \n" + genStr); logger.log(TreeLogger.Type.INFO, genStr); logger.log(TreeLogger.Type.INFO, "Generated marshaller/demarshaller for: " + visit.getName()); }