xref: /aosp_15_r20/art/libdexfile/dex/descriptors_names.h (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2011 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker #ifndef ART_LIBDEXFILE_DEX_DESCRIPTORS_NAMES_H_
18*795d594fSAndroid Build Coastguard Worker #define ART_LIBDEXFILE_DEX_DESCRIPTORS_NAMES_H_
19*795d594fSAndroid Build Coastguard Worker 
20*795d594fSAndroid Build Coastguard Worker #include <string>
21*795d594fSAndroid Build Coastguard Worker 
22*795d594fSAndroid Build Coastguard Worker #include "dex/primitive.h"
23*795d594fSAndroid Build Coastguard Worker 
24*795d594fSAndroid Build Coastguard Worker namespace art {
25*795d594fSAndroid Build Coastguard Worker 
26*795d594fSAndroid Build Coastguard Worker // Used to implement PrettyClass, PrettyField, PrettyMethod, and PrettyTypeOf,
27*795d594fSAndroid Build Coastguard Worker // one of which is probably more useful to you.
28*795d594fSAndroid Build Coastguard Worker // Returns a human-readable equivalent of 'descriptor'. So "I" would be "int",
29*795d594fSAndroid Build Coastguard Worker // "[[I" would be "int[][]", "[Ljava/lang/String;" would be
30*795d594fSAndroid Build Coastguard Worker // "java.lang.String[]", and so forth.
31*795d594fSAndroid Build Coastguard Worker void AppendPrettyDescriptor(const char* descriptor, std::string* result);
32*795d594fSAndroid Build Coastguard Worker std::string PrettyDescriptor(const char* descriptor);
33*795d594fSAndroid Build Coastguard Worker std::string PrettyDescriptor(Primitive::Type type);
34*795d594fSAndroid Build Coastguard Worker 
35*795d594fSAndroid Build Coastguard Worker // Used to convert user-specified ignored types ("java.lang.String[]",
36*795d594fSAndroid Build Coastguard Worker // "byte[][]") to the form returned by art::mirror::Class->GetDescriptor()
37*795d594fSAndroid Build Coastguard Worker // ("[Ljava/lang/String;", "[[B").
38*795d594fSAndroid Build Coastguard Worker std::string InversePrettyDescriptor(const std::string& pretty_descriptor);
39*795d594fSAndroid Build Coastguard Worker 
40*795d594fSAndroid Build Coastguard Worker // Performs JNI name mangling as described in section 11.3 "Linking Native Methods"
41*795d594fSAndroid Build Coastguard Worker // of the JNI spec.
42*795d594fSAndroid Build Coastguard Worker std::string MangleForJni(const std::string& s);
43*795d594fSAndroid Build Coastguard Worker 
44*795d594fSAndroid Build Coastguard Worker std::string GetJniShortName(const std::string& class_name, const std::string& method_name);
45*795d594fSAndroid Build Coastguard Worker 
46*795d594fSAndroid Build Coastguard Worker // Turn "java.lang.String" into "Ljava/lang/String;".
47*795d594fSAndroid Build Coastguard Worker std::string DotToDescriptor(const char* class_name);
48*795d594fSAndroid Build Coastguard Worker 
49*795d594fSAndroid Build Coastguard Worker // Turn "Ljava/lang/String;" into "java.lang.String" using the conventions of
50*795d594fSAndroid Build Coastguard Worker // java.lang.Class.getName().
51*795d594fSAndroid Build Coastguard Worker std::string DescriptorToDot(const char* descriptor);
52*795d594fSAndroid Build Coastguard Worker 
53*795d594fSAndroid Build Coastguard Worker // Turn "Ljava/lang/String;" into "java/lang/String" using the opposite conventions of
54*795d594fSAndroid Build Coastguard Worker // java.lang.Class.getName().
55*795d594fSAndroid Build Coastguard Worker std::string DescriptorToName(const char* descriptor);
56*795d594fSAndroid Build Coastguard Worker 
57*795d594fSAndroid Build Coastguard Worker // Tests for whether 's' is a valid class name in the three common forms:
58*795d594fSAndroid Build Coastguard Worker bool IsValidBinaryClassName(const char* s);  // "java.lang.String"
59*795d594fSAndroid Build Coastguard Worker bool IsValidJniClassName(const char* s);     // "java/lang/String"
60*795d594fSAndroid Build Coastguard Worker bool IsValidDescriptor(const char* s);       // "Ljava/lang/String;"
61*795d594fSAndroid Build Coastguard Worker 
62*795d594fSAndroid Build Coastguard Worker // Returns whether the given string is a valid field or method name,
63*795d594fSAndroid Build Coastguard Worker // additionally allowing names that begin with '<' and end with '>'.
64*795d594fSAndroid Build Coastguard Worker bool IsValidMemberName(const char* s);
65*795d594fSAndroid Build Coastguard Worker 
66*795d594fSAndroid Build Coastguard Worker }  // namespace art
67*795d594fSAndroid Build Coastguard Worker 
68*795d594fSAndroid Build Coastguard Worker #endif  // ART_LIBDEXFILE_DEX_DESCRIPTORS_NAMES_H_
69