Example usage for com.google.common.collect RangeSet rangeContaining

List of usage examples for com.google.common.collect RangeSet rangeContaining

Introduction

In this page you can find the example usage for com.google.common.collect RangeSet rangeContaining.

Prototype

Range<C> rangeContaining(C value);

Source Link

Document

Returns the unique range from this range set that Range#contains contains value , or null if this range set does not contain value .

Usage

From source file:org.rf.ide.core.testdata.model.table.keywords.names.EmbeddedKeywordNamesSupport.java

private static int startsWith(final String definitionName, final String occurrenceNamePrefix) {
    if (definitionName.startsWith(occurrenceNamePrefix)) {
        return occurrenceNamePrefix.length();
    } else if (definitionName.indexOf('$') == -1) {
        return -1;
    }/*from   w  w w  .  j  av  a 2s. c  o m*/

    final RangeSet<Integer> varRanges = findEmbeddedArgumentsRanges(definitionName);

    int i = definitionName.length();
    while (i >= 0) {
        final String shortenedDefinition = definitionName.substring(0, i);
        final boolean matches = matchesIgnoreCase(shortenedDefinition, occurrenceNamePrefix);
        if (matches) {
            return i;
        }

        i--;
        if (varRanges.contains(i)) {
            final Range<Integer> range = varRanges.rangeContaining(i);
            i = range.lowerEndpoint();
        }
    }
    return -1;
}

From source file:org.rf.ide.core.testdata.model.table.keywords.names.EmbeddedKeywordNamesSupport.java

private static String substituteVariablesWithRegex(final String definitionName, final boolean ignoreCase) {
    final StringBuilder wholeRegex = new StringBuilder();

    final RangeSet<Integer> varRanges = findEmbeddedArgumentsRanges(definitionName);

    StringBuilder exactWordPatternRegex = new StringBuilder();
    int i = 0;/*from  ww  w.j  a va  2  s  . c  o  m*/
    while (i < definitionName.length()) {
        if (varRanges.contains(i)) {
            if (exactWordPatternRegex.length() > 0) {
                final String exactWordPattern = exactWordPatternRegex.toString();
                wholeRegex
                        .append(Pattern.quote(ignoreCase ? exactWordPattern.toLowerCase() : exactWordPattern));
                exactWordPatternRegex = new StringBuilder();
            }

            final Range<Integer> varRange = varRanges.rangeContaining(i);
            final String internalRegex = getEmbeddedArgumentRegex(definitionName, varRange);
            wholeRegex.append(internalRegex);
            i = varRange.upperEndpoint() + 1;
        } else {
            exactWordPatternRegex.append(definitionName.charAt(i));
            i++;
        }
    }
    if (exactWordPatternRegex.length() > 0) {
        final String exactWordPattern = exactWordPatternRegex.toString();
        wholeRegex.append(Pattern.quote(ignoreCase ? exactWordPattern.toLowerCase() : exactWordPattern));
    }
    return wholeRegex.toString();
}

From source file:com.jeffreybosboom.lyne.Effector.java

public static Pair<Puzzle, ImmutableMap<Node, Region.Point>> parseImage(BufferedImage image) {
    ImmutableSet<Region> regions = Region.connectedComponents(image, Colors.LYNE_COLORS);
    List<Region> nodeRegions = regions.stream().filter(r -> Colors.NODE_COLORS.keySet().contains(r.color()))
            .collect(Collectors.toList());
    //terminal markers and pips are inside node regions, so must be smaller
    int maxSize = nodeRegions.stream().mapToInt(r -> r.points().size()).max().getAsInt();
    List<Region> terminalRegions = regions.stream().filter(r -> r.points().size() < maxSize)
            .filter(r -> r.color() == Colors.TERMINAL_CENTER).collect(Collectors.toList());
    List<Region> pipRegions = regions.stream().filter(r -> r.points().size() < maxSize)
            .filter(r -> r.color() == Colors.PIP).collect(Collectors.toList());

    RangeSet<Integer> rowRanges = TreeRangeSet.create();
    nodeRegions.stream().map(Region::centroid).mapToInt(Region.Point::y)
            .mapToObj(i -> Range.closed(i - TOLERANCE, i + TOLERANCE)).forEachOrdered(rowRanges::add);
    List<Range<Integer>> rows = rowRanges.asRanges().stream().collect(Collectors.toList());
    RangeSet<Integer> colRanges = TreeRangeSet.create();
    nodeRegions.stream().map(Region::centroid).mapToInt(Region.Point::x)
            .mapToObj(i -> Range.closed(i - TOLERANCE, i + TOLERANCE)).forEachOrdered(colRanges::add);
    List<Range<Integer>> cols = colRanges.asRanges().stream().collect(Collectors.toList());

    Node[][] puzzle = new Node[rows.size()][cols.size()];
    ImmutableMap.Builder<Node, Region.Point> mapBuilder = ImmutableMap.builder();
    for (Region r : nodeRegions) {
        Region.Point c = r.centroid();
        Rectangle b = r.boundingBox();
        int row = rows.indexOf(rowRanges.rangeContaining(c.y()));
        int col = cols.indexOf(colRanges.rangeContaining(c.x()));
        Node.Kind kind = Colors.NODE_COLORS.get(r.color());
        Node node;/*w  ww  .j ava  2 s  . c  o  m*/
        if (kind == Node.Kind.OCTAGON) {
            int pips = (int) pipRegions.stream().filter(p -> b.contains(p.boundingBox())).count();
            node = Node.octagon(row, col, pips);
        } else {
            boolean terminal = terminalRegions.stream().anyMatch(t -> b.contains(t.boundingBox()));
            node = terminal ? Node.terminal(row, col, kind) : Node.nonterminal(row, col, kind);
        }
        puzzle[row][col] = node;
        mapBuilder.put(node, c);
    }
    return new Pair<>(new Puzzle(puzzle), mapBuilder.build());
}

From source file:com.google.errorprone.bugpatterns.javadoc.UnescapedEntity.java

private RangeSet<Integer> fixGenerics(RangeSet<Integer> generics, RangeSet<Integer> preTags,
        RangeSet<Integer> dontEmitCodeFix, VisitorState state) {
    RangeSet<Integer> emittedFixes = TreeRangeSet.create();
    for (Range<Integer> range : generics.asRanges()) {
        if (emittedFixes.intersects(range) || dontEmitCodeFix.intersects(range)) {
            continue;
        }//from w ww . j a va 2  s .  co  m
        Range<Integer> regionToWrap = preTags.rangeContaining(range.lowerEndpoint());
        if (regionToWrap == null) {
            regionToWrap = range;
        }
        emittedFixes.add(regionToWrap);
        state.reportMatch(
                buildDescription(getDiagnosticPosition(range.lowerEndpoint(), state.getPath().getLeaf()))
                        .setMessage(
                                "This looks like a type with type parameters. The < and > characters here will "
                                        + "be interpreted as HTML, which can be avoided by wrapping it in a "
                                        + "{@code } tag.")
                        .addFix(wrapInCodeTag(regionToWrap)).build());
    }
    return emittedFixes;
}