OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/browser/renderer_host/java/java_type.h" | |
6 | |
7 #include "base/logging.h" | |
8 | |
9 namespace content { | |
10 namespace { | |
11 | |
12 JavaType JavaTypeFromJNIName(const std::string& jni_name) { | |
13 JavaType result; | |
14 DCHECK(!jni_name.empty()); | |
15 switch (jni_name[0]) { | |
16 case 'Z': | |
17 result.type = JavaType::TypeBoolean; | |
18 break; | |
19 case 'B': | |
20 result.type = JavaType::TypeByte; | |
21 break; | |
22 case 'C': | |
23 result.type = JavaType::TypeChar; | |
24 break; | |
25 case 'S': | |
26 result.type = JavaType::TypeShort; | |
27 break; | |
28 case 'I': | |
29 result.type = JavaType::TypeInt; | |
30 break; | |
31 case 'J': | |
32 result.type = JavaType::TypeLong; | |
33 break; | |
34 case 'F': | |
35 result.type = JavaType::TypeFloat; | |
36 break; | |
37 case 'D': | |
38 result.type = JavaType::TypeDouble; | |
39 break; | |
40 case '[': | |
41 result.type = JavaType::TypeArray; | |
42 // LIVECONNECT_COMPLIANCE: We don't support multi-dimensional arrays, so | |
43 // there's no need to populate the inner types. | |
44 break; | |
45 case 'L': | |
46 result.type = jni_name == "Ljava.lang.String;" ? | |
47 JavaType::TypeString : | |
48 JavaType::TypeObject; | |
49 break; | |
50 default: | |
51 // Includes void (V). | |
52 NOTREACHED(); | |
53 } | |
54 return result; | |
55 } | |
56 | |
57 } // namespace | |
58 | |
59 JavaType::JavaType() { | |
60 } | |
61 | |
62 JavaType::JavaType(const JavaType& other) { | |
63 *this = other; | |
64 } | |
65 | |
66 JavaType::~JavaType() { | |
67 } | |
68 | |
69 JavaType& JavaType::operator=(const JavaType& other) { | |
70 type = other.type; | |
71 if (other.inner_type) { | |
72 DCHECK_EQ(JavaType::TypeArray, type); | |
73 inner_type.reset(new JavaType(*other.inner_type)); | |
74 } else { | |
75 inner_type.reset(); | |
76 } | |
77 return *this; | |
78 } | |
79 | |
80 JavaType JavaType::CreateFromBinaryName(const std::string& binary_name) { | |
81 JavaType result; | |
82 DCHECK(!binary_name.empty()); | |
83 if (binary_name == "boolean") { | |
84 result.type = JavaType::TypeBoolean; | |
85 } else if (binary_name == "byte") { | |
86 result.type = JavaType::TypeByte; | |
87 } else if (binary_name == "char") { | |
88 result.type = JavaType::TypeChar; | |
89 } else if (binary_name == "short") { | |
90 result.type = JavaType::TypeShort; | |
91 } else if (binary_name == "int") { | |
92 result.type = JavaType::TypeInt; | |
93 } else if (binary_name == "long") { | |
94 result.type = JavaType::TypeLong; | |
95 } else if (binary_name == "float") { | |
96 result.type = JavaType::TypeFloat; | |
97 } else if (binary_name == "double") { | |
98 result.type = JavaType::TypeDouble; | |
99 } else if (binary_name == "void") { | |
100 result.type = JavaType::TypeVoid; | |
101 } else if (binary_name[0] == '[') { | |
102 result.type = JavaType::TypeArray; | |
103 // The inner type of an array is represented in JNI format. | |
104 result.inner_type.reset(new JavaType(JavaTypeFromJNIName( | |
105 binary_name.substr(1)))); | |
106 } else if (binary_name == "java.lang.String") { | |
107 result.type = JavaType::TypeString; | |
108 } else { | |
109 result.type = JavaType::TypeObject; | |
110 } | |
111 return result; | |
112 } | |
113 | |
114 } // namespace content | |
OLD | NEW |