com.intellij.psi.PsiReference#getElement ( )源码实例Demo

下面列出了com.intellij.psi.PsiReference#getElement ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: BashSupport   文件: FunctionResolveTestCase.java
@NotNull
private PsiElement doCheckFunctionReference(boolean dumbMode) throws Exception {
    boolean oldDumb = DumbService.isDumb(myProject);

    DumbServiceImpl.getInstance(myProject).setDumb(dumbMode);
    try {
        PsiReference psiReference = configure();
        Assert.assertTrue(psiReference.getElement() instanceof BashCommand);
        BashCommand commandElement = (BashCommand) psiReference.getElement();

        Assert.assertTrue(psiReference.resolve() instanceof BashFunctionDef);
        Assert.assertTrue(commandElement.isFunctionCall());
        Assert.assertFalse(commandElement.isVarDefCommand());
        Assert.assertFalse(commandElement.isExternalCommand());
        Assert.assertTrue(commandElement.getReference().isReferenceTo(psiReference.resolve()));

        return psiReference.resolve();
    } finally {
        DumbServiceImpl.getInstance(myProject).setDumb(oldDumb);
    }
}
 
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();
}
 
源代码3 项目: 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);
  }
}
 
源代码4 项目: consulo   文件: GenericInlineHandler.java
public static Map<Language, InlineHandler.Inliner> initializeInliners(PsiElement element,
                                                                      InlineHandler.Settings settings,
                                                                      Collection<? extends PsiReference> allReferences) {
  final Map<Language, InlineHandler.Inliner> inliners = new HashMap<Language, InlineHandler.Inliner>();
  for (PsiReference ref : allReferences) {
    if (ref == null) {
      LOG.error("element: " + element.getClass()+ ", allReferences contains null!");
      continue;
    }
    PsiElement refElement = ref.getElement();
    LOG.assertTrue(refElement != null, ref.getClass().getName());

    final Language language = refElement.getLanguage();
    if (inliners.containsKey(language)) continue;

    final List<InlineHandler> handlers = InlineHandlers.getInlineHandlers(language);
    for (InlineHandler handler : handlers) {
      InlineHandler.Inliner inliner = handler.createInliner(element, settings);
      if (inliner != null) {
        inliners.put(language, inliner);
        break;
      }
    }
  }
  return inliners;
}
 
源代码5 项目: consulo   文件: GenericInlineHandler.java
public static void collectConflicts(final PsiReference reference,
                                    final PsiElement element,
                                    final Map<Language, InlineHandler.Inliner> inliners,
                                    final MultiMap<PsiElement, String> conflicts) {
  final PsiElement referenceElement = reference.getElement();
  if (referenceElement == null) return;
  final Language language = referenceElement.getLanguage();
  final InlineHandler.Inliner inliner = inliners.get(language);
  if (inliner != null) {
    final MultiMap<PsiElement, String> refConflicts = inliner.getConflicts(reference, element);
    if (refConflicts != null) {
      for (PsiElement psiElement : refConflicts.keySet()) {
        conflicts.putValues(psiElement, refConflicts.get(psiElement));
      }
    }
  }
  else {
    conflicts.putValue(referenceElement, "Cannot inline reference from " + language.getID());
  }
}
 
@Nullable
private FoldingDescriptor foldRouteReferenceString(PsiReference reference, String value, FoldingGroup group) {
    PsiElement element = reference.getElement();
    TextRange foldingRange = new TextRange(element.getTextRange().getStartOffset() + 1, element.getTextRange().getEndOffset() - 1);

    if (!RouteIndex.hasRoute(element.getProject(), value)) {
        return null;
    }

    Collection<RouteStub> route = RouteIndex.getRoute(element.getProject(), value);
    if (route.size() == 0) {
        return null;
    }

    RouteStub routeDef = route.iterator().next();

    return new FoldingDescriptor(element.getNode(), foldingRange, group) {
        @Nullable
        @Override
        public String getPlaceholderText() {
            if (routeDef.getPath() == null) {
                return routeDef.getController() + "::" + routeDef.getMethod();
            }

            return routeDef.getPath();
        }
    };
}
 
源代码7 项目: bamboo-soy   文件: SoyIdentifierManipulator.java
@Nullable
@Override
public PsiElement handleContentChange(
    @NotNull PsiElement element, @NotNull TextRange range, String newContent)
    throws IncorrectOperationException {
  if (element instanceof IdentifierMixin) {
    IdentifierMixin identifierMixin = (IdentifierMixin) element;
    PsiReference reference = identifierMixin.getReference();
    if (reference != null && reference.getElement() instanceof PsiNamedElement) {
      ((PsiNamedElement) reference.getElement()).setName(newContent);
    }
  }
  return ((PsiNamedElement) element).setName(newContent);
}
 
