17ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver/*
27ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * Copyright 2012, Google Inc.
37ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * All rights reserved.
47ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver *
57ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * Redistribution and use in source and binary forms, with or without
67ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * modification, are permitted provided that the following conditions are
77ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * met:
87ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver *
97ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver *     * Redistributions of source code must retain the above copyright
107ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * notice, this list of conditions and the following disclaimer.
117ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver *     * Redistributions in binary form must reproduce the above
127ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * copyright notice, this list of conditions and the following disclaimer
137ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * in the documentation and/or other materials provided with the
147ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * distribution.
157ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver *     * Neither the name of Google Inc. nor the names of its
167ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * contributors may be used to endorse or promote products derived from
177ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * this software without specific prior written permission.
187ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver *
197ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
207ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
217ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
227ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
237ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
247ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
257ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
267ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
277ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
287ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
297ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
307ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver */
317ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver
327ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruverpackage org.jf.dexlib2;
337ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver
347ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruverimport org.jf.util.ExceptionWithContext;
357ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver
3685b31462241daf1d5d5e7b5e94ca926e46dff971Ben Gruverpublic final class AnnotationVisibility {
377ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver    public static final int BUILD = 0;
387ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver    public static final int RUNTIME = 1;
397ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver    public static final int SYSTEM = 2;
407ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver
417ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver    private static String[] NAMES = new String[] {"build", "runtime", "system"};
427ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver
437ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver    public static String getVisibility(int visibility) {
447ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver        if (visibility < 0 || visibility >= NAMES.length) {
457ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver            throw new ExceptionWithContext("Invalid annotation visibility %d", visibility);
467ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver        }
477ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver        return NAMES[visibility];
487ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver    }
4985b31462241daf1d5d5e7b5e94ca926e46dff971Ben Gruver
50f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver    public static int getVisibility(String visibility) {
51f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver        visibility = visibility.toLowerCase();
52f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver        if (visibility.equals("build")) {
53f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver            return BUILD;
54f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver        }
55f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver        if (visibility.equals("runtime")) {
56f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver            return RUNTIME;
57f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver        }
58f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver        if (visibility.equals("system")) {
59f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver            return SYSTEM;
60f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver        }
61f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver        throw new ExceptionWithContext("Invalid annotation visibility: %s", visibility);
62f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver    }
63f24f26738dddb0a640b91a1f055b475b5a3ae116Ben Gruver
6485b31462241daf1d5d5e7b5e94ca926e46dff971Ben Gruver    private AnnotationVisibility() {}
657ccb5fcfec99e79a8a65c774900f680690406c01Ben Gruver}
66