private void handleNamedElement(final PsiNamedElement named) {
      String name = named.getName();

      assert name != null;

      if (StructuralSearchUtil.isTypedVariable(name)) {
        name = name.substring(1, name.length() - 1);
      }

      if (!namedElements.containsKey(name)) namedElements.put(name, named);
      named.acceptChildren(this);
    }
 public boolean execute(
     ReferencesSearch.SearchParameters params, final Processor<PsiReference> consumer) {
   final PsiElement elem = params.getElementToSearch();
   SearchScope scope = params.getEffectiveSearchScope();
   if (elem instanceof PsiNamedElement
       /* An optimization for Java refactorings */
       && !(elem instanceof PsiVariable)) {
     final PsiNamedElement symbolToSearch = (PsiNamedElement) elem;
     final String name = symbolToSearch.getName();
     if (name != null) {
       RequestResultProcessor processor =
           new RequestResultProcessor() {
             @Override
             public boolean processTextOccurrence(
                 @NotNull PsiElement element,
                 int offsetInElement,
                 @NotNull Processor<PsiReference> consumer) {
               if (element instanceof ClSymbol) {
                 ClSymbol refSymbol = (ClSymbol) element;
                 for (PsiReference ref : refSymbol.getReferences()) {
                   if (ref.getRangeInElement().contains(offsetInElement)
                       &&
                       // atom may refer to definition or to the symbol in it
                       (ref.resolve() == symbolToSearch
                           || ref.resolve() == symbolToSearch.getParent())) {
                     if (!consumer.process(ref)) return false;
                   }
                 }
               }
               return true;
             }
           };
       if (scope instanceof GlobalSearchScope) {
         scope =
             GlobalSearchScope.getScopeRestrictedByFileTypes(
                 (GlobalSearchScope) scope, ClojureFileType.CLOJURE_FILE_TYPE);
       }
       for (String word : StringUtil.getWordsIn(name)) {
         params.getOptimizer().searchWord(word, scope, UsageSearchContext.ANY, true, processor);
       }
     }
   }
   return true;
 }
 public static boolean isTooExpensiveToSearch(PsiNamedElement element, boolean zeroResult) {
   final String name = element.getName();
   if (name == null) {
     return true;
   }
   final ProgressManager progressManager = ProgressManager.getInstance();
   final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(element.getProject());
   final SearchScope useScope = element.getUseScope();
   if (!(useScope instanceof GlobalSearchScope)) {
     return zeroResult;
   }
   final PsiSearchHelper.SearchCostResult cost =
       searchHelper.isCheapEnoughToSearch(
           name, (GlobalSearchScope) useScope, null, progressManager.getProgressIndicator());
   if (cost == PsiSearchHelper.SearchCostResult.ZERO_OCCURRENCES) {
     return zeroResult;
   }
   return cost == PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES;
 }
  /**
   * Tries to produce signature for the exact given PSI element.
   *
   * @param element target element
   * @param buffer buffer to store the signature in
   * @return buffer that contains signature of the given element if it was produced; <code>null
   *     </code> as an indication that signature for the given element was not produced
   */
  @SuppressWarnings("unchecked")
  @Nullable
  private static StringBuilder getSignature(
      @NotNull PsiElement element, @Nullable StringBuilder buffer) {
    if (element instanceof PsiNamedElement) {
      PsiNamedElement named = (PsiNamedElement) element;
      final String name = named.getName();
      if (StringUtil.isEmpty(name)) {
        return null;
      }
      int index = getChildIndex(named, element.getParent(), name, PsiNamedElement.class);
      StringBuilder bufferToUse = buffer;
      if (bufferToUse == null) {
        bufferToUse = new StringBuilder();
      }
      bufferToUse
          .append(TYPE_MARKER)
          .append(ELEMENT_TOKENS_SEPARATOR)
          .append(escape(name))
          .append(ELEMENT_TOKENS_SEPARATOR)
          .append(index);
      return bufferToUse;
    }
    if (element instanceof PsiComment) {
      PsiElement parent = element.getParent();
      boolean nestedComment = false;
      if (parent instanceof PsiComment && parent.getTextRange().equals(element.getTextRange())) {
        parent = parent.getParent();
        nestedComment = true;
      }
      if (parent instanceof PsiNamedElement
          && (nestedComment || parent.getFirstChild() == element)) {
        // Consider doc comment element that is the first child of named element to be a doc
        // comment.
        StringBuilder bufferToUse = buffer;
        if (bufferToUse == null) {
          bufferToUse = new StringBuilder();
        }
        bufferToUse.append(TYPE_MARKER).append(ELEMENT_TOKENS_SEPARATOR).append(DOC_COMMENT_MARKER);
        return bufferToUse;
      }
    }

    PsiElement parent = element.getParent();
    if (parent instanceof PsiNamedElement && !(parent instanceof PsiFile)) {
      if (isBlockElement(element)) {
        int index = getBlockElementIndex(element);
        StringBuilder bufferToUse = buffer;
        if (bufferToUse == null) {
          bufferToUse = new StringBuilder();
        }
        bufferToUse.append(TYPE_MARKER).append(ELEMENT_TOKENS_SEPARATOR).append(CODE_BLOCK_MARKER);
        if (index > 0) {
          bufferToUse.append(ELEMENT_TOKENS_SEPARATOR).append(index);
        }
        return bufferToUse;
      }
    }

    return null;
  }
Example #5
0
 public DReference(@NotNull PsiNamedElement element, TextRange textRange) {
   super(element, textRange);
   name = element.getName();
 }
 protected TLSchemaNamedElementReferenceBase(PsiNamedElement element, TextRange rangeInElement) {
   super(element, rangeInElement);
   myName = element.getName();
 }
 public MemberInplaceRenamer(
     @NotNull PsiNamedElement elementToRename, PsiElement substituted, Editor editor) {
   this(
       elementToRename, substituted, editor, elementToRename.getName(), elementToRename.getName());
 }