源代码8 项目: intellij   文件: BuildTargetElementEvaluator.java
/** Returns null in the cases where we're happy with the default behavior. */
@Nullable
@Override
public PsiElement getElementByReference(PsiReference ref, int flags) {
  if (!(ref instanceof PsiMultiReference) || !(ref.getElement() instanceof StringLiteral)) {
    return null;
  }
  // choose the outer-most reference
  PsiReference[] refs = ((PsiMultiReference) ref).getReferences().clone();
  Arrays.sort(refs, COMPARATOR);
  return refs[0].resolve();
}
 
源代码9 项目: intellij   文件: BlazeGoAnnotatorTest.java
private static void assertNoAnnotations(@Nullable PsiReference reference) {
  assertThat(reference).isNotNull();
  PsiElement element = reference.getElement();
  AnnotationHolderImpl holder =
      new AnnotationHolderImpl(new AnnotationSession(element.getContainingFile()));
  new GoAnnotator().annotate(element, holder);
  assertThat(holder).isEmpty();
}
 
源代码10 项目: JHelper   文件: DeletionMarkingVisitor.java
private void removeIfNoReference(OCElement element) {
	for (PsiReference reference : ReferencesSearch.search(element, searchScope)) {
		PsiElement referenceElement = reference.getElement();
		if (!isParentFor(element, referenceElement)) {
			return;
		}
	}
	toDelete.add(element);
}
 
@NotNull
public static List<PantsQuickFix> findMissingDependencies(@NotNull PsiReference reference) {
  final PsiElement unresolvedPsiElement = reference.getElement();
  @NonNls final String referenceName = reference.getRangeInElement().substring(unresolvedPsiElement.getText());

  final PsiFile containingFile = unresolvedPsiElement.getContainingFile();
  return containingFile != null ? findMissingDependencies(referenceName, containingFile) : Collections.<PantsQuickFix>emptyList();
}
 
@Override
protected void setUp() throws Exception {
    super.setUp();
    for (File file : getTestDataFiles()) {
        if (file.isDirectory()) continue;
        String text = FileUtil.loadFile(file, CharsetToolkit.UTF8);
        text = StringUtil.convertLineSeparators(text);
        int referencedOffset = text.indexOf("<ref>");
        text = text.replace("<ref>", "");
        int resolvedOffset = text.indexOf("<resolved>");
        text = text.replace("<resolved>", "");
        String relativePath = file.getCanonicalPath().substring(
          file.getCanonicalPath().indexOf(getTestDataPath()) + getTestDataPath().length() + 1
        );
        VirtualFile vFile = myFixture.getTempDirFixture().createFile(relativePath, text);
        PsiFile psiFile = myFixture.configureFromTempProjectFile(relativePath);
        if (referencedOffset != -1) {
            referencedElement = psiFile.findReferenceAt(referencedOffset);
            if (referencedElement == null) fail("Reference was null in " + file.getName());
        }
        if (resolvedOffset != -1) {
            final PsiReference ref = psiFile.findReferenceAt(resolvedOffset);
            if (ref == null) { fail("Reference was null in " + file.getName()); }
            resolvedElement = ref.getElement();
            if (resolvedElement == null) { fail("Reference returned null element in " + file.getName()); }
        }
    }
}
 
@Override
protected boolean acceptReference(PsiReference reference)
{
	final PsiElement element = reference.getElement();
	final TextRange textRange = reference.getRangeInElement();
	final String referenceText = element.getText().substring(textRange.getStartOffset(), textRange.getEndOffset());
	return Comparing.strEqual(CSharpPsiUtilImpl.getNameWithoutAt(referenceText), myElementToRename.getName());
}
 
源代码14 项目: intellij-haxe   文件: HaxeFindUsagesHandler.java
@NotNull
private static ReadActionProcessor<PsiReference> getConstructorSearchProcessor(@NotNull Processor<UsageInfo> processor) {
  return new ReadActionProcessor<PsiReference>() {
    @Override
    public boolean processInReadAction(PsiReference reference) {
      PsiElement refElement = reference.getElement();
      final PsiElement parent = refElement.getParent();
      if (parent instanceof HaxeType && parent.getParent() instanceof HaxeNewExpression) {
        TextRange rangeInElement = reference.getRangeInElement();
        processor.process(new UsageInfo(refElement, rangeInElement.getStartOffset(), rangeInElement.getEndOffset(), false));
      }
      return true;
    }
  };
}
 
