private static void populateExtraInhabitantMetaData(MultiMap<String, String> dest, AnnotationModel model, MethodModel mm) { if (null != mm) { AnnotationModel ma = mm.getAnnotation(InhabitantMetadata.class.getName()); if (null != ma) { Object tag = ma.getValues().get("value"); Object val = model.getValues().get(mm.getName()); if (null != tag) { String tagStr = tag.toString(); if (null != val) { add(dest, tagStr, val.toString()); } else { tag = mm.getName(); val = ((AnnotationType)mm.getDeclaringType()).getDefaultValues().get(tag); if (null != val) { add(dest, tagStr, val.toString()); } } } } } }
private void generate(MethodModel m, MultiMap<String, String> metadata) { AnnotationModel attribute = m.getAnnotation(Attribute.class.getName()); AnnotationModel element = m.getAnnotation(Element.class.getName()); if (attribute != null) { generateAttribute(attribute, m, metadata); if (element != null) throw new RuntimeException("Cannot have both @Element and @Attribute at the same time on method " + m.getName()); } else { if (element != null) generateElement(element, m, metadata); } }
private void generateElement(AnnotationModel element, MethodModel m, MultiMap<String, String> metadata) { String name = Dom.convertName(m.getName()); String xmlTokenName = "<" + name + ">"; String[] arguments = m.getArgumentTypes(); String refTypeAsString; if (arguments.length==0) { refTypeAsString = m.getReturnType(); } else { if (arguments.length!=1) { throw new RuntimeException("@Element method cannot have more than 1 argument " + m.getSignature()); } refTypeAsString = arguments[0]; } boolean isCollection = refTypeAsString.startsWith("java.util.List<L"); if (isCollection) { refTypeAsString = refTypeAsString.substring("java.util.List<L".length()); } Boolean isReference = (Boolean) element.getValues().get("reference"); Type refType = context.getTypes().getBy(refTypeAsString); if (refType==null || (isReference!=null && isReference)) { // leaf metadata.add(xmlTokenName, makeCollectionIfNecessary(isCollection, "leaf")); if (isReference!=null && isReference) { metadata.add(xmlTokenName, "reference"); } } else { // node metadata.add(xmlTokenName, makeCollectionIfNecessary(isCollection, refTypeAsString)); } }
ae = ((Member) ae).getDeclaringType(); } else if (ae instanceof Parameter) { ae = ((Parameter) ae).getMethod().getDeclaringType();
private void generateElement(AnnotationModel element, MethodModel m, MultiMap<String, String> metadata) { String name = Dom.convertName(m.getName()); String xmlTokenName = "<" + name + ">"; String[] arguments = m.getArgumentTypes(); String refTypeAsString; if (arguments.length==0) { refTypeAsString = m.getReturnType(); } else { if (arguments.length!=1) { throw new RuntimeException("@Element method cannot have more than 1 argument " + m.getSignature()); } refTypeAsString = arguments[0]; } boolean isCollection = refTypeAsString.startsWith("java.util.List<L"); if (isCollection) { refTypeAsString = refTypeAsString.substring("java.util.List<L".length()); } Boolean isReference = (Boolean) element.getValues().get("reference"); Type refType = context.getTypes().getBy(refTypeAsString); if (refType==null || (isReference!=null && isReference)) { // leaf metadata.add(xmlTokenName, makeCollectionIfNecessary(isCollection, "leaf")); if (isReference!=null && isReference) { metadata.add(xmlTokenName, "reference"); } } else { // node metadata.add(xmlTokenName, makeCollectionIfNecessary(isCollection, refTypeAsString)); } }
private void generate(MethodModel m, MultiMap<String, String> metadata) { AnnotationModel attribute = m.getAnnotation(Attribute.class.getName()); AnnotationModel element = m.getAnnotation(Element.class.getName()); if (attribute != null) { generateAttribute(attribute, m, metadata); if (element != null) throw new RuntimeException("Cannot have both @Element and @Attribute at the same time on method " + m.getName()); } else { if (element != null) generateElement(element, m, metadata); } }
private void generateAttribute(AnnotationModel attribute, MethodModel m, MultiMap<String, String> metadata) { String name = Dom.convertName(m.getName()); String xmlTokenName = '@' + name; boolean isRequired = Boolean.parseBoolean((String) attribute.getValues().get("isRequired")); String signature = m.getSignature(); String[] arguments = m.getArgumentTypes(); String refTypeAsString; if (arguments.length==0) { refTypeAsString = m.getReturnType(); } else { if (arguments.length!=1) { throw new RuntimeException("@Attribute method cannot have more than 1 argument " + m.getSignature()); if (isKey!=null && isKey) { metadata.add(ConfigMetadata.KEY, xmlTokenName); metadata.add(ConfigMetadata.KEYED_AS,m.getDeclaringType().getName());
private static void populateExtraInhabitantMetaData(MultiMap<String, String> dest, AnnotationModel model, MethodModel mm) { if (null != mm) { AnnotationModel ma = mm.getAnnotation(InhabitantMetadata.class.getName()); if (null != ma) { Object tag = ma.getValues().get("value"); Object val = model.getValues().get(mm.getName()); if (null != tag) { String tagStr = tag.toString(); if (null != val) { add(dest, tagStr, val.toString()); } else { tag = mm.getName(); val = ((AnnotationType)mm.getDeclaringType()).getDefaultValues().get(tag); if (null != val) { add(dest, tagStr, val.toString()); } } } } } }
private void generateAttribute(AnnotationModel attribute, MethodModel m, MultiMap<String, String> metadata) { String name = Dom.convertName(m.getName()); String xmlTokenName = '@' + name; boolean isRequired = Boolean.parseBoolean((String) attribute.getValues().get("isRequired")); String signature = m.getSignature(); String[] arguments = m.getArgumentTypes(); String refTypeAsString; if (arguments.length==0) { refTypeAsString = m.getReturnType(); } else { if (arguments.length!=1) { throw new RuntimeException("@Attribute method cannot have more than 1 argument " + m.getSignature()); if (isKey!=null && isKey) { metadata.add(ConfigMetadata.KEY, xmlTokenName); metadata.add(ConfigMetadata.KEYED_AS,m.getDeclaringType().getName());