@Override
  public boolean isAvailable(final @NotNull Project project, final Editor editor, final PsiFile file) {
    if (!myIsAvailableEvaluated) {
      final XmlTag tag = PsiTreeUtil.getParentOfType(myRef.getElement(), XmlTag.class);
      if (tag != null && tag.isValid()) {
        final XsdNsDescriptor descriptor = myRef.getDescriptor(tag, myRef.getCanonicalText(), new boolean[1]);

        if (descriptor != null &&
            descriptor.getDescriptorFile() != null &&
            descriptor.getDescriptorFile().isWritable()
           ) {
          myTargetFile = descriptor.getDescriptorFile();
        }
      }
      myIsAvailableEvaluated = true;
    }
    return myTargetFile != null;
  }
@Override
  public boolean isAvailable(final @NotNull Project project, final Editor editor, final PsiFile file)