类com.intellij.psi.ReferenceRange源码实例Demo

下面列出了怎么用com.intellij.psi.ReferenceRange的API类实例代码及写法,或者点击链接到github查看源代码。

public static String getPrefix(CompletionParameters parameters) {
    PsiElement insertedElement = parameters.getPosition();
    int offsetInFile = parameters.getOffset();

    PsiReference ref = insertedElement.getContainingFile().findReferenceAt(offsetInFile);
    if (isStep(insertedElement) && ref != null) {
        List<TextRange> ranges = ReferenceRange.getRanges(ref);
        PsiElement element = ref.getElement();
        int startOffset = element.getTextRange().getStartOffset();
        for (TextRange range : ranges) {
            if (range.contains(offsetInFile - startOffset)) {
                int endIndex = offsetInFile - startOffset;
                int startIndex = range.getStartOffset();
                return StringUtil.trimStart(element.getText().substring(startIndex + 1, endIndex), " ");
            }
        }

    }
    return parameters.getPosition().getText().replace("IntellijIdeaRulezzz ", "").trim();
}
 
源代码2 项目: consulo-csharp   文件: CC0006.java
@RequiredReadAction
@Nullable
@Override
public HighlightInfoFactory checkImpl(@Nonnull CSharpLanguageVersion languageVersion, @Nonnull CSharpHighlightContext highlightContext, @Nonnull CSharpConstantExpressionImpl element)
{
	PsiReference[] references = element.getReferences();
	for(PsiReference reference : references)
	{
		PsiElement resolved = reference.resolve();
		if(resolved != null)
		{
			continue;
		}

		if(reference instanceof CSharpReferenceWithValidation)
		{
			String errorMessage = ((CSharpReferenceWithValidation) reference).getErrorMessage(element);
			List<TextRange> ranges = ReferenceRange.getAbsoluteRanges(reference);
			return newBuilder(ranges.get(0)).setText(errorMessage);
		}
	}
	return null;
}
 
@Override
public boolean processTextOccurrence(@Nonnull PsiElement element, int offsetInElement, @Nonnull final Processor<? super PsiReference> consumer) {
  if (!myTarget.isValid()) {
    return false;
  }

  final List<PsiReference> references = ourReferenceService.getReferences(element, new PsiReferenceService.Hints(myTarget, offsetInElement));
  //noinspection ForLoopReplaceableByForEach
  for (int i = 0; i < references.size(); i++) {
    PsiReference ref = references.get(i);
    ProgressManager.checkCanceled();
    if (ReferenceRange.containsOffsetInElement(ref, offsetInElement) && ref.isReferenceTo(myTarget) && !consumer.process(ref)) {
      return false;
    }
  }
  return true;
}
 
源代码4 项目: consulo   文件: LegacyCompletionContributor.java
private static void processReference(final CompletionResultSet result,
                                     final int startOffset,
                                     final PairConsumer<PsiReference, CompletionResultSet> consumer,
                                     final PsiReference reference) {
  PsiElement element = reference.getElement();
  final int offsetInElement = startOffset - element.getTextRange().getStartOffset();
  if (!ReferenceRange.containsOffsetInElement(reference, offsetInElement)) {
    return;
  }

  TextRange range = reference.getRangeInElement();
  try {
    final String prefix = element.getText().substring(range.getStartOffset(), offsetInElement);
    consumer.consume(reference, result.withPrefixMatcher(prefix));
  }
  catch (StringIndexOutOfBoundsException e) {
    LOG.error("Reference=" + reference +
              "; element=" + element + " of " + element.getClass() +
              "; range=" + range +
              "; offset=" + offsetInElement,
              e);
  }
}
 
源代码5 项目: consulo   文件: CompletionProgressIndicator.java
private static int findReplacementOffset(int selectionEndOffset, PsiReference reference) {
  final List<TextRange> ranges = ReferenceRange.getAbsoluteRanges(reference);
  for (TextRange range : ranges) {
    if (range.contains(selectionEndOffset)) {
      return range.getEndOffset();
    }
  }

  return selectionEndOffset;
}
 
 类所在包
 类方法
 同包方法