Type.h revision 864c771ca4ec8a01e31c7c243625b7a5f6316768
1c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef TYPE_H_ 2c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 3c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define TYPE_H_ 4c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 5c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include <android-base/macros.h> 6881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <string> 7881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <utils/Errors.h> 8c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 9c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 10c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 11c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Formatter; 12737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberstruct ScalarType; 13c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 14c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Type { 15c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber Type(); 16c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber virtual ~Type(); 17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 18fd4afabde8fb9bbdd0021addeb9fbb62428f2c17Andreas Huber Type *ref() { return this; } 19fd4afabde8fb9bbdd0021addeb9fbb62428f2c17Andreas Huber 205345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber virtual bool isScope() const; 21a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber virtual bool isInterface() const; 228d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber virtual bool isEnum() const; 238d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber virtual bool isTypeDef() const; 24295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber virtual bool isBinder() const; 2539fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber virtual bool isNamedType() const; 268d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 27737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber virtual const ScalarType *resolveToScalarType() const; 28c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 298d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber bool isValidEnumStorageType() const; 308d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 31881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum StorageMode { 32881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Stack, 33881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Argument, 34881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Result 35881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 36881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual std::string getCppType( 37881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode mode, std::string *extra) const; 38881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 39881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber // Convenience, gets StorageMode_Stack type. 40881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string getCppType(std::string *extra) const; 41881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 42881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string getCppResultType(std::string *extra) const; 43881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string getCppArgumentType(std::string *extra) const; 44881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 452831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual std::string getJavaType() const = 0; 462831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual std::string getJavaSuffix() const; 472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 48881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum ErrorMode { 49881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Ignore, 50881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Goto, 51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Break, 52737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber ErrorMode_Return, 53881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 54881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriter( 55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 56881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 57881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 58881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 60881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode) const; 61881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 62881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriterEmbedded( 63881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 64881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 65881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 67881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 70881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 71881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText) const; 72881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 732831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual void emitJavaReaderWriter( 742831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 752831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 762831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 772831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader) const; 782831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 79881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual status_t emitTypeDeclarations(Formatter &out) const; 80881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 81881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual status_t emitTypeDefinitions( 82881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, const std::string prefix) const; 83881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 842831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual status_t emitJavaTypeDeclarations(Formatter &out) const; 852831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 86881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool needsEmbeddedReadWrite() const; 87881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool resultNeedsDeref() const; 88881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 895158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang // Generates type declaration for vts proto file. 905158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang // TODO (b/30844146): make it a pure virtual method. 915158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang virtual status_t emitVtsTypeDeclarations(Formatter &out) const; 92864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang // Generates type declaration as attribute of method (return value or method 93864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang // argument) or attribute of compound type for vts proto file. 94864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang virtual status_t emitVtsAttributeType(Formatter &out) const; 955158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 9670a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber // Returns true iff this type is supported through the Java backend. 9770a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber virtual bool isJavaCompatible() const; 9870a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber 99881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberprotected: 100881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void handleError(Formatter &out, ErrorMode mode) const; 101881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void handleError2(Formatter &out, ErrorMode mode) const; 102881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 103881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void emitReaderWriterEmbeddedForTypeName( 104881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 105881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 106881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 107881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 108881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 109881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 110881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 111881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 112881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 113881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 114881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &childName) const; 115881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 1162831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber void emitJavaReaderWriterWithSuffix( 1172831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 1182831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 1192831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 1202831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader, 1212831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &suffix, 1222831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &extra) const; 1232831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 124c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate: 125c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber DISALLOW_COPY_AND_ASSIGN(Type); 126c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}; 127c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 128c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 129c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 130c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif // TYPE_H_ 131c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 132