Package com.intellij.psi

Examples of com.intellij.psi.PsiReference


  protected ErlangVisitor buildErlangVisitor(@NotNull final ProblemsHolder holder,
                                             @NotNull LocalInspectionToolSession session) {
    return new ErlangVisitor() {
      @Override
      public void visitFunctionCallExpression(@NotNull ErlangFunctionCallExpression o) {
        PsiReference reference = o.getReference();
        if (reference instanceof ErlangFunctionReferenceImpl && reference.resolve() == null) {
          if (o.getQAtom().getMacros() != null) return;
          ErlangFunctionReferenceImpl r = (ErlangFunctionReferenceImpl) reference;

          String name = r.getName();
          int arity = r.getArity();

          if (arity < 0) return;
          if (ErlangBifTable.isBif("erlang", name, arity)) return;

          String signature = r.getSignature();

          PsiElement parent = o.getParent();
          if (parent instanceof ErlangGlobalFunctionCallExpression) {
            ErlangModuleRef moduleRef = ((ErlangGlobalFunctionCallExpression) parent).getModuleRef();
            if (moduleRef.getQAtom().getMacros() != null) return;
            String moduleName = moduleRef.getText();
            if (ErlangBifTable.isBif(moduleName, name, arity)) return;
            signature = moduleName + ":" + signature;
          }

          LocalQuickFix[] qfs = parent instanceof ErlangGenericFunctionCallExpression || parent instanceof ErlangGlobalFunctionCallExpression ?
            new LocalQuickFix[]{} :
            new LocalQuickFix[]{new ErlangCreateFunctionQuickFix(name, arity)};

          holder.registerProblem(o.getNameIdentifier(), "Unresolved function " + "'" + signature + "'", qfs);
        }
      }

      @Override
      public void visitSpecFun(@NotNull ErlangSpecFun o) {
        inspect(o, o.getQAtom(), o.getReference());
      }

      @Override
      public void visitFunctionWithArity(@NotNull ErlangFunctionWithArity o) {
        inspect(o, o.getQAtom(), o.getReference());
      }

      private void inspect(PsiElement what, ErlangQAtom target, @Nullable PsiReference reference) {
        if (PsiTreeUtil.getParentOfType(what, ErlangCallbackSpec.class) != null || target.getMacros() != null ||
          !(reference instanceof ErlangFunctionReferenceImpl) || reference.resolve() != null) {
          return;
        }

        ErlangFunctionReferenceImpl r = (ErlangFunctionReferenceImpl) reference;
        if (r.getArity() < 0) return; //there is no need to inspect incomplete/erroneous code
View Full Code Here


      for (final ErlangFunctionClause functionClause : function.getFunctionClauseList()) {
        functionClause.accept(new ErlangRecursiveVisitor() {
          @Override
          public void visitQVar(@NotNull ErlangQVar o) {
            if (!isForceSkipped(o) && !isMacros(o) && (inArgumentDefinition(o) && !inArgumentList(o) || inLeftPartOfAssignment(o))) {
              PsiReference reference = o.getReference();
              PsiElement resolve = reference != null ? reference.resolve() : null;
              if (resolve == null) {
                Query<PsiReference> search = ReferencesSearch.search(o, new LocalSearchScope(functionClause));
                for (PsiReference ref : search) {
                  PsiElement element = ref.getElement();
                  if (ErlangPsiImplUtil.fromTheSameCaseExpression(o, element)) {
                    PsiReference reference1 = element.getReference();
                    if (reference1 == null || reference1.resolve() == null) continue;
                  }
                  return;
                }
                problemsHolder.registerProblem(o, "Unused variable " + "'" + o.getText() + "'", ProblemHighlightType.LIKE_UNUSED_SYMBOL, new ErlangRenameVariableFix());
              }
View Full Code Here

      }
    };
  }

  private static void process(@NotNull PsiElement o, @NotNull ProblemsHolder problemsHolder) {
    PsiReference ref = o.getReference();
    if (ref == null || ref.resolve() == null) {
      problemsHolder.registerProblem(o, "Unresolved record " + "'" + o.getText() + "'", new ErlangIntroduceRecordFix());
    }
  }
View Full Code Here

    String fullName = ErlangPsiImplUtil.createFunctionPresentation(function);
    if (file instanceof ErlangFile) {
      List<ErlangBehaviour> behaviours = ((ErlangFile) file).getBehaviours();
      for (ErlangBehaviour behaviour : behaviours) {
        ErlangModuleRef moduleRef = behaviour.getModuleRef();
        PsiReference reference = moduleRef != null ? moduleRef.getReference() : null;
        PsiElement resolve = reference != null ? reference.resolve() : null;
        PsiFile containingFile = resolve != null ? resolve.getContainingFile() : null;

        ErlangCallbackSpec callbackSpec = containingFile instanceof ErlangFile ? ((ErlangFile) containingFile).getCallbackByName(fullName) : null;
        ContainerUtil.addIfNotNull(callbackSpecs, callbackSpec);
      }
View Full Code Here

    List<ErlangCallbackSpec> toOverwrite = new LinkedList<ErlangCallbackSpec>();
    List<Pair<String, String >> namesAndNames = new LinkedList<Pair<String, String>>();

    for (ErlangBehaviour behaviour : file.getBehaviours()) {
      ErlangModuleRef moduleRef = behaviour.getModuleRef();
      PsiReference reference = moduleRef != null ? moduleRef.getReference() : null;
      PsiElement resolve = reference != null ? reference.resolve() : null;

      if (resolve instanceof ErlangModule) {
        PsiFile containingFile = resolve.getContainingFile();
        if (containingFile instanceof ErlangFile) {
          Map<String, ErlangCallbackSpec> callbackMap = ((ErlangFile) containingFile).getCallbackMap();
View Full Code Here

        }
      }

      @Override
      public void visitFunctionCallExpression(@NotNull ErlangFunctionCallExpression o) {
        PsiReference reference = o.getReference();
        PsiElement element = reference != null ? reference.resolve() : null ;
        if (element instanceof ErlangFunction) {
          ref.set(calculateFunctionType((ErlangFunction) element));
        }
      }
View Full Code Here

      @Override
      public void visitMacros(@NotNull ErlangMacros o) {
        ErlangMacrosName macrosName = o.getMacrosName();
        if (macrosName == null) return;
        if (ErlangPsiImplUtil.KNOWN_MACROS.contains(macrosName.getText())) return;
        PsiReference reference = o.getReference();
        if (reference != null && reference.resolve() == null) {
          holder.registerProblem(o, "Unresolved macros " + "'" + o.getText() + "'", new ErlangIntroduceMacroQuickFix());
        }
      }
    };
  }
View Full Code Here

    ErlangPsiImplUtil.renameQAtom((ErlangQAtom) element, newName);

    if (hasBindables) {
      for (UsageInfo usage : usages) {
        final PsiReference ref = usage.getReference();
        if (ref instanceof BindablePsiReference) {
          try {
            ref.bindToElement(element);
          }
          catch (IncorrectOperationException e) {//fall back to old scheme
            ref.handleElementRename(newName);
          }
        }
      }
    }
    if (listener != null) {
View Full Code Here

  @Override
  protected ErlangVisitor buildErlangVisitor(@NotNull final ProblemsHolder holder, @NotNull LocalInspectionToolSession session) {
    return new ErlangVisitor() {
      @Override
      public void visitExportFunction(@NotNull ErlangExportFunction o) {
        PsiReference reference = o.getReference();
        if (reference.resolve() == null) {
          String name = o.getQAtom().getText();
          int arity = ErlangPsiImplUtil.getArity(o.getInteger());
          if (arity >= 0) {
            holder.registerProblem(o, "Unresolved function " + "'" + o.getText() + "'",
              new ErlangCreateFunctionQuickFix(name, arity));
View Full Code Here

      myElement = element;
      myPsiReferenceProcessor = psiReferenceProcessor;
    }

    public boolean execute(@NotNull PsiElement element, int offsetInElement) {
      PsiReference ref = element.getReference();
      if (ref!=null && ref.isReferenceTo(myElement)) {
        return myPsiReferenceProcessor.process(ref);
      }
      return true;
    }
View Full Code Here

TOP

Related Classes of com.intellij.psi.PsiReference

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.