源代码15 项目: consulo   文件: FindUsagesHelper.java
public static boolean processUsagesInText(@Nonnull final PsiElement element,
                                             @Nonnull Collection<String> stringToSearch,
                                             @Nonnull GlobalSearchScope searchScope,
                                             @Nonnull Processor<UsageInfo> processor) {
  final TextRange elementTextRange = ApplicationManager.getApplication().runReadAction(new NullableComputable<TextRange>() {
    @Override
    public TextRange compute() {
      if (!element.isValid() || element instanceof PsiCompiledElement) return null;
      return element.getTextRange();
    }
  });
  UsageInfoFactory factory = new UsageInfoFactory() {
    @Override
    public UsageInfo createUsageInfo(@Nonnull PsiElement usage, int startOffset, int endOffset) {
      if (elementTextRange != null
          && usage.getContainingFile() == element.getContainingFile()
          && elementTextRange.contains(startOffset)
          && elementTextRange.contains(endOffset)) {
        return null;
      }

      PsiReference someReference = usage.findReferenceAt(startOffset);
      if (someReference != null) {
        PsiElement refElement = someReference.getElement();
        for (PsiReference ref : PsiReferenceService.getService().getReferences(refElement, new PsiReferenceService.Hints(element, null))) {
          if (element.getManager().areElementsEquivalent(ref.resolve(), element)) {
            TextRange range = ref.getRangeInElement().shiftRight(refElement.getTextRange().getStartOffset() - usage.getTextRange().getStartOffset());
            return new UsageInfo(usage, range.getStartOffset(), range.getEndOffset(), true);
          }
        }
      }

      return new UsageInfo(usage, startOffset, endOffset, true);
    }
  };
  for (String s : stringToSearch) {
    if (!PsiSearchHelperImpl.processTextOccurrences(element, s, searchScope, processor, factory)) return false;
  }
  return true;
}
 
源代码16 项目: consulo   文件: HighlightManagerImpl.java
@Override
public void addOccurrenceHighlights(@Nonnull Editor editor,
                                    @Nonnull PsiReference[] occurrences,
                                    @Nonnull TextAttributes attributes,
                                    boolean hideByTextChange,
                                    Collection<RangeHighlighter> outHighlighters) {
  if (occurrences.length == 0) return;
  int flags = HIDE_BY_ESCAPE;
  if (hideByTextChange) {
    flags |= HIDE_BY_TEXT_CHANGE;
  }
  Color scrollmarkColor = getScrollMarkColor(attributes);

  int oldOffset = editor.getCaretModel().getOffset();
  int horizontalScrollOffset = editor.getScrollingModel().getHorizontalScrollOffset();
  int verticalScrollOffset = editor.getScrollingModel().getVerticalScrollOffset();
  for (PsiReference occurrence : occurrences) {
    PsiElement element = occurrence.getElement();
    int startOffset = element.getTextRange().getStartOffset();
    int start = startOffset + occurrence.getRangeInElement().getStartOffset();
    int end = startOffset + occurrence.getRangeInElement().getEndOffset();
    PsiFile containingFile = element.getContainingFile();
    Project project = element.getProject();
    // each reference can reside in its own injected editor
    Editor textEditor = InjectedLanguageUtil.openEditorFor(containingFile, project);
    if (textEditor != null) {
      addOccurrenceHighlight(textEditor, start, end, attributes, flags, outHighlighters, scrollmarkColor);
    }
  }
  editor.getCaretModel().moveToOffset(oldOffset);
  editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
  editor.getScrollingModel().scrollHorizontally(horizontalScrollOffset);
  editor.getScrollingModel().scrollVertically(verticalScrollOffset);
}
 
源代码17 项目: consulo   文件: ExternalJavaDocAction.java
private static PsiElement getElement(DataContext dataContext, Editor editor) {
  PsiElement element = dataContext.getData(CommonDataKeys.PSI_ELEMENT);
  if (element == null && editor != null) {
    PsiReference reference = TargetElementUtil.findReference(editor, editor.getCaretModel().getOffset());
    if (reference != null) {
      element = reference.getElement();
    }
  }
  return element;
}
 
源代码18 项目: consulo   文件: ReferenceDescriptor.java
public ReferenceDescriptor fun(PsiReference psiReference) {
  final PsiElement element = psiReference.getElement();
  final PsiFile file = element.getContainingFile();
  return new ReferenceDescriptor(file, element.getTextRange().getStartOffset() + psiReference.getRangeInElement().getStartOffset());
}
 
源代码19 项目: consulo   文件: TemplateBuilderImpl.java
private RangeMarker wrapReference(final PsiReference ref) {
  PsiElement element = ref.getElement();
  return myDocument.createRangeMarker(ref.getRangeInElement().shiftRight(
    InjectedLanguageManager.getInstance(myFile.getProject()).injectedToHost(element, element.getTextRange().getStartOffset())
  ));
}