Type.cpp revision 70a59e1dc3dcf32f791d2dd7966111d4adf32eca
1c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "Type.h" 2c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 3881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include "Formatter.h" 48d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber#include "ScalarType.h" 5881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 6881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <android-base/logging.h> 7881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 8c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 9c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 10c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas HuberType::Type() {} 11c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas HuberType::~Type() {} 12c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 135345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huberbool Type::isScope() const { 145345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber return false; 155345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber} 165345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber 17a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huberbool Type::isInterface() const { 18a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber return false; 19a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber} 20a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber 218d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isEnum() const { 228d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 238d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 248d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 258d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isTypeDef() const { 268d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 278d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 288d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 29737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberconst ScalarType *Type::resolveToScalarType() const { 30737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber return NULL; 31737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber} 32737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 338d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isValidEnumStorageType() const { 348d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber const ScalarType *scalarType = resolveToScalarType(); 358d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 368d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber if (scalarType == NULL) { 378d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 388d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber } 398d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 408d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return scalarType->isValidEnumStorageType(); 418d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 428d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 43881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppType(StorageMode, std::string *) const { 44881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 45881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return std::string(); 46881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 47881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstd::string Type::getJavaSuffix() const { 492831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber CHECK(!"Should not be here"); 502831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return std::string(); 512831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 522831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 53881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriter( 54881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 56881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 57881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 58881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode) const { 60881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 61881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 62881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 63881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbedded( 64881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 65881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 67881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 70881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode, 71881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 72881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &) const { 73881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 74881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 75881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 762831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriter( 772831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 782831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 792831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 802831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader) const { 812831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber emitJavaReaderWriterWithSuffix( 822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out, 832831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber parcelObj, 842831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber argName, 852831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber isReader, 862831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber getJavaSuffix(), 872831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber "" /* extra */); 882831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 892831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 90881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError(Formatter &out, ErrorMode mode) const { 91881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber switch (mode) { 92881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Ignore: 93881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 94549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "/* _hidl_err ignored! */\n\n"; 95881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 96881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 97881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 98881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Goto: 99881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 100549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { goto _hidl_error; }\n\n"; 101881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 102881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 103881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 104881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Break: 105881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 106549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { break; }\n\n"; 107881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 108881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 109737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 110737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber case ErrorMode_Return: 111737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber { 112549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { return _hidl_err; }\n\n"; 113737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber break; 114737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber } 115881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 116881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 117881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 118881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError2(Formatter &out, ErrorMode mode) const { 119881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber switch (mode) { 120881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Goto: 121881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 122549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "goto _hidl_error;\n"; 123881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 124881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 125737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 126881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Break: 127881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 128881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "break;\n"; 129881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 130881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 131737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 132881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Ignore: 133881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 134549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "/* ignoring _hidl_error! */"; 135881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 136881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 137737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 138737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber case ErrorMode_Return: 139737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber { 140549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "return _hidl_err;\n"; 141737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber break; 142737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber } 143881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 144881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 145881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 146881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbeddedForTypeName( 147881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 148881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 149881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 150881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 151881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 152881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 153881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 154881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 155881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 156881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 157881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &childName) const { 158881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string parcelObjDeref = 159881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? ("*" + parcelObj) : parcelObj; 160881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 161881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string parcelObjPointer = 162881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? parcelObj : ("&" + parcelObj); 163881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 164881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string nameDeref = name + (nameIsPointer ? "->" : "."); 165881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string namePointer = nameIsPointer ? name : ("&" + name); 166881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 167549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "_hidl_err = "; 168881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 169881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (isReader) { 170881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "const_cast<" 171881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << typeName 172881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << " *>(" 173881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << namePointer 174881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ")->readEmbeddedFromParcel(\n"; 175881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } else { 176881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << nameDeref 177881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << "writeEmbeddedToParcel(\n"; 178881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 179881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 180881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.indent(); 181881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.indent(); 182881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 183881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << (isReader ? parcelObjDeref : parcelObjPointer) 184881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 185881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << parentName 186881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 187881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << offsetText; 188881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 189881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (!childName.empty()) { 190881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ", &" 191881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << childName; 192881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 193881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 194881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ");\n\n"; 195881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 196881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 197881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 198881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 199881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber handleError(out, mode); 200881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 201881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 202881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDeclarations(Formatter &) const { 203881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 204881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 205881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 206881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDefinitions( 207881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, const std::string) const { 208881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 209881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 210881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 2112831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstatus_t Type::emitJavaTypeDeclarations(Formatter &) const { 2122831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return OK; 2132831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 2142831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 215881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::needsEmbeddedReadWrite() const { 216881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 217881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 218881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 219881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::resultNeedsDeref() const { 220881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 221881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 222881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 223881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppType(std::string *extra) const { 224881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return getCppType(StorageMode_Stack, extra); 225881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 226881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 227881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppResultType(std::string *extra) const { 228881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return getCppType(StorageMode_Result, extra); 229881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 230881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 231881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppArgumentType(std::string *extra) const { 232881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return getCppType(StorageMode_Argument, extra); 233881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 234881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 2352831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriterWithSuffix( 2362831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 2372831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 2382831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 2392831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader, 2402831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &suffix, 2412831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &extra) const { 2422831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << parcelObj 2432831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "." 2442831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << (isReader ? "read" : "write") 2452831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << suffix 2462831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "("; 2472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 2482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber if (isReader) { 2492831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << extra; 2502831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } else { 2512831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << (extra.empty() ? "" : (extra + ", ")); 2522831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << argName; 2532831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 2542831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 2552831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << ");\n"; 2562831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 2572831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 2585158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t Type::emitVtsTypeDeclarations(Formatter &) const { 2595158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return OK; 2605158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 2615158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 2625158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t Type::emitVtsArgumentType(Formatter &out) const { 2635158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return emitVtsTypeDeclarations(out); 2645158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 2655158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 26670a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huberbool Type::isJavaCompatible() const { 26770a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber return true; 26870a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber} 26970a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber 270c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 271c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 272