Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / content / browser / renderer_host / java / java_type.cc
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