Type.cpp revision 295ad30bf6212c16accc5095601b2a71d44b4c8b
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
29295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huberbool Type::isBinder() const {
30295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber    return false;
31295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber}
32295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber
33737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberconst ScalarType *Type::resolveToScalarType() const {
34737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber    return NULL;
35737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber}
36737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
378d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isValidEnumStorageType() const {
388d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    const ScalarType *scalarType = resolveToScalarType();
398d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber
408d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    if (scalarType == NULL) {
418d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber        return false;
428d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    }
438d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber
448d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    return scalarType->isValidEnumStorageType();
458d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber}
468d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber
47881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppType(StorageMode, std::string *) const {
48881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    CHECK(!"Should not be here");
49881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return std::string();
50881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
522831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstd::string Type::getJavaSuffix() const {
532831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    CHECK(!"Should not be here");
542831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    return std::string();
552831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber}
562831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
57881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriter(
58881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        Formatter &,
59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
60881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
61881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
62881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
63881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        ErrorMode) const {
64881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    CHECK(!"Should not be here");
65881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
67881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbedded(
68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        Formatter &,
69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
70881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
71881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
72881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
73881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
74881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        ErrorMode,
75881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
76881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &) const {
77881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    CHECK(!"Should not be here");
78881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
79881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
802831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriter(
812831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        Formatter &out,
822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &parcelObj,
832831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &argName,
842831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        bool isReader) const {
852831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    emitJavaReaderWriterWithSuffix(
862831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            out,
872831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            parcelObj,
882831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            argName,
892831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            isReader,
902831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            getJavaSuffix(),
912831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            "" /* extra */);
922831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber}
932831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
94881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError(Formatter &out, ErrorMode mode) const {
95881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    switch (mode) {
96881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Ignore:
97881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
98549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "/* _hidl_err ignored! */\n\n";
99881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
100881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
101881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
102881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Goto:
103881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
104549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "if (_hidl_err != ::android::OK) { goto _hidl_error; }\n\n";
105881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
106881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
107881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
108881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Break:
109881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
110549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "if (_hidl_err != ::android::OK) { break; }\n\n";
111881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
112881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
113737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
114737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        case ErrorMode_Return:
115737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        {
116549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "if (_hidl_err != ::android::OK) { return _hidl_err; }\n\n";
117737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber            break;
118737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        }
119881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    }
120881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
121881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
122881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError2(Formatter &out, ErrorMode mode) const {
123881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    switch (mode) {
124881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Goto:
125881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
126549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "goto _hidl_error;\n";
127881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
128881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
129737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
130881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Break:
131881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
132881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            out << "break;\n";
133881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
134881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
135737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
136881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Ignore:
137881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
138549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "/* ignoring _hidl_error! */";
139881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
140881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
141737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
142737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        case ErrorMode_Return:
143737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        {
144549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "return _hidl_err;\n";
145737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber            break;
146737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        }
147881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    }
148881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
149881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
150881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbeddedForTypeName(
151881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        Formatter &out,
152881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &name,
153881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool nameIsPointer,
154881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &parcelObj,
155881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool parcelObjIsPointer,
156881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool isReader,
157881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        ErrorMode mode,
158881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &parentName,
159881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &offsetText,
160881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &typeName,
161881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &childName) const {
162881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::string parcelObjDeref =
163881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        parcelObjIsPointer ? ("*" + parcelObj) : parcelObj;
164881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
165881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::string parcelObjPointer =
166881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        parcelObjIsPointer ? parcelObj : ("&" + parcelObj);
167881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
168881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::string nameDeref = name + (nameIsPointer ? "->" : ".");
169881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::string namePointer = nameIsPointer ? name : ("&" + name);
170881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
171549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev    out << "_hidl_err = ";
172881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
173881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    if (isReader) {
174881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        out << "const_cast<"
175881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << typeName
176881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << " *>("
177881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << namePointer
178881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << ")->readEmbeddedFromParcel(\n";
179881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    } else {
180881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        out << nameDeref
181881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << "writeEmbeddedToParcel(\n";
182881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    }
183881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
184881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out.indent();
185881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out.indent();
186881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
187881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out << (isReader ? parcelObjDeref : parcelObjPointer)
188881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        << ",\n"
189881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        << parentName
190881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        << ",\n"
191881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        << offsetText;
192881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
193881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    if (!childName.empty()) {
194881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        out << ", &"
195881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << childName;
196881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    }
197881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
198881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out << ");\n\n";
199881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
200881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out.unindent();
201881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out.unindent();
202881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
203881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    handleError(out, mode);
204881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
205881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
206881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDeclarations(Formatter &) const {
207881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return OK;
208881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
209881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
210881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDefinitions(
211881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        Formatter &, const std::string) const {
212881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return OK;
213881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
214881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
2152831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstatus_t Type::emitJavaTypeDeclarations(Formatter &) const {
2162831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    return OK;
2172831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber}
2182831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
219881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::needsEmbeddedReadWrite() const {
220881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return false;
221881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
222881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
223881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::resultNeedsDeref() const {
224881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return false;
225881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
226881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
227881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppType(std::string *extra) const {
228881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return getCppType(StorageMode_Stack, extra);
229881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
230881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
231881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppResultType(std::string *extra) const {
232881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return getCppType(StorageMode_Result, extra);
233881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
234881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
235881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppArgumentType(std::string *extra) const {
236881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return getCppType(StorageMode_Argument, extra);
237881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
238881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
2392831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriterWithSuffix(
2402831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        Formatter &out,
2412831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &parcelObj,
2422831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &argName,
2432831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        bool isReader,
2442831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &suffix,
2452831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &extra) const {
2462831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    out << parcelObj
2472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        << "."
2482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        << (isReader ? "read" : "write")
2492831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        << suffix
2502831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        << "(";
2512831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
2522831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    if (isReader) {
2532831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        out << extra;
2542831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    } else {
2552831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        out << (extra.empty() ? "" : (extra + ", "));
2562831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        out << argName;
2572831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    }
2582831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
2592831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    out << ");\n";
2602831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber}
2612831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
2625158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t Type::emitVtsTypeDeclarations(Formatter &) const {
2635158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    return OK;
2645158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang}
2655158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang
2665158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t Type::emitVtsArgumentType(Formatter &out) const {
2675158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    return emitVtsTypeDeclarations(out);
2685158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang}
2695158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang
27070a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huberbool Type::isJavaCompatible() const {
27170a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber    return true;
27270a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber}
27370a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber
274c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}  // namespace android
275c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
276