com.intellij.psi.codeStyle.arrangement.match.ArrangementSectionRule

Here are the examples of the java api class com.intellij.psi.codeStyle.arrangement.match.ArrangementSectionRule taken from open source projects.

1. ArrangementSectionDetector#processComment()

Project: intellij-community
File: ArrangementSectionDetector.java
/**
   * Check if comment can be recognized as section start/end
   * @return true for section comment, false otherwise
   */
public boolean processComment(@NotNull PsiComment comment) {
    final TextRange range = comment.getTextRange();
    final TextRange expandedRange = myDocument == null ? range : ArrangementUtil.expandToLineIfPossible(range, myDocument);
    final TextRange sectionTextRange = new TextRange(expandedRange.getStartOffset(), expandedRange.getEndOffset());
    final String commentText = comment.getText().trim();
    final ArrangementSectionRule openSectionRule = isSectionStartComment(mySettings, commentText);
    if (openSectionRule != null) {
        mySectionEntryProducer.consume(new ArrangementSectionEntryTemplate(comment, START_SECTION, sectionTextRange, commentText));
        myOpenedSections.push(openSectionRule);
        return true;
    }
    if (!myOpenedSections.isEmpty()) {
        final ArrangementSectionRule lastSection = myOpenedSections.peek();
        if (lastSection.getEndComment() != null && StringUtil.equals(commentText, lastSection.getEndComment())) {
            mySectionEntryProducer.consume(new ArrangementSectionEntryTemplate(comment, END_SECTION, sectionTextRange, commentText));
            myOpenedSections.pop();
            return true;
        }
    }
    return false;
}

2. ArrangementEngine#arrange()

Project: intellij-community
File: ArrangementEngine.java
/**
   * Arranges (re-orders) given entries according to the given rules.
   *
   * @param entries            entries to arrange
   * @param sectionRules       rules to use for arrangement
   * @param rulesByPriority    rules sorted by priority ('public static' rule will have higher priority than 'public')
   * @param entryToSection     mapping from arrangement entry to the parent section
   * @return                   arranged list of the given rules
   */
@SuppressWarnings("AssignmentToForLoopParameter")
@NotNull
public static <E extends ArrangementEntry> List<E> arrange(@NotNull Collection<E> entries, @NotNull List<ArrangementSectionRule> sectionRules, @NotNull List<? extends ArrangementMatchRule> rulesByPriority, @Nullable Map<E, ArrangementSectionRule> entryToSection) {
    List<E> arranged = ContainerUtilRt.newArrayList();
    Set<E> unprocessed = ContainerUtilRt.newLinkedHashSet();
    List<Pair<Set<ArrangementEntry>, E>> dependent = ContainerUtilRt.newArrayList();
    for (E entry : entries) {
        List<? extends ArrangementEntry> dependencies = entry.getDependencies();
        if (dependencies == null) {
            unprocessed.add(entry);
        } else {
            if (dependencies.size() == 1 && dependencies.get(0) == entry.getParent()) {
                // Handle a situation when the entry is configured to be at the first parent's children.
                arranged.add(entry);
            } else {
                Set<ArrangementEntry> first = new HashSet<ArrangementEntry>(dependencies);
                dependent.add(Pair.create(first, entry));
            }
        }
    }
    Set<E> matched = new HashSet<E>();
    MultiMap<ArrangementMatchRule, E> elementsByRule = new MultiMap<ArrangementMatchRule, E>();
    for (ArrangementMatchRule rule : rulesByPriority) {
        matched.clear();
        for (E entry : unprocessed) {
            if (entry.canBeMatched() && rule.getMatcher().isMatched(entry)) {
                elementsByRule.putValue(rule, entry);
                matched.add(entry);
            }
        }
        unprocessed.removeAll(matched);
    }
    for (ArrangementSectionRule sectionRule : sectionRules) {
        for (ArrangementMatchRule rule : sectionRule.getMatchRules()) {
            final Collection<E> arrangedEntries = arrangeByRule(arranged, elementsByRule, rule);
            if (entryToSection != null && arrangedEntries != null) {
                for (E entry : arrangedEntries) {
                    entryToSection.put(entry, sectionRule);
                }
            }
        }
    }
    arranged.addAll(unprocessed);
    for (int i = 0; i < arranged.size() && !dependent.isEmpty(); i++) {
        E e = arranged.get(i);
        List<E> shouldBeAddedAfterCurrentElement = ContainerUtil.newArrayList();
        for (Iterator<Pair<Set<ArrangementEntry>, E>> iterator = dependent.iterator(); iterator.hasNext(); ) {
            Pair<Set<ArrangementEntry>, E> pair = iterator.next();
            pair.first.remove(e);
            if (pair.first.isEmpty()) {
                iterator.remove();
                shouldBeAddedAfterCurrentElement.add(pair.second);
            }
        }
        // add dependent entries to the same section as main entry
        if (entryToSection != null && entryToSection.containsKey(e)) {
            final ArrangementSectionRule rule = entryToSection.get(e);
            for (E e1 : shouldBeAddedAfterCurrentElement) {
                entryToSection.put(e1, rule);
            }
        }
        arranged.addAll(i + 1, shouldBeAddedAfterCurrentElement);
    }
    return arranged;
}

