1d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver/*
2d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * Copyright 2012, Google Inc.
3d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * All rights reserved.
4d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver *
5d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * Redistribution and use in source and binary forms, with or without
6d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * modification, are permitted provided that the following conditions are
7d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * met:
8d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver *
9d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver *     * Redistributions of source code must retain the above copyright
10d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * notice, this list of conditions and the following disclaimer.
11d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver *     * Redistributions in binary form must reproduce the above
12d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * copyright notice, this list of conditions and the following disclaimer
13d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * in the documentation and/or other materials provided with the
14d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * distribution.
15d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver *     * Neither the name of Google Inc. nor the names of its
16d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * contributors may be used to endorse or promote products derived from
17d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * this software without specific prior written permission.
18d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver *
19d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver */
31d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver
32d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruverpackage org.jf.dexlib2.immutable.util;
33d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver
34d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruverimport com.google.common.collect.ImmutableList;
35d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruverimport org.jf.util.ImmutableConverter;
36d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver
37d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruverimport javax.annotation.Nonnull;
38d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruverimport javax.annotation.Nullable;
39d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver
40d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruverpublic final class CharSequenceConverter {
41d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver    private CharSequenceConverter() {
42d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver    }
43d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver
44d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver    @Nonnull
455fa302678ce3a8e08fa8d2e8dbc5424781e751a6Ben Gruver    public static ImmutableList<String> immutableStringList(@Nullable Iterable<? extends CharSequence> iterable) {
465fa302678ce3a8e08fa8d2e8dbc5424781e751a6Ben Gruver        return CONVERTER.toList(iterable);
47d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver    }
48d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver
49d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver    private static final ImmutableConverter<String, CharSequence> CONVERTER =
50d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver            new ImmutableConverter<String, CharSequence>() {
51d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver                @Override
52d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver                protected boolean isImmutable(@Nonnull CharSequence item) {
53d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver                    return item instanceof String;
54d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver                }
55d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver
56d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver                @Nonnull
57d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver                @Override
58d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver                protected String makeImmutable(@Nonnull CharSequence item) {
59d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver                    return item.toString();
60d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver                }
61d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver            };
62d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver}
63