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