3. ArrangementSectionRulesControl#createRuleAliasEditDialog()

Project: intellij-community
File: ArrangementSectionRulesControl.java
@NotNull
public ArrangementRuleAliasDialog createRuleAliasEditDialog() {
    final Set<String> tokenIds = new THashSet<String>();
    final List<ArrangementSectionRule> sections = getSections();
    for (ArrangementSectionRule section : sections) {
        for (StdArrangementMatchRule rule : section.getMatchRules()) {
            rule.getMatcher().getCondition().invite(new ArrangementMatchConditionVisitor() {

                @Override
                public void visit(@NotNull ArrangementAtomMatchCondition condition) {
                    if (ArrangementUtil.isAliasedCondition(condition)) {
                        tokenIds.add(condition.getType().getId());
                    }
                }

                @Override
                public void visit(@NotNull ArrangementCompositeMatchCondition condition) {
                    for (ArrangementMatchCondition operand : condition.getOperands()) {
                        operand.invite(this);
                    }
                }
            });
        }
    }
    final Collection<StdArrangementRuleAliasToken> aliases = getRulesAliases();
    assert aliases != null;
    return new ArrangementRuleAliasDialog(null, mySettingsManager, myColorsProvider, aliases, tokenIds);
}

4. ArrangementSettingsPanel#copy()

Project: intellij-community
File: ArrangementSettingsPanel.java
@NotNull
private static List<ArrangementSectionRule> copy(@NotNull List<ArrangementSectionRule> rules) {
    List<ArrangementSectionRule> result = new ArrayList<ArrangementSectionRule>();
    for (ArrangementSectionRule rule : rules) {
        result.add(rule.clone());
    }
    return result;
}

5. StdArrangementSettings#cloneSectionRules()

Project: intellij-community
File: StdArrangementSettings.java
@NotNull
protected List<ArrangementSectionRule> cloneSectionRules() {
    final ArrayList<ArrangementSectionRule> rules = new ArrayList<ArrangementSectionRule>();
    for (ArrangementSectionRule rule : mySectionRules) {
        rules.add(rule.clone());
    }
    return rules;
}

6. ArrangementSectionDetector#isSectionStartComment()

Project: intellij-community
File: ArrangementSectionDetector.java
@Nullable
public static ArrangementSectionRule isSectionStartComment(@NotNull ArrangementSettings settings, @NotNull String comment) {
    for (ArrangementSectionRule rule : settings.getSections()) {
        if (rule.getStartComment() != null && StringUtil.equals(comment, rule.getStartComment())) {
            return rule;
        }
    }
    return null;
}

7. ArrangementEngine#arrange()

Project: consulo
File: ArrangementEngine.java
/**
   * Arranges (re-orders) given entries according to the given rules.
   *
   * @param entries            entries to arrange
   * @param sectionRules       rules to use for arrangement
   * @param rulesByPriority    rules sorted by priority ('public static' rule will have higher priority than 'public')
   * @param entryToSection     mapping from arrangement entry to the parent section
   * @return                   arranged list of the given rules
   */
