private void addAllSubsInFile(
      CompletionParameters parameters, CompletionResultSet resultSet, boolean limitResults) {
    ArrayList<Package> packageList =
        ModulesContainer.getPackageListFromFile(
            parameters.getOriginalFile().getVirtualFile().getCanonicalPath());

    for (int i = 0; i < packageList.size(); i++) {
      ArrayList<Sub> subs = packageList.get(i).getAllSubs();
      int amount =
          (false)
              ? Math.min(AUTO_POPUP_SUBS_ITEMS_LIMIT, subs.size())
              : subs.size(); // get all results only if users press ctrl+space
      for (int j = 0; j < amount; j++) {
        addCachedSub(resultSet, subs.get(j));
      }
      ArrayList<ImportedSub> importedSubs = packageList.get(i).getImportedSubs();
      amount =
          (false)
              ? Math.min(AUTO_POPUP_SUBS_ITEMS_LIMIT, importedSubs.size())
              : importedSubs.size(); // get all results only if users press ctrl+space

      for (int j = 0; j < amount; j++) {
        ArrayList<Package> packages =
            ModulesContainer.getPackageList(
                importedSubs.get(j).getContainingPackage()); // TODO: handle more than 1 package
        if (packages.size() > 0) {
          Sub sub = packages.get(0).getSubByName(importedSubs.get(j).getImportSub());
          if (sub != null) {
            addCachedSub(resultSet, sub);
          }
        }
      }
    }
  }
Exemplo n.º 2
0
  public boolean fillInCommonPrefix(boolean explicitlyInvoked) {
    if (explicitlyInvoked) {
      setFocusDegree(FocusDegree.FOCUSED);
    }

    if (explicitlyInvoked && myCalculating) return false;
    if (!explicitlyInvoked && mySelectionTouched) return false;

    ListModel listModel = getListModel();
    if (listModel.getSize() <= 1) return false;

    if (listModel.getSize() == 0) return false;

    final LookupElement firstItem = (LookupElement) listModel.getElementAt(0);
    if (listModel.getSize() == 1 && firstItem instanceof EmptyLookupItem) return false;

    final PrefixMatcher firstItemMatcher = itemMatcher(firstItem);
    final String oldPrefix = firstItemMatcher.getPrefix();
    final String presentPrefix = oldPrefix + getAdditionalPrefix();
    String commonPrefix = getCaseCorrectedLookupString(firstItem);

    for (int i = 1; i < listModel.getSize(); i++) {
      LookupElement item = (LookupElement) listModel.getElementAt(i);
      if (item instanceof EmptyLookupItem) return false;
      if (!oldPrefix.equals(itemMatcher(item).getPrefix())) return false;

      final String lookupString = getCaseCorrectedLookupString(item);
      final int length = Math.min(commonPrefix.length(), lookupString.length());
      if (length < commonPrefix.length()) {
        commonPrefix = commonPrefix.substring(0, length);
      }

      for (int j = 0; j < length; j++) {
        if (commonPrefix.charAt(j) != lookupString.charAt(j)) {
          commonPrefix = lookupString.substring(0, j);
          break;
        }
      }

      if (commonPrefix.length() == 0 || commonPrefix.length() < presentPrefix.length()) {
        return false;
      }
    }

    if (commonPrefix.equals(presentPrefix)) {
      return false;
    }

    for (int i = 0; i < listModel.getSize(); i++) {
      LookupElement item = (LookupElement) listModel.getElementAt(i);
      if (!itemMatcher(item).cloneWithPrefix(commonPrefix).prefixMatches(item)) {
        return false;
      }
    }

    myOffsets.setInitialPrefix(presentPrefix, explicitlyInvoked);

    replacePrefix(presentPrefix, commonPrefix);
    return true;
  }
  private void addAllSubsInPackage(
      CompletionResultSet resultSet,
      PerlElement packageName,
      boolean withArguments,
      boolean limitResults) {
    ArrayList<Package> packageList = ModulesContainer.getPackageList(packageName.getText());

    if (Utils.verbose) {
      Utils.print("Detected Package:" + packageName);
    }
    for (int i = 0; i < packageList.size(); i++) {
      Package packageObj = packageList.get(i);

      ArrayList<Sub> subs = packageObj.getAllSubs();
      int amount =
          (false)
              ? Math.min(AUTO_POPUP_SUBS_ITEMS_LIMIT, subs.size())
              : subs.size(); // get all results only if users press ctrl+space
      for (int j = 0; j < amount; j++) {
        if (withArguments) {
          addCachedSub(resultSet, subs.get(j));
        } else {
          addCachedSubNoArgs(resultSet, subs.get(j));
        }
      }
    }
  }
Exemplo n.º 4
0
 private void updateLookupWidth(LookupElement item, LookupElementPresentation presentation) {
   final Font customFont = myCellRenderer.getFontAbleToDisplay(presentation);
   if (customFont != null) {
     myCustomFonts.put(item, customFont);
   }
   int maxWidth = myCellRenderer.updateMaximumWidth(presentation, item);
   myLookupTextWidth = Math.max(maxWidth, myLookupTextWidth);
 }
Exemplo n.º 5
0
  private void updateListHeight(ListModel model) {
    myList.setFixedCellHeight(
        myCellRenderer
            .getListCellRendererComponent(myList, model.getElementAt(0), 0, false, false)
            .getPreferredSize()
            .height);

    myList.setVisibleRowCount(
        Math.min(model.getSize(), UISettings.getInstance().MAX_LOOKUP_LIST_HEIGHT));
  }
 private static HashSet<String> findAllVariables(
     ASTNode[] children, HashSet<String> resultSet, IElementType type, boolean limitResults) {
   int amount =
       (false)
           ? Math.min(AUTO_POPUP_VARS_ITEMS_LIMIT, children.length)
           : children.length; // get all results only if users press ctrl+space
   for (int i = 0; i < amount; i++) {
     ASTNode astNode = children[i].findChildByType(type);
     if (astNode != null) {
       resultSet.add(astNode.getText());
     } else if (children[i].getChildren(null) != null) {
       findAllVariables(children[i].getChildren(null), resultSet, type, false);
     }
   }
   return resultSet;
 }