Interface.h revision 4078631353d6d34db21c890d1870e796eca6ea38
11aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber/*
21aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Copyright (C) 2016 The Android Open Source Project
31aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber *
41aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
51aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * you may not use this file except in compliance with the License.
61aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * You may obtain a copy of the License at
71aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber *
81aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
91aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber *
101aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Unless required by applicable law or agreed to in writing, software
111aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
121aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * See the License for the specific language governing permissions and
141aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * limitations under the License.
151aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber */
161aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber
17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef INTERFACE_H_
18c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
19c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define INTERFACE_H_
20c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
215158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang#include "Method.h"
22c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "Scope.h"
23c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
24ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhang#include <utils/KeyedVector.h>
25881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <vector>
26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
27c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android {
28c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
29ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhangstruct Annotation;
30c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Method;
31c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
32c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Interface : public Scope {
33ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhang    Interface(
349ed827c8cd6e8eddb1ad9987ab9413c1de8a27dfAndreas Huber            const char *localName,
35ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhang            Interface *super,
365158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang            AnnotationVector *annotations);
37c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
38c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    void addMethod(Method *method);
39c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
40a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber    bool isInterface() const override;
41295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber    bool isBinder() const override;
42c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
436cb08cf9f021a01d9d2b1eaec6729aac6ae70708Andreas Huber    const Interface *superType() const;
44c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
45881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    const std::vector<Method *> &methods() const;
46881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
475158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    const AnnotationVector &annotations() const;
48ba7e6e9d5d30a9d9a39daeb42d2ca2cd06234640Zhuoyao Zhang
494078631353d6d34db21c890d1870e796eca6ea38Steven Moreland    std::string getBaseName() const;
504078631353d6d34db21c890d1870e796eca6ea38Steven Moreland
51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    std::string getCppType(StorageMode mode, std::string *extra) const override;
52881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
532831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    std::string getJavaType() const override;
542831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void emitReaderWriter(
56881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
57881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
58881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
60881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
61881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode) const override;
62881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
632831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    void emitJavaReaderWriter(
642831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            Formatter &out,
652831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &parcelObj,
662831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &argName,
672831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            bool isReader) const override;
682831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
69864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang    status_t emitVtsAttributeType(Formatter &out) const override;
70864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang
71864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang    status_t emitVtsAttributeDeclaration(Formatter &out) const;
72864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang    status_t emitVtsMethodDeclaration(Formatter &out) const;
735158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang
7470a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber    bool isJavaCompatible() const override;
7570a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber
76c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate:
776cb08cf9f021a01d9d2b1eaec6729aac6ae70708Andreas Huber    Interface *mSuperType;
78881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    std::vector<Method *> mMethods;
795158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    AnnotationVector *mAnnotationsByName;
80ea081b35840e687dfe7a5c11d4a546f2bf2db99eAndreas Huber    mutable bool mIsJavaCompatibleInProgress;
81c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
82c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    DISALLOW_COPY_AND_ASSIGN(Interface);
83c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber};
84c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
85c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}  // namespace android
86c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
87c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif  // INTERFACE_H_
88c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
89