@SuppressWarnings("AssignmentToForLoopParameter")
@NotNull
public static <E extends ArrangementEntry> List<E> arrange(@NotNull Collection<E> entries, @NotNull List<ArrangementSectionRule> sectionRules, @NotNull List<? extends ArrangementMatchRule> rulesByPriority, @Nullable Map<E, ArrangementSectionRule> entryToSection) {
    List<E> arranged = ContainerUtilRt.newArrayList();
    Set<E> unprocessed = ContainerUtilRt.newLinkedHashSet();
    List<Pair<Set<ArrangementEntry>, E>> dependent = ContainerUtilRt.newArrayList();
    for (E entry : entries) {
        List<? extends ArrangementEntry> dependencies = entry.getDependencies();
        if (dependencies == null) {
            unprocessed.add(entry);
        } else {
            if (dependencies.size() == 1 && dependencies.get(0) == entry.getParent()) {
                // Handle a situation when the entry is configured to be at the first parent's children.
                arranged.add(entry);
            } else {
                Set<ArrangementEntry> first = new HashSet<ArrangementEntry>(dependencies);
                dependent.add(Pair.create(first, entry));
            }
        }
    }
    Set<E> matched = new HashSet<E>();
    MultiMap<ArrangementMatchRule, E> elementsByRule = new MultiMap<ArrangementMatchRule, E>();
    for (ArrangementMatchRule rule : rulesByPriority) {
        matched.clear();
        for (E entry : unprocessed) {
            if (entry.canBeMatched() && rule.getMatcher().isMatched(entry)) {
                elementsByRule.putValue(rule, entry);
                matched.add(entry);
            }
        }
        unprocessed.removeAll(matched);
    }
    for (ArrangementSectionRule sectionRule : sectionRules) {
        for (ArrangementMatchRule rule : sectionRule.getMatchRules()) {
            final Collection<E> arrangedEntries = arrangeByRule(arranged, elementsByRule, rule);
            if (entryToSection != null && arrangedEntries != null) {
                for (E entry : arrangedEntries) {
                    entryToSection.put(entry, sectionRule);
                }
            }
        }
    }
    arranged.addAll(unprocessed);
    for (int i = 0; i < arranged.size() && !dependent.isEmpty(); i++) {
        E e = arranged.get(i);
        List<E> shouldBeAddedAfterCurrentElement = ContainerUtil.newArrayList();
        for (Iterator<Pair<Set<ArrangementEntry>, E>> iterator = dependent.iterator(); iterator.hasNext(); ) {
            Pair<Set<ArrangementEntry>, E> pair = iterator.next();
            pair.first.remove(e);
            if (pair.first.isEmpty()) {
                iterator.remove();
                shouldBeAddedAfterCurrentElement.add(pair.second);
            }
        }
        // add dependent entries to the same section as main entry
        if (entryToSection != null && entryToSection.containsKey(e)) {
            final ArrangementSectionRule rule = entryToSection.get(e);
            for (E e1 : shouldBeAddedAfterCurrentElement) {
                entryToSection.put(e1, rule);
            }
        }
        arranged.addAll(i + 1, shouldBeAddedAfterCurrentElement);
    }
    return arranged;
}

8. ArrangementSectionRulesControl#createRuleAliasEditDialog()

Project: consulo
File: ArrangementSectionRulesControl.java
@NotNull
public ArrangementRuleAliasDialog createRuleAliasEditDialog() {
    final Set<String> tokenIds = new THashSet<String>();
    final List<ArrangementSectionRule> sections = getSections();
    for (ArrangementSectionRule section : sections) {
        for (StdArrangementMatchRule rule : section.getMatchRules()) {
            rule.getMatcher().getCondition().invite(new ArrangementMatchConditionVisitor() {

                @Override
                public void visit(@NotNull ArrangementAtomMatchCondition condition) {
                    if (ArrangementUtil.isAliasedCondition(condition)) {
                        tokenIds.add(condition.getType().getId());
                    }
                }

                @Override
                public void visit(@NotNull ArrangementCompositeMatchCondition condition) {
                    for (ArrangementMatchCondition operand : condition.getOperands()) {
                        operand.invite(this);
                    }
                }
            });
        }
    }
    final Collection<StdArrangementRuleAliasToken> aliases = getRulesAliases();
    assert aliases != null;
    return new ArrangementRuleAliasDialog(null, mySettingsManager, myColorsProvider, aliases, tokenIds);
}

9. ArrangementSettingsPanel#copy()

Project: consulo
File: ArrangementSettingsPanel.java
@NotNull
private static List<ArrangementSectionRule> copy(@NotNull List<ArrangementSectionRule> rules) {
    List<ArrangementSectionRule> result = new ArrayList<ArrangementSectionRule>();
    for (ArrangementSectionRule rule : rules) {
        result.add(rule.clone());
    }
    return result;
}

10. StdArrangementSettings#cloneSectionRules()

Project: consulo
File: StdArrangementSettings.java
@NotNull
protected List<ArrangementSectionRule> cloneSectionRules() {
    final ArrayList<ArrangementSectionRule> rules = new ArrayList<ArrangementSectionRule>();
    for (ArrangementSectionRule rule : mySectionRules) {
        rules.add(rule.clone());
    }
    return rules;
}