Interface.h revision 70a59e1dc3dcf32f791d2dd7966111d4adf32eca
1c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef INTERFACE_H_
2c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
3c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define INTERFACE_H_
4c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
55158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang#include "Method.h"
6c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "Scope.h"
7c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
8ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhang#include <utils/KeyedVector.h>
9881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <vector>
10c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
11c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android {
12c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
13ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhangstruct Annotation;
14c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Method;
15c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
16c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Interface : public Scope {
17ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhang    Interface(
18ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhang            Interface *super,
195158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang            AnnotationVector *annotations);
20c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
21c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    void addMethod(Method *method);
22c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
23a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber    bool isInterface() const override;
24c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
256cb08cf9f021a01d9d2b1eaec6729aac6ae70708Andreas Huber    const Interface *superType() const;
26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
27881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::vector<Method *> &methods() const;
28881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
295158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    const AnnotationVector &annotations() const;
30ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhang
31881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    std::string getCppType(StorageMode mode, std::string *extra) const override;
32881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
332831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    std::string getJavaType() const override;
342831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
35881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void emitReaderWriter(
36881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
37881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
38881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
39881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
40881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
41881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode) const override;
42881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
432831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    void emitJavaReaderWriter(
442831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            Formatter &out,
452831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &parcelObj,
462831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &argName,
472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            bool isReader) const override;
482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
495158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    status_t emitVtsArgumentType(Formatter &out) const override;
505158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang
5170a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber    bool isJavaCompatible() const override;
5270a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber
53c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate:
546cb08cf9f021a01d9d2b1eaec6729aac6ae70708Andreas Huber    Interface *mSuperType;
55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    std::vector<Method *> mMethods;
565158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    AnnotationVector *mAnnotationsByName;
57c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
58c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    DISALLOW_COPY_AND_ASSIGN(Interface);
59c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber};
60c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
61c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}  // namespace android
62c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
63c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif  // INTERFACE_H_
64c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
65