Type.cpp revision f630bc8736003dcf4aac3dfe47167beb6beb6c6a
11aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber/* 21aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Copyright (C) 2016 The Android Open Source Project 31aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 41aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 51aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * you may not use this file except in compliance with the License. 61aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * You may obtain a copy of the License at 71aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 81aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 91aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 101aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Unless required by applicable law or agreed to in writing, software 111aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 121aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * See the License for the specific language governing permissions and 141aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * limitations under the License. 151aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber */ 161aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber 17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "Type.h" 18c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 19881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include "Formatter.h" 208d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber#include "ScalarType.h" 21881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 22881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <android-base/logging.h> 23881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 24c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 25c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas HuberType::Type() {} 27c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas HuberType::~Type() {} 28c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 295345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huberbool Type::isScope() const { 305345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber return false; 315345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber} 325345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber 33a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huberbool Type::isInterface() const { 34a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber return false; 35a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber} 36a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber 378d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isEnum() const { 388d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 398d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 408d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 418d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isTypeDef() const { 428d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 438d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 448d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 45295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huberbool Type::isBinder() const { 46295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber return false; 47295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber} 48295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber 4939fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huberbool Type::isNamedType() const { 5039fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber return false; 5139fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber} 5239fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber 53f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huberbool Type::isCompoundType() const { 54f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber return false; 55f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber} 56f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber 57737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberconst ScalarType *Type::resolveToScalarType() const { 58737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber return NULL; 59737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber} 60737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 618d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isValidEnumStorageType() const { 628d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber const ScalarType *scalarType = resolveToScalarType(); 638d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 648d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber if (scalarType == NULL) { 658d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 668d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber } 678d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 688d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return scalarType->isValidEnumStorageType(); 698d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 708d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 71979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstd::string Type::getCppType(StorageMode, std::string *, bool) const { 72881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 73881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return std::string(); 74881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 75881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 7685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstd::string Type::getJavaWrapperType() const { 7785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber return getJavaType(); 7885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 7985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 802831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstd::string Type::getJavaSuffix() const { 812831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber CHECK(!"Should not be here"); 822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return std::string(); 832831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 842831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 85881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriter( 86881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 87881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 88881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 89881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 90881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 91881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode) const { 92881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 93881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 94881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 95881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbedded( 96881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 97881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 98881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 99881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 100881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 101881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 102881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode, 103881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 104881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &) const { 105881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 106881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 107881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 1082831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriter( 1092831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 1102831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 1112831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 1122831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader) const { 1132831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber emitJavaReaderWriterWithSuffix( 1142831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out, 1152831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber parcelObj, 1162831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber argName, 1172831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber isReader, 1182831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber getJavaSuffix(), 1192831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber "" /* extra */); 1202831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 1212831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 12285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldInitializer( 12385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, 12485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &fieldName) const { 12585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber out << getJavaType() 12685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << " " 12785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << fieldName 12885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << ";\n"; 12985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 13085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 13185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldReaderWriter( 13285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &, 13385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 13485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 13585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 13685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber bool) const { 13785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber CHECK(!"Should not be here"); 13885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 13985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 140881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError(Formatter &out, ErrorMode mode) const { 141881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber switch (mode) { 142881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Ignore: 143881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 144549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "/* _hidl_err ignored! */\n\n"; 145881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 146881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 147881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 148881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Goto: 149881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 150549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { goto _hidl_error; }\n\n"; 151881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 152881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 153881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 154881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Break: 155881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 156549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { break; }\n\n"; 157881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 158881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 159737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 160737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber case ErrorMode_Return: 161737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber { 162549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { return _hidl_err; }\n\n"; 163737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber break; 164737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber } 165881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 166881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 167881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 168881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError2(Formatter &out, ErrorMode mode) const { 169881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber switch (mode) { 170881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Goto: 171881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 172549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "goto _hidl_error;\n"; 173881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 174881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 175737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 176881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Break: 177881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 178881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "break;\n"; 179881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 180881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 181737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 182881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Ignore: 183881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 184549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "/* ignoring _hidl_error! */"; 185881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 186881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 187737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 188737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber case ErrorMode_Return: 189737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber { 190549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "return _hidl_err;\n"; 191737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber break; 192737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber } 193881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 194881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 195881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 196881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbeddedForTypeName( 197881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 198881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 199881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 200881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 201881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 202881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 203881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 204881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 205881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 206881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 207881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &childName) const { 208881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string parcelObjDeref = 209881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? ("*" + parcelObj) : parcelObj; 210881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 211881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string parcelObjPointer = 212881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? parcelObj : ("&" + parcelObj); 213881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 214881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string nameDeref = name + (nameIsPointer ? "->" : "."); 215881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string namePointer = nameIsPointer ? name : ("&" + name); 216881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 217549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "_hidl_err = "; 218881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 219881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (isReader) { 220881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "const_cast<" 221881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << typeName 222881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << " *>(" 223881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << namePointer 224881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ")->readEmbeddedFromParcel(\n"; 225881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } else { 226881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << nameDeref 227881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << "writeEmbeddedToParcel(\n"; 228881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 229881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 230881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.indent(); 231881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.indent(); 232881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 233881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << (isReader ? parcelObjDeref : parcelObjPointer) 234881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 235881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << parentName 236881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 237881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << offsetText; 238881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 239881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (!childName.empty()) { 240881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ", &" 241881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << childName; 242881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 243881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 244881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ");\n\n"; 245881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 246881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 247881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 248881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 249881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber handleError(out, mode); 250881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 251881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 252881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDeclarations(Formatter &) const { 253881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 254881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 255881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 256881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDefinitions( 257881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, const std::string) const { 258881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 259881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 260881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 26185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstatus_t Type::emitJavaTypeDeclarations(Formatter &, bool) const { 2622831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return OK; 2632831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 2642831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 265881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::needsEmbeddedReadWrite() const { 266881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 267881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 268881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 269881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::resultNeedsDeref() const { 270881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 271881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 272881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 273979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstd::string Type::getCppType(std::string *extra, 274979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland bool specifyNamespaces) const { 275979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland return getCppType(StorageMode_Stack, extra, specifyNamespaces); 276881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 277881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 278979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstd::string Type::getCppResultType(std::string *extra, 279979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland bool specifyNamespaces) const { 280979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland return getCppType(StorageMode_Result, extra, specifyNamespaces); 281881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 282881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 283979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstd::string Type::getCppArgumentType(std::string *extra, 284979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland bool specifyNamespaces) const { 285979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland return getCppType(StorageMode_Argument, extra, specifyNamespaces); 286881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 287881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 2882831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriterWithSuffix( 2892831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 2902831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 2912831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 2922831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader, 2932831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &suffix, 2942831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &extra) const { 2952831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << parcelObj 2962831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "." 2972831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << (isReader ? "read" : "write") 2982831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << suffix 2992831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "("; 3002831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 3012831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber if (isReader) { 3022831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << extra; 3032831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } else { 3042831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << (extra.empty() ? "" : (extra + ", ")); 3052831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << argName; 3062831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 3072831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 3082831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << ");\n"; 3092831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 3102831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 3115158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t Type::emitVtsTypeDeclarations(Formatter &) const { 3125158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return OK; 3135158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 3145158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 315864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhangstatus_t Type::emitVtsAttributeType(Formatter &out) const { 3165158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return emitVtsTypeDeclarations(out); 3175158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 3185158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 31970a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huberbool Type::isJavaCompatible() const { 32070a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber return true; 32170a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber} 32270a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber 32385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::getAlignmentAndSize(size_t *, size_t *) const { 32485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber CHECK(!"Should not be here"); 32585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 32685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 327c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 328c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 329