1bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver/*
2bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * [The "BSD licence"]
3bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * Copyright (c) 2011 Ben Gruver
4bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * All rights reserved.
5bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver *
6bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * Redistribution and use in source and binary forms, with or without
7bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * modification, are permitted provided that the following conditions
8bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * are met:
9bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * 1. Redistributions of source code must retain the above copyright
10bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver *    notice, this list of conditions and the following disclaimer.
11bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * 2. Redistributions in binary form must reproduce the above copyright
12bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver *    notice, this list of conditions and the following disclaimer in the
13bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver *    documentation and/or other materials provided with the distribution.
14bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * 3. The name of the author may not be used to endorse or promote products
15bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver *    derived from this software without specific prior written permission.
16bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver *
17bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver */
28bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver
29bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruverpackage org.jf.dexlib.Code;
30bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver
3194e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruverimport java.util.HashMap;
3294e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver
33bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruverpublic enum VerificationErrorType {
34bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    None(0, "no-error"),
35bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    Generic(1, "generic-error"),
36bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    NoClass(2, "no-such-class"),
37bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    NoField(3, "no-such-field"),
38bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    NoMethod(4, "no-such-method"),
39bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    AccessClass(5, "illegal-class-access"),
40bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    AccessField(6, "illegal-field-access"),
41bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    AccessMethod(7, "illegal-method-access"),
42bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    ClassChange(8, "class-change-error"),
43bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    Instantiation(9, "instantiation-error");
44bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver
4594e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver    private static HashMap<String, VerificationErrorType> verificationErrorTypesByName;
4694e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver
4794e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver    static {
4894e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver        verificationErrorTypesByName = new HashMap<String, VerificationErrorType>();
4994e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver
5094e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver        for (VerificationErrorType verificationErrorType: VerificationErrorType.values()) {
5194e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver            verificationErrorTypesByName.put(verificationErrorType.getName(), verificationErrorType);
5294e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver        }
5394e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver    }
5494e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver
55bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    private int value;
56bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    private String name;
57bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    private VerificationErrorType(int value, String name) {
58bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver        this.value = value;
59bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver        this.name = name;
60bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    }
61bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver
62bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    public int getValue() {
63bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver        return value;
64bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    }
65bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver
66bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    public String getName() {
67bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver        return name;
68bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    }
69bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver
7094e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver    public static VerificationErrorType fromString(String validationErrorType) {
7194e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver        return verificationErrorTypesByName.get(validationErrorType);
7294e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver    }
7394e5a39ad28f997442131a5aa3f574dfa80890a0Ben Gruver
74bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    public static VerificationErrorType getValidationErrorType(int validationErrorType) {
75bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver        switch (validationErrorType) {
76bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 0:
77bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return None;
78bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 1:
79bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return Generic;
80bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 2:
81bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return NoClass;
82bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 3:
83bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return NoField;
84bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 4:
85bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return NoMethod;
86bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 5:
87bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return AccessClass;
88bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 6:
89bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return AccessField;
90bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 7:
91bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return AccessMethod;
92bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 8:
93bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return ClassChange;
94bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver            case 9:
95bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver                return Instantiation;
96bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver        }
97bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver        return null;
98bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    }
99bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver}
100