blob: 84ffc03eddab4ad05b25cd4071f31fdf686dab4e [file] [log] [blame]
Andreas Huberc9410c72016-07-28 12:18:40 -07001#ifndef METHOD_H_
2
3#define METHOD_H_
4
5#include <android-base/macros.h>
6#include <string>
Andreas Huber3599d922016-08-09 10:42:57 -07007#include <utils/KeyedVector.h>
Andreas Huber881227d2016-08-02 14:20:21 -07008#include <vector>
Andreas Huberc9410c72016-07-28 12:18:40 -07009
10namespace android {
11
Andreas Huber3599d922016-08-09 10:42:57 -070012struct Annotation;
Andreas Huberc9410c72016-07-28 12:18:40 -070013struct Formatter;
Iliyan Malchev40d474a2016-08-16 06:20:17 -070014struct ScalarType;
Andreas Huberc9410c72016-07-28 12:18:40 -070015struct Type;
Andreas Huber31629bc2016-08-03 09:06:40 -070016struct TypedVar;
Andreas Huberc9410c72016-07-28 12:18:40 -070017
Zhuoyao Zhang5158db42016-08-10 10:25:20 -070018using AnnotationVector =
19 DefaultKeyedVector<std::string, Annotation *>;
20
Andreas Huberc9410c72016-07-28 12:18:40 -070021struct Method {
22 Method(const char *name,
Andreas Huber881227d2016-08-02 14:20:21 -070023 std::vector<TypedVar *> *args,
Andreas Huber3599d922016-08-09 10:42:57 -070024 std::vector<TypedVar *> *results,
Iliyan Malchev639bff82016-08-13 14:24:11 -070025 bool oneway,
Zhuoyao Zhang5158db42016-08-10 10:25:20 -070026 AnnotationVector *annotations);
Andreas Huberc9410c72016-07-28 12:18:40 -070027
Andreas Huber881227d2016-08-02 14:20:21 -070028 std::string name() const;
29 const std::vector<TypedVar *> &args() const;
30 const std::vector<TypedVar *> &results() const;
Iliyan Malchev639bff82016-08-13 14:24:11 -070031 bool isOneway() const { return mOneway; }
Zhuoyao Zhang5158db42016-08-10 10:25:20 -070032 const AnnotationVector &annotations() const;
Andreas Huber881227d2016-08-02 14:20:21 -070033
34 static std::string GetSignature(const std::vector<TypedVar *> &args);
Andreas Huber2831d512016-08-15 09:33:47 -070035 static std::string GetJavaSignature(const std::vector<TypedVar *> &args);
Andreas Huber881227d2016-08-02 14:20:21 -070036
Iliyan Malchev40d474a2016-08-16 06:20:17 -070037 const TypedVar* canElideCallback() const;
38
Andreas Huber3599d922016-08-09 10:42:57 -070039 void dumpAnnotations(Formatter &out) const;
40
Andreas Huber70a59e12016-08-16 12:57:01 -070041 bool isJavaCompatible() const;
42
Andreas Huberc9410c72016-07-28 12:18:40 -070043private:
44 std::string mName;
Andreas Huber881227d2016-08-02 14:20:21 -070045 std::vector<TypedVar *> *mArgs;
46 std::vector<TypedVar *> *mResults;
Iliyan Malchev639bff82016-08-13 14:24:11 -070047 bool mOneway;
Zhuoyao Zhang5158db42016-08-10 10:25:20 -070048 AnnotationVector *mAnnotationsByName;
Andreas Huberc9410c72016-07-28 12:18:40 -070049
50 DISALLOW_COPY_AND_ASSIGN(Method);
51};
52
Andreas Huber31629bc2016-08-03 09:06:40 -070053struct TypedVar {
54 TypedVar(const char *name, Type *type);
55
56 std::string name() const;
57 const Type &type() const;
58
Andreas Huber70a59e12016-08-16 12:57:01 -070059 bool isJavaCompatible() const;
60
Andreas Huber31629bc2016-08-03 09:06:40 -070061private:
62 std::string mName;
63 Type *mType;
64
65 DISALLOW_COPY_AND_ASSIGN(TypedVar);
66};
67
Andreas Huberc9410c72016-07-28 12:18:40 -070068} // namespace android
69
70#endif // METHOD_H_
71