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.
5 #include "content/browser/renderer_host/java/java_type.h"
7 #include "base/logging.h"
12 JavaType JavaTypeFromJNIName(const std::string& jni_name) {
14 DCHECK(!jni_name.empty());
15 switch (jni_name[0]) {
17 result.type = JavaType::TypeBoolean;
20 result.type = JavaType::TypeByte;
23 result.type = JavaType::TypeChar;
26 result.type = JavaType::TypeShort;
29 result.type = JavaType::TypeInt;
32 result.type = JavaType::TypeLong;
35 result.type = JavaType::TypeFloat;
38 result.type = JavaType::TypeDouble;
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.
46 result.type = jni_name == "Ljava.lang.String;" ?
47 JavaType::TypeString :
59 JavaType::JavaType() {
62 JavaType::JavaType(const JavaType& other) {
66 JavaType::~JavaType() {
69 JavaType& JavaType::operator=(const JavaType& other) {
71 if (other.inner_type) {
72 DCHECK_EQ(JavaType::TypeArray, type);
73 inner_type.reset(new JavaType(*other.inner_type));
80 JavaType JavaType::CreateFromBinaryName(const std::string& binary_name) {
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;
109 result.type = JavaType::TypeObject;
114 } // namespace content