boolean (final JavaMethod method) { if (DomImplUtil.isTagValueGetter(method)) { myValueElement = true; return true; } final Class returnType = method.getReturnType(); final boolean isAttributeValueMethod = GenericAttributeValue.class.isAssignableFrom(returnType); final JavaMethodSignature signature = method.getSignature(); final Attribute annotation = method.getAnnotation(Attribute.class); final boolean isAttributeMethod = annotation != null || isAttributeValueMethod; if (annotation != null) { assert isAttributeValueMethod || GenericAttributeValue.class.isAssignableFrom(returnType) : method + " should return GenericAttributeValue"; } if (isAttributeMethod) { final String s = annotation == null ? null : annotation.value(); String attributeName = StringUtil.isEmpty(s) ? getNameFromMethod(method, true) : s; assert attributeName != null && StringUtil.isNotEmpty(attributeName) : "Can't guess attribute name from method name: " + method.getName(); final XmlName attrName = DomImplUtil.createXmlName(attributeName, method); myAttributes.put(signature, new AttributeChildDescriptionImpl(attrName, method)); return true; } if (isDomElement(returnType)) { final String qname = getSubTagName(method); if (qname != null) { final XmlName xmlName = DomImplUtil.createXmlName(qname, method); Type collectionType = myCollectionChildrenTypes.get(xmlName); if (collectionType != null) { LOG.error("Collection (" + collectionType + ") and fixed children cannot intersect: " + qname + " for " + myClass); } int index = 0; final SubTag subTagAnnotation = method.getAnnotation(SubTag.class); if (subTagAnnotation != null && subTagAnnotation.index() != 0) { index = subTagAnnotation.index(); } Int2ObjectMap<Collection<JavaMethod>> map = myFixedChildrenGetters.get(xmlName); Collection<JavaMethod> methods = map.get(index); if (methods == null) { map.put(index, methods = new SmartList<>()); } methods.add(method); return true; } } final Type type = DomReflectionUtil.extractCollectionElementType(method.getGenericReturnType()); if (isDomElement(type)) { final CustomChildren customChildren = method.getAnnotation(CustomChildren.class); if (customChildren != null) { myCustomChildrenGetter = method; return true; } final SubTagsList subTagsList = method.getAnnotation(SubTagsList.class); if (subTagsList != null) { myCompositeCollectionGetters.put(signature, subTagsList.value()); return true; } final String qname = getSubTagNameForCollection(method); if (qname != null) { XmlName xmlName = DomImplUtil.createXmlName(qname, type, method); assert !myFixedChildrenGetters.containsKey(xmlName) : "Collection and fixed children cannot intersect: " + qname; myCollectionChildrenTypes.put(xmlName, type); myCollectionGetters.put(xmlName, method); return true; } } return false; }