Type.cpp revision 85eabdbe56720dcdcf130e5ca83129d47b143768
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
3339fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huberbool Type::isNamedType() const {
3439fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber    return false;
3539fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber}
3639fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber
37737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberconst ScalarType *Type::resolveToScalarType() const {
38737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber    return NULL;
39737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber}
40737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
418d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isValidEnumStorageType() const {
428d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    const ScalarType *scalarType = resolveToScalarType();
438d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber
448d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    if (scalarType == NULL) {
458d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber        return false;
468d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    }
478d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber
488d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber    return scalarType->isValidEnumStorageType();
498d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber}
508d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber
51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppType(StorageMode, std::string *) const {
52881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    CHECK(!"Should not be here");
53881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return std::string();
54881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
5685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstd::string Type::getJavaWrapperType() const {
5785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    return getJavaType();
5885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber}
5985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
602831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstd::string Type::getJavaSuffix() const {
612831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    CHECK(!"Should not be here");
622831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    return std::string();
632831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber}
642831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
65881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriter(
66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        Formatter &,
67881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
70881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
71881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        ErrorMode) const {
72881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    CHECK(!"Should not be here");
73881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
74881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
75881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbedded(
76881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        Formatter &,
77881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
78881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
79881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
80881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
81881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool,
82881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        ErrorMode,
83881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &,
84881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &) const {
85881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    CHECK(!"Should not be here");
86881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
87881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
882831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriter(
892831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        Formatter &out,
902831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &parcelObj,
912831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &argName,
922831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        bool isReader) const {
932831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    emitJavaReaderWriterWithSuffix(
942831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            out,
952831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            parcelObj,
962831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            argName,
972831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            isReader,
982831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            getJavaSuffix(),
992831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            "" /* extra */);
1002831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber}
1012831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
10285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldInitializer(
10385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        Formatter &out,
10485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        const std::string &fieldName) const {
10585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    out << getJavaType()
10685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        << " "
10785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        << fieldName
10885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        << ";\n";
10985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber}
11085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
11185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldReaderWriter(
11285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        Formatter &,
11385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        const std::string &,
11485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        const std::string &,
11585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        const std::string &,
11685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber        bool) const {
11785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    CHECK(!"Should not be here");
11885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber}
11985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
120881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError(Formatter &out, ErrorMode mode) const {
121881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    switch (mode) {
122881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Ignore:
123881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
124549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "/* _hidl_err ignored! */\n\n";
125881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
126881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
127881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
128881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Goto:
129881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
130549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "if (_hidl_err != ::android::OK) { goto _hidl_error; }\n\n";
131881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
132881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
133881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
134881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Break:
135881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
136549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "if (_hidl_err != ::android::OK) { break; }\n\n";
137881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
138881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
139737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
140737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        case ErrorMode_Return:
141737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        {
142549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "if (_hidl_err != ::android::OK) { return _hidl_err; }\n\n";
143737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber            break;
144737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        }
145881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    }
146881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
147881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
148881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError2(Formatter &out, ErrorMode mode) const {
149881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    switch (mode) {
150881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Goto:
151881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
152549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "goto _hidl_error;\n";
153881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
154881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
155737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
156881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Break:
157881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
158881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            out << "break;\n";
159881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
160881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
161737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
162881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        case ErrorMode_Ignore:
163881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        {
164549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "/* ignoring _hidl_error! */";
165881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            break;
166881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        }
167737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber
168737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        case ErrorMode_Return:
169737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        {
170549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev            out << "return _hidl_err;\n";
171737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber            break;
172737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber        }
173881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    }
174881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
175881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
176881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbeddedForTypeName(
177881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        Formatter &out,
178881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &name,
179881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool nameIsPointer,
180881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &parcelObj,
181881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool parcelObjIsPointer,
182881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        bool isReader,
183881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        ErrorMode mode,
184881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &parentName,
185881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &offsetText,
186881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &typeName,
187881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        const std::string &childName) const {
188881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::string parcelObjDeref =
189881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        parcelObjIsPointer ? ("*" + parcelObj) : parcelObj;
190881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
191881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::string parcelObjPointer =
192881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        parcelObjIsPointer ? parcelObj : ("&" + parcelObj);
193881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
194881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::string nameDeref = name + (nameIsPointer ? "->" : ".");
195881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::string namePointer = nameIsPointer ? name : ("&" + name);
196881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
197549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev    out << "_hidl_err = ";
198881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
199881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    if (isReader) {
200881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        out << "const_cast<"
201881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << typeName
202881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << " *>("
203881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << namePointer
204881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << ")->readEmbeddedFromParcel(\n";
205881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    } else {
206881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        out << nameDeref
207881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << "writeEmbeddedToParcel(\n";
208881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    }
209881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
210881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out.indent();
211881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out.indent();
212881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
213881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out << (isReader ? parcelObjDeref : parcelObjPointer)
214881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        << ",\n"
215881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        << parentName
216881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        << ",\n"
217881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        << offsetText;
218881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
219881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    if (!childName.empty()) {
220881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        out << ", &"
221881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            << childName;
222881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    }
223881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
224881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out << ");\n\n";
225881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
226881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out.unindent();
227881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    out.unindent();
228881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
229881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    handleError(out, mode);
230881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
231881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
232881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDeclarations(Formatter &) const {
233881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return OK;
234881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
235881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
236881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDefinitions(
237881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber        Formatter &, const std::string) const {
238881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return OK;
239881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
240881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
24185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstatus_t Type::emitJavaTypeDeclarations(Formatter &, bool) const {
2422831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    return OK;
2432831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber}
2442831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
245881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::needsEmbeddedReadWrite() const {
246881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return false;
247881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
248881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
249881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::resultNeedsDeref() const {
250881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return false;
251881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
252881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
253881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppType(std::string *extra) const {
254881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return getCppType(StorageMode_Stack, extra);
255881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
256881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
257881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppResultType(std::string *extra) const {
258881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return getCppType(StorageMode_Result, extra);
259881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
260881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
261881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppArgumentType(std::string *extra) const {
262881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    return getCppType(StorageMode_Argument, extra);
263881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber}
264881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
2652831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriterWithSuffix(
2662831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        Formatter &out,
2672831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &parcelObj,
2682831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &argName,
2692831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        bool isReader,
2702831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &suffix,
2712831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        const std::string &extra) const {
2722831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    out << parcelObj
2732831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        << "."
2742831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        << (isReader ? "read" : "write")
2752831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        << suffix
2762831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        << "(";
2772831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
2782831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    if (isReader) {
2792831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        out << extra;
2802831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    } else {
2812831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        out << (extra.empty() ? "" : (extra + ", "));
2822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber        out << argName;
2832831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    }
2842831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
2852831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    out << ");\n";
2862831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber}
2872831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
2885158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t Type::emitVtsTypeDeclarations(Formatter &) const {
2895158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    return OK;
2905158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang}
2915158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang
292864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhangstatus_t Type::emitVtsAttributeType(Formatter &out) const {
2935158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    return emitVtsTypeDeclarations(out);
2945158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang}
2955158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang
29670a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huberbool Type::isJavaCompatible() const {
29770a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber    return true;
29870a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber}
29970a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber
30085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::getAlignmentAndSize(size_t *, size_t *) const {
30185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    CHECK(!"Should not be here");
30285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber}
30385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
304c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}  // namespace android
305c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
306