XmlAttributeDescriptor[] (@Nullable XmlTag context) { final List<XmlAttributeDescriptor> descriptors = new ArrayList<>(); final List<String> builtInAttributeNames = FxmlConstants.FX_BUILT_IN_TAG_SUPPORTED_ATTRIBUTES.get(getName()); if (builtInAttributeNames != null) { for (String attrName : builtInAttributeNames) { descriptors.add(JavaFxBuiltInAttributeDescriptor.create(attrName, getName())); } } JavaFxClassTagDescriptorBase.collectStaticAttributesDescriptors(context, descriptors); final XmlTag referencedTag = getReferencedTag(myXmlTag); if (referencedTag != null) { final XmlElementDescriptor referencedDescriptor = referencedTag.getDescriptor(); if (referencedDescriptor != null) { final XmlAttributeDescriptor[] attributesDescriptors = referencedDescriptor.getAttributesDescriptors(referencedTag); if (attributesDescriptors != null) { Collections.addAll(descriptors, attributesDescriptors); } } } final XmlTag includedRoot = getIncludedRoot(context); if (includedRoot != null) { final XmlElementDescriptor includedRootDescriptor = includedRoot.getDescriptor(); if (includedRootDescriptor instanceof JavaFxClassTagDescriptorBase) { ((JavaFxClassTagDescriptorBase)includedRootDescriptor).collectInstanceProperties(descriptors); } } return descriptors.isEmpty() ? XmlAttributeDescriptor.EMPTY : descriptors.toArray(XmlAttributeDescriptor.EMPTY); }