@NotNull
 public Object[] getVariants() {
   final AntDomMacroDef parentMacrodef = getParentMacrodef();
   if (parentMacrodef != null) {
     final List variants = new ArrayList();
     for (AntDomMacrodefAttribute attribute : parentMacrodef.getMacroAttributes()) {
       final String attribName = attribute.getName().getStringValue();
       if (attribName != null && attribName.length() > 0) {
         final LookupElementBuilder builder = LookupElementBuilder.create(attribName);
         final LookupElement element =
             AutoCompletionPolicy.GIVE_CHANCE_TO_OVERWRITE.applyPolicy(builder);
         variants.add(element);
       }
     }
     return ContainerUtil.toArray(variants, new Object[variants.size()]);
   }
   return EMPTY_ARRAY;
 }
 public PsiElement resolve(PsiReference psiReference, boolean incompleteCode) {
   final PsiElement element = psiReference.getElement();
   if (element == null) {
     return null;
   }
   final DomElement domElement = DomUtil.getDomElement(element);
   if (domElement == null) {
     return null;
   }
   final AntDomMacroDef macrodef = domElement.getParentOfType(AntDomMacroDef.class, false);
   if (macrodef == null) {
     return null;
   }
   final String name =
       AntStringResolver.computeString(domElement, psiReference.getCanonicalText());
   for (AntDomMacrodefAttribute attribute : macrodef.getMacroAttributes()) {
     if (name.equals(attribute.getName().getStringValue())) {
       final DomTarget target = DomTarget.getTarget(attribute);
       return target != null ? PomService.convertToPsi(target) : null;
     }
   }
   return null;
 }