Type.cpp revision c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02
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 197c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber#include "Annotation.h" 208d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber#include "ScalarType.h" 21881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 22a72e0d2be173cebf62f728b9d215808bd862f219Iliyan Malchev#include <hidl-util/Formatter.h> 23881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <android-base/logging.h> 24881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 25c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 277c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas HuberType::Type() 287c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber : mAnnotations(nullptr) { 297c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber} 307c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber 31c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas HuberType::~Type() {} 32c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 337c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Hubervoid Type::setAnnotations(std::vector<Annotation *> *annotations) { 347c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber mAnnotations = annotations; 357c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber} 367c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber 377c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huberconst std::vector<Annotation *> &Type::annotations() const { 387c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber return *mAnnotations; 397c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber} 407c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber 415345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huberbool Type::isScope() const { 425345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber return false; 435345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber} 445345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber 45a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huberbool Type::isInterface() const { 46a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber return false; 47a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber} 48a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber 498d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isEnum() const { 508d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 518d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 528d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 538d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isTypeDef() const { 548d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 558d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 568d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 57295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huberbool Type::isBinder() const { 58295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber return false; 59295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber} 60295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber 6139fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huberbool Type::isNamedType() const { 6239fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber return false; 6339fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber} 6439fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber 65f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huberbool Type::isCompoundType() const { 66f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber return false; 67f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber} 68f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber 69709b62dbda6184770bb34470ff550e02c1643e67Andreas Huberbool Type::isArray() const { 70709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber return false; 71709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber} 72709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber 73709b62dbda6184770bb34470ff550e02c1643e67Andreas Huberbool Type::isVector() const { 74709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber return false; 75709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber} 76709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber 77737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberconst ScalarType *Type::resolveToScalarType() const { 78737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber return NULL; 79737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber} 80737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 818d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isValidEnumStorageType() const { 828d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber const ScalarType *scalarType = resolveToScalarType(); 838d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 848d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber if (scalarType == NULL) { 858d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 868d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber } 878d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 888d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return scalarType->isValidEnumStorageType(); 898d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 908d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 91979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstd::string Type::getCppType(StorageMode, std::string *, bool) const { 92881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 93881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return std::string(); 94881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 95881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 964c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huberstd::string Type::getJavaType( 974c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber std::string *extra, bool /* forInitializer */) const { 984c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber CHECK(!"Should not be here"); 994c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber extra->clear(); 1004c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber return std::string(); 1014c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber} 1024c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber 10385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstd::string Type::getJavaWrapperType() const { 1044c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber std::string extra; 1054c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber return getJavaType(&extra); 10685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 10785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 1082831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstd::string Type::getJavaSuffix() const { 1092831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber CHECK(!"Should not be here"); 1102831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return std::string(); 1112831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 1122831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 113c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhangstd::string Type::getVtsType() const { 114c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang CHECK(!"Should not be here"); 115c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang return std::string(); 116c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang} 117c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang 118881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriter( 119881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 120881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 121881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 122881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 123881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 124881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode) const { 125881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 126881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 127881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 128bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongvoid Type::emitResolveReferences( 129bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong Formatter &, 130bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 131bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 132bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 133bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 134bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 135bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong ErrorMode) const { 136bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong CHECK(!"Should not be here"); 137bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 138bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 139bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongvoid Type::emitResolveReferencesEmbedded( 140bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong Formatter &, 141bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong size_t, 142bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 143bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 144bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 145bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 146bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 147bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 148bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong ErrorMode, 149bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 150bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &) const { 151bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong CHECK(!"Should not be here"); 152bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 153bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 15400f471711684903fd747e7871edf437ca54ed397Yifan Hongbool Type::useParentInEmitResolveReferencesEmbedded() const { 15500f471711684903fd747e7871edf437ca54ed397Yifan Hong return true; 15600f471711684903fd747e7871edf437ca54ed397Yifan Hong} 15700f471711684903fd747e7871edf437ca54ed397Yifan Hong 158881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbedded( 159881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 160f9d49f1468bd65595f6f0ae5f4d7300f4e95edf8Andreas Huber size_t, 161881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 162be2a3737675b83dd61b52c11f0d7549fa1276739Yifan Hong const std::string &, 163881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 164881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 165881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 166881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 167881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode, 168881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 169881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &) const { 170881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 171881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 172881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 1732831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriter( 1742831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 1752831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 1762831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 1772831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader) const { 1782831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber emitJavaReaderWriterWithSuffix( 1792831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out, 1802831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber parcelObj, 1812831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber argName, 1822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber isReader, 1832831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber getJavaSuffix(), 1842831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber "" /* extra */); 1852831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 1862831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 18785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldInitializer( 18885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, 18985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &fieldName) const { 1904c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber std::string extra; 1914c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber out << getJavaType(&extra) 19285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << " " 19385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << fieldName 19485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << ";\n"; 19585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 19685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 19785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldReaderWriter( 19885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &, 1994c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber size_t, 20085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 20185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 20285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 203709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber const std::string &, 20485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber bool) const { 20585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber CHECK(!"Should not be here"); 20685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 20785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 208881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError(Formatter &out, ErrorMode mode) const { 209881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber switch (mode) { 210881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Ignore: 211881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 212549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "/* _hidl_err ignored! */\n\n"; 213881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 214881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 215881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 216881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Goto: 217881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 218549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { goto _hidl_error; }\n\n"; 219881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 220881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 221881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 222881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Break: 223881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 224549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { break; }\n\n"; 225881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 226881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 227737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 228737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber case ErrorMode_Return: 229737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber { 230549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { return _hidl_err; }\n\n"; 231737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber break; 232737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber } 233881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 234881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 235881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 236881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError2(Formatter &out, ErrorMode mode) const { 237881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber switch (mode) { 238881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Goto: 239881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 240549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "goto _hidl_error;\n"; 241881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 242881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 243737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 244881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Break: 245881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 246881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "break;\n"; 247881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 248881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 249737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 250881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Ignore: 251881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 252549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "/* ignoring _hidl_error! */"; 253881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 254881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 255737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 256737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber case ErrorMode_Return: 257737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber { 258549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "return _hidl_err;\n"; 259737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber break; 260737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber } 261881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 262881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 263881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 264881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbeddedForTypeName( 265881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 266881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 267881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 268881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 269881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 270881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 271881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 272881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 273881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 274881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 275881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &childName) const { 276881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string parcelObjDeref = 277881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? ("*" + parcelObj) : parcelObj; 278881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 279881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string parcelObjPointer = 280881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? parcelObj : ("&" + parcelObj); 281881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 282881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string nameDeref = name + (nameIsPointer ? "->" : "."); 283881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string namePointer = nameIsPointer ? name : ("&" + name); 284881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 285549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "_hidl_err = "; 286881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 287881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (isReader) { 288881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "const_cast<" 289881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << typeName 290881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << " *>(" 291881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << namePointer 292881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ")->readEmbeddedFromParcel(\n"; 293881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } else { 294881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << nameDeref 295881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << "writeEmbeddedToParcel(\n"; 296881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 297881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 298881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.indent(); 299881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.indent(); 300881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 301881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << (isReader ? parcelObjDeref : parcelObjPointer) 302881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 303881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << parentName 304881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 305881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << offsetText; 306881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 307881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (!childName.empty()) { 308881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ", &" 309881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << childName; 310881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 311881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 312881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ");\n\n"; 313881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 314881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 315881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 316881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 317881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber handleError(out, mode); 318881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 319881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 320881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDeclarations(Formatter &) const { 321881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 322881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 323881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 324881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDefinitions( 325881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, const std::string) const { 326881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 327881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 328881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 32985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstatus_t Type::emitJavaTypeDeclarations(Formatter &, bool) const { 3302831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return OK; 3312831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 3322831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 333881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::needsEmbeddedReadWrite() const { 334881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 335881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 336881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 337bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongbool Type::needsResolveReferences() const { 338bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong return false; 339bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 340bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 341881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::resultNeedsDeref() const { 342881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 343881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 344881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 345979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstd::string Type::getCppType(std::string *extra, 346979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland bool specifyNamespaces) const { 347979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland return getCppType(StorageMode_Stack, extra, specifyNamespaces); 348881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 349881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 350979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstd::string Type::getCppResultType(std::string *extra, 351979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland bool specifyNamespaces) const { 352979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland return getCppType(StorageMode_Result, extra, specifyNamespaces); 353881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 354881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 355979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstd::string Type::getCppArgumentType(std::string *extra, 356979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland bool specifyNamespaces) const { 357979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland return getCppType(StorageMode_Argument, extra, specifyNamespaces); 358881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 359881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 3602831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriterWithSuffix( 3612831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 3622831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 3632831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 3642831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader, 3652831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &suffix, 3662831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &extra) const { 3672831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << parcelObj 3682831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "." 3692831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << (isReader ? "read" : "write") 3702831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << suffix 3712831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "("; 3722831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 3732831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber if (isReader) { 3742831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << extra; 3752831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } else { 3762831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << (extra.empty() ? "" : (extra + ", ")); 3772831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << argName; 3782831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 3792831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 3802831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << ");\n"; 3812831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 3822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 3835158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t Type::emitVtsTypeDeclarations(Formatter &) const { 3845158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return OK; 3855158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 3865158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 387864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhangstatus_t Type::emitVtsAttributeType(Formatter &out) const { 3885158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return emitVtsTypeDeclarations(out); 3895158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 3905158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 39170a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huberbool Type::isJavaCompatible() const { 39270a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber return true; 39370a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber} 39470a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber 39585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::getAlignmentAndSize(size_t *, size_t *) const { 39685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber CHECK(!"Should not be here"); 39785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 39885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 399019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Hubervoid Type::appendToExportedTypesVector( 400019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber std::vector<const Type *> * /* exportedTypes */) const { 401019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber} 402019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber 403019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huberstatus_t Type::emitExportedHeader(Formatter & /* out */) const { 404019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber return OK; 405019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber} 406019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber 407bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong//////////////////////////////////////// 408bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 409bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan HongTemplatedType::TemplatedType() : mElementType(nullptr) { 410bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 411bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongvoid TemplatedType::setElementType(Type *elementType) { 412bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong CHECK(mElementType == nullptr); // can only be set once. 413bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong mElementType = elementType; 414bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 415bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 416c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 417c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 418