am bad130ee: am 02bc5488: Merge "Remove RPC interface Type"

* commit 'bad130eed378891b82250d90aaf207088b4362e2':
  Remove RPC interface Type
This commit is contained in:
Casey Dahlin
2015-09-02 21:29:59 +00:00
committed by Android Git Automerger
10 changed files with 66 additions and 1454 deletions

View File

@@ -31,7 +31,6 @@ LOCAL_SRC_FILES := \
aidl_language_y.y \ aidl_language_y.y \
generate_java.cpp \ generate_java.cpp \
generate_java_binder.cpp \ generate_java_binder.cpp \
generate_java_rpc.cpp \
options.cpp \ options.cpp \
search_path.cpp \ search_path.cpp \

View File

@@ -28,9 +28,6 @@ Type* CONTEXT_TYPE;
Type* MAP_TYPE; Type* MAP_TYPE;
Type* LIST_TYPE; Type* LIST_TYPE;
Type* CLASSLOADER_TYPE; Type* CLASSLOADER_TYPE;
Type* RPC_DATA_TYPE;
Type* RPC_ERROR_TYPE;
Type* EVENT_FAKE_TYPE;
Expression* NULL_VALUE; Expression* NULL_VALUE;
Expression* THIS_VALUE; Expression* THIS_VALUE;
@@ -42,7 +39,6 @@ void
register_base_types() register_base_types()
{ {
VOID_TYPE = new BasicType("void", VOID_TYPE = new BasicType("void",
"XXX", "XXX", "XXX", "XXX", "XXX",
"XXX", "XXX", "XXX", "XXX", "XXX"); "XXX", "XXX", "XXX", "XXX", "XXX");
NAMES.Add(VOID_TYPE); NAMES.Add(VOID_TYPE);
@@ -50,37 +46,37 @@ register_base_types()
NAMES.Add(BOOLEAN_TYPE); NAMES.Add(BOOLEAN_TYPE);
BYTE_TYPE = new BasicType("byte", BYTE_TYPE = new BasicType("byte",
"writeByte", "readByte", "writeByteArray", "createByteArray", "readByteArray", "writeByte", "readByte", "writeByteArray", "createByteArray",
"putByte", "getByte", "putByteArray", "createByteArray", "getByteArray"); "readByteArray");
NAMES.Add(BYTE_TYPE); NAMES.Add(BYTE_TYPE);
CHAR_TYPE = new CharType(); CHAR_TYPE = new CharType();
NAMES.Add(CHAR_TYPE); NAMES.Add(CHAR_TYPE);
INT_TYPE = new BasicType("int", INT_TYPE = new BasicType("int",
"writeInt", "readInt", "writeIntArray", "createIntArray", "readIntArray", "writeInt", "readInt", "writeIntArray", "createIntArray",
"putInteger", "getInteger", "putIntegerArray", "createIntegerArray", "getIntegerArray"); "readIntArray");
NAMES.Add(INT_TYPE); NAMES.Add(INT_TYPE);
LONG_TYPE = new BasicType("long", LONG_TYPE = new BasicType("long",
"writeLong", "readLong", "writeLongArray", "createLongArray", "readLongArray", "writeLong", "readLong", "writeLongArray", "createLongArray",
"putLong", "getLong", "putLongArray", "createLongArray", "getLongArray"); "readLongArray");
NAMES.Add(LONG_TYPE); NAMES.Add(LONG_TYPE);
FLOAT_TYPE = new BasicType("float", FLOAT_TYPE = new BasicType("float",
"writeFloat", "readFloat", "writeFloatArray", "createFloatArray", "readFloatArray", "writeFloat", "readFloat", "writeFloatArray", "createFloatArray",
"putFloat", "getFloat", "putFloatArray", "createFloatArray", "getFloatArray"); "readFloatArray");
NAMES.Add(FLOAT_TYPE); NAMES.Add(FLOAT_TYPE);
DOUBLE_TYPE = new BasicType("double", DOUBLE_TYPE = new BasicType("double",
"writeDouble", "readDouble", "writeDoubleArray", "createDoubleArray", "readDoubleArray", "writeDouble", "readDouble", "writeDoubleArray",
"putDouble", "getDouble", "putDoubleArray", "createDoubleArray", "getDoubleArray"); "createDoubleArray", "readDoubleArray");
NAMES.Add(DOUBLE_TYPE); NAMES.Add(DOUBLE_TYPE);
STRING_TYPE = new StringType(); STRING_TYPE = new StringType();
NAMES.Add(STRING_TYPE); NAMES.Add(STRING_TYPE);
OBJECT_TYPE = new Type("java.lang", "Object", Type::BUILT_IN, false, false, false); OBJECT_TYPE = new Type("java.lang", "Object", Type::BUILT_IN, false, false);
NAMES.Add(OBJECT_TYPE); NAMES.Add(OBJECT_TYPE);
CHAR_SEQUENCE_TYPE = new CharSequenceType(); CHAR_SEQUENCE_TYPE = new CharSequenceType();
@@ -92,7 +88,7 @@ register_base_types()
LIST_TYPE = new ListType(); LIST_TYPE = new ListType();
NAMES.Add(LIST_TYPE); NAMES.Add(LIST_TYPE);
TEXT_UTILS_TYPE = new Type("android.text", "TextUtils", Type::BUILT_IN, false, false, false); TEXT_UTILS_TYPE = new Type("android.text", "TextUtils", Type::BUILT_IN, false, false);
NAMES.Add(TEXT_UTILS_TYPE); NAMES.Add(TEXT_UTILS_TYPE);
REMOTE_EXCEPTION_TYPE = new RemoteExceptionType(); REMOTE_EXCEPTION_TYPE = new RemoteExceptionType();
@@ -119,19 +115,9 @@ register_base_types()
PARCELABLE_INTERFACE_TYPE = new ParcelableInterfaceType(); PARCELABLE_INTERFACE_TYPE = new ParcelableInterfaceType();
NAMES.Add(PARCELABLE_INTERFACE_TYPE); NAMES.Add(PARCELABLE_INTERFACE_TYPE);
CONTEXT_TYPE = new Type("android.content", "Context", Type::BUILT_IN, false, false, false); CONTEXT_TYPE = new Type("android.content", "Context", Type::BUILT_IN, false, false);
NAMES.Add(CONTEXT_TYPE); NAMES.Add(CONTEXT_TYPE);
RPC_DATA_TYPE = new RpcDataType();
NAMES.Add(RPC_DATA_TYPE);
RPC_ERROR_TYPE = new UserDataType("android.support.place.rpc", "RpcError",
true, __FILE__, __LINE__);
NAMES.Add(RPC_ERROR_TYPE);
EVENT_FAKE_TYPE = new Type("event", Type::BUILT_IN, false, false, false);
NAMES.Add(EVENT_FAKE_TYPE);
CLASSLOADER_TYPE = new ClassLoaderType(); CLASSLOADER_TYPE = new ClassLoaderType();
NAMES.Add(CLASSLOADER_TYPE); NAMES.Add(CLASSLOADER_TYPE);
@@ -158,30 +144,27 @@ make_generic_type(const string& package, const string& name,
// ================================================================ // ================================================================
Type::Type(const string& name, int kind, bool canWriteToParcel, bool canWriteToRpcData, Type::Type(const string& name, int kind, bool canWriteToParcel, bool canBeOut)
bool canBeOut)
:m_package(), :m_package(),
m_name(name), m_name(name),
m_declFile(""), m_declFile(""),
m_declLine(-1), m_declLine(-1),
m_kind(kind), m_kind(kind),
m_canWriteToParcel(canWriteToParcel), m_canWriteToParcel(canWriteToParcel),
m_canWriteToRpcData(canWriteToRpcData),
m_canBeOut(canBeOut) m_canBeOut(canBeOut)
{ {
m_qualifiedName = name; m_qualifiedName = name;
} }
Type::Type(const string& package, const string& name, Type::Type(const string& package, const string& name,
int kind, bool canWriteToParcel, bool canWriteToRpcData, int kind, bool canWriteToParcel, bool canBeOut,
bool canBeOut, const string& declFile, int declLine) const string& declFile, int declLine)
:m_package(package), :m_package(package),
m_name(name), m_name(name),
m_declFile(declFile), m_declFile(declFile),
m_declLine(declLine), m_declLine(declLine),
m_kind(kind), m_kind(kind),
m_canWriteToParcel(canWriteToParcel), m_canWriteToParcel(canWriteToParcel),
m_canWriteToRpcData(canWriteToRpcData),
m_canBeOut(canBeOut) m_canBeOut(canBeOut)
{ {
if (package.length() > 0) { if (package.length() > 0) {
@@ -213,12 +196,6 @@ Type::CreatorName() const
return ""; return "";
} }
string
Type::RpcCreatorName() const
{
return "";
}
string string
Type::InstantiableName() const Type::InstantiableName() const
{ {
@@ -281,26 +258,6 @@ Type::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel,
+ m_qualifiedName + " */")); + m_qualifiedName + " */"));
} }
void
Type::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags)
{
fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
__FILE__, __LINE__, m_qualifiedName.c_str());
addTo->Add(new LiteralExpression("/* WriteToRpcData error "
+ m_qualifiedName + " */"));
}
void
Type::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
Variable** cl)
{
fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
__FILE__, __LINE__, m_qualifiedName.c_str());
addTo->Add(new LiteralExpression("/* ReadFromRpcData error "
+ m_qualifiedName + " */"));
}
void void
Type::SetQualifiedName(const string& qualified) Type::SetQualifiedName(const string& qualified)
{ {
@@ -324,20 +281,13 @@ Type::BuildWriteToParcelFlags(int flags)
BasicType::BasicType(const string& name, const string& marshallParcel, BasicType::BasicType(const string& name, const string& marshallParcel,
const string& unmarshallParcel, const string& writeArrayParcel, const string& unmarshallParcel, const string& writeArrayParcel,
const string& createArrayParcel, const string& readArrayParcel, const string& createArrayParcel, const string& readArrayParcel)
const string& marshallRpc, const string& unmarshallRpc, :Type(name, BUILT_IN, true, false),
const string& writeArrayRpc, const string& createArrayRpc, const string& readArrayRpc)
:Type(name, BUILT_IN, true, true, false),
m_marshallParcel(marshallParcel), m_marshallParcel(marshallParcel),
m_unmarshallParcel(unmarshallParcel), m_unmarshallParcel(unmarshallParcel),
m_writeArrayParcel(writeArrayParcel), m_writeArrayParcel(writeArrayParcel),
m_createArrayParcel(createArrayParcel), m_createArrayParcel(createArrayParcel),
m_readArrayParcel(readArrayParcel), m_readArrayParcel(readArrayParcel)
m_marshallRpc(marshallRpc),
m_unmarshallRpc(unmarshallRpc),
m_writeArrayRpc(writeArrayRpc),
m_createArrayRpc(createArrayRpc),
m_readArrayRpc(readArrayRpc)
{ {
} }
@@ -378,24 +328,10 @@ BasicType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* par
addTo->Add(new MethodCall(parcel, m_readArrayParcel, 1, v)); addTo->Add(new MethodCall(parcel, m_readArrayParcel, 1, v));
} }
void
BasicType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags)
{
addTo->Add(new MethodCall(data, m_marshallRpc, 2, k, v));
}
void
BasicType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
Variable** cl)
{
addTo->Add(new Assignment(v, new MethodCall(data, m_unmarshallRpc, 1, k)));
}
// ================================================================ // ================================================================
BooleanType::BooleanType() BooleanType::BooleanType()
:Type("boolean", BUILT_IN, true, true, false) :Type("boolean", BUILT_IN, true, false)
{ {
} }
@@ -439,24 +375,10 @@ BooleanType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* p
addTo->Add(new MethodCall(parcel, "readBooleanArray", 1, v)); addTo->Add(new MethodCall(parcel, "readBooleanArray", 1, v));
} }
void
BooleanType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags)
{
addTo->Add(new MethodCall(data, "putBoolean", 2, k, v));
}
void
BooleanType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
Variable** cl)
{
addTo->Add(new Assignment(v, new MethodCall(data, "getBoolean", 1, k)));
}
// ================================================================ // ================================================================
CharType::CharType() CharType::CharType()
:Type("char", BUILT_IN, true, true, false) :Type("char", BUILT_IN, true, false)
{ {
} }
@@ -498,24 +420,10 @@ CharType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parc
addTo->Add(new MethodCall(parcel, "readCharArray", 1, v)); addTo->Add(new MethodCall(parcel, "readCharArray", 1, v));
} }
void
CharType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags)
{
addTo->Add(new MethodCall(data, "putChar", 2, k, v));
}
void
CharType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
Variable** cl)
{
addTo->Add(new Assignment(v, new MethodCall(data, "getChar", 1, k)));
}
// ================================================================ // ================================================================
StringType::StringType() StringType::StringType()
:Type("java.lang", "String", BUILT_IN, true, true, false) :Type("java.lang", "String", BUILT_IN, true, false)
{ {
} }
@@ -562,24 +470,10 @@ StringType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* pa
addTo->Add(new MethodCall(parcel, "readStringArray", 1, v)); addTo->Add(new MethodCall(parcel, "readStringArray", 1, v));
} }
void
StringType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags)
{
addTo->Add(new MethodCall(data, "putString", 2, k, v));
}
void
StringType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable**)
{
addTo->Add(new Assignment(v, new MethodCall(data, "getString", 1, k)));
}
// ================================================================ // ================================================================
CharSequenceType::CharSequenceType() CharSequenceType::CharSequenceType()
:Type("java.lang", "CharSequence", BUILT_IN, true, true, false) :Type("java.lang", "CharSequence", BUILT_IN, true, false)
{ {
} }
@@ -639,7 +533,7 @@ CharSequenceType::CreateFromParcel(StatementBlock* addTo, Variable* v,
// ================================================================ // ================================================================
RemoteExceptionType::RemoteExceptionType() RemoteExceptionType::RemoteExceptionType()
:Type("android.os", "RemoteException", BUILT_IN, false, false, false) :Type("android.os", "RemoteException", BUILT_IN, false, false)
{ {
} }
@@ -658,7 +552,7 @@ RemoteExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variab
// ================================================================ // ================================================================
RuntimeExceptionType::RuntimeExceptionType() RuntimeExceptionType::RuntimeExceptionType()
:Type("java.lang", "RuntimeException", BUILT_IN, false, false, false) :Type("java.lang", "RuntimeException", BUILT_IN, false, false)
{ {
} }
@@ -678,7 +572,7 @@ RuntimeExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Varia
// ================================================================ // ================================================================
IBinderType::IBinderType() IBinderType::IBinderType()
:Type("android.os", "IBinder", BUILT_IN, true, false, false) :Type("android.os", "IBinder", BUILT_IN, true, false)
{ {
} }
@@ -717,7 +611,7 @@ IBinderType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* p
// ================================================================ // ================================================================
IInterfaceType::IInterfaceType() IInterfaceType::IInterfaceType()
:Type("android.os", "IInterface", BUILT_IN, false, false, false) :Type("android.os", "IInterface", BUILT_IN, false, false)
{ {
} }
@@ -737,7 +631,7 @@ IInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* p
// ================================================================ // ================================================================
BinderType::BinderType() BinderType::BinderType()
:Type("android.os", "Binder", BUILT_IN, false, false, false) :Type("android.os", "Binder", BUILT_IN, false, false)
{ {
} }
@@ -758,7 +652,7 @@ BinderType::CreateFromParcel(StatementBlock* addTo, Variable* v,
// ================================================================ // ================================================================
BinderProxyType::BinderProxyType() BinderProxyType::BinderProxyType()
:Type("android.os", "BinderProxy", BUILT_IN, false, false, false) :Type("android.os", "BinderProxy", BUILT_IN, false, false)
{ {
} }
@@ -779,7 +673,7 @@ BinderProxyType::CreateFromParcel(StatementBlock* addTo, Variable* v,
// ================================================================ // ================================================================
ParcelType::ParcelType() ParcelType::ParcelType()
:Type("android.os", "Parcel", BUILT_IN, false, false, false) :Type("android.os", "Parcel", BUILT_IN, false, false)
{ {
} }
@@ -798,7 +692,7 @@ ParcelType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parce
// ================================================================ // ================================================================
ParcelableInterfaceType::ParcelableInterfaceType() ParcelableInterfaceType::ParcelableInterfaceType()
:Type("android.os", "Parcelable", BUILT_IN, false, false, false) :Type("android.os", "Parcelable", BUILT_IN, false, false)
{ {
} }
@@ -817,7 +711,7 @@ ParcelableInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Va
// ================================================================ // ================================================================
MapType::MapType() MapType::MapType()
:Type("java.util", "Map", BUILT_IN, true, false, true) :Type("java.util", "Map", BUILT_IN, true, true)
{ {
} }
@@ -857,7 +751,7 @@ MapType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Va
// ================================================================ // ================================================================
ListType::ListType() ListType::ListType()
:Type("java.util", "List", BUILT_IN, true, true, true) :Type("java.util", "List", BUILT_IN, true, true)
{ {
} }
@@ -888,26 +782,12 @@ ListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
addTo->Add(new MethodCall(parcel, "readList", 2, v, *cl)); addTo->Add(new MethodCall(parcel, "readList", 2, v, *cl));
} }
void
ListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags)
{
addTo->Add(new MethodCall(data, "putList", 2, k, v));
}
void
ListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
Variable** cl)
{
addTo->Add(new Assignment(v, new MethodCall(data, "getList", 1, k)));
}
// ================================================================ // ================================================================
UserDataType::UserDataType(const string& package, const string& name, UserDataType::UserDataType(const string& package, const string& name,
bool builtIn, bool canWriteToParcel, bool canWriteToRpcData, bool builtIn, bool canWriteToParcel,
const string& declFile, int declLine) const string& declFile, int declLine)
:Type(package, name, builtIn ? BUILT_IN : USERDATA, canWriteToParcel, canWriteToRpcData, :Type(package, name, builtIn ? BUILT_IN : USERDATA, canWriteToParcel,
true, declFile, declLine) true, declFile, declLine)
{ {
} }
@@ -918,12 +798,6 @@ UserDataType::CreatorName() const
return QualifiedName() + ".CREATOR"; return QualifiedName() + ".CREATOR";
} }
string
UserDataType::RpcCreatorName() const
{
return QualifiedName() + ".RPC_CREATOR";
}
void void
UserDataType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) UserDataType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
{ {
@@ -1014,29 +888,12 @@ UserDataType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable*
v, new LiteralExpression(creator))); v, new LiteralExpression(creator)));
} }
void
UserDataType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags)
{
// data.putFlattenable(k, v);
addTo->Add(new MethodCall(data, "putFlattenable", 2, k, v));
}
void
UserDataType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl)
{
// data.getFlattenable(k, CLASS.RPC_CREATOR);
addTo->Add(new Assignment(v, new MethodCall(data, "getFlattenable", 2, k,
new FieldVariable(v->type, "RPC_CREATOR"))));
}
// ================================================================ // ================================================================
InterfaceType::InterfaceType(const string& package, const string& name, InterfaceType::InterfaceType(const string& package, const string& name,
bool builtIn, bool oneway, bool builtIn, bool oneway,
const string& declFile, int declLine) const string& declFile, int declLine)
:Type(package, name, builtIn ? BUILT_IN : INTERFACE, true, false, false, :Type(package, name, builtIn ? BUILT_IN : INTERFACE, true, false,
declFile, declLine) declFile, declLine)
,m_oneway(oneway) ,m_oneway(oneway)
{ {
@@ -1075,7 +932,7 @@ InterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* pa
GenericType::GenericType(const string& package, const string& name, GenericType::GenericType(const string& package, const string& name,
const vector<Type*>& args) const vector<Type*>& args)
:Type(package, name, BUILT_IN, true, true, true) :Type(package, name, BUILT_IN, true, true)
{ {
m_args = args; m_args = args;
@@ -1200,65 +1057,11 @@ GenericListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
} }
} }
void
GenericListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags)
{
Type* generic = GenericArgumentTypes()[0];
if (generic == RPC_DATA_TYPE) {
addTo->Add(new MethodCall(data, "putRpcDataList", 2, k, v));
} else if (generic->RpcCreatorName() != "") {
addTo->Add(new MethodCall(data, "putFlattenableList", 2, k, v));
} else {
addTo->Add(new MethodCall(data, "putList", 2, k, v));
}
}
void
GenericListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl)
{
Type* generic = GenericArgumentTypes()[0];
if (generic == RPC_DATA_TYPE) {
addTo->Add(new Assignment(v, new MethodCall(data, "getRpcDataList", 2, k)));
} else if (generic->RpcCreatorName() != "") {
addTo->Add(new Assignment(v, new MethodCall(data, "getFlattenableList", 2, k,
new LiteralExpression(generic->RpcCreatorName()))));
} else {
string classArg = GenericArgumentTypes()[0]->QualifiedName();
classArg += ".class";
addTo->Add(new Assignment(v, new MethodCall(data, "getList", 2, k,
new LiteralExpression(classArg))));
}
}
// ================================================================
RpcDataType::RpcDataType()
:UserDataType("android.support.place.rpc", "RpcData", true, true, true)
{
}
void
RpcDataType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags)
{
addTo->Add(new MethodCall(data, "putRpcData", 2, k, v));
}
void
RpcDataType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
Variable** cl)
{
addTo->Add(new Assignment(v, new MethodCall(data, "getRpcData", 1, k)));
}
// ================================================================ // ================================================================
ClassLoaderType::ClassLoaderType() ClassLoaderType::ClassLoaderType()
:Type("java.lang", "ClassLoader", BUILT_IN, false, false, false) :Type("java.lang", "ClassLoader", BUILT_IN, false, false)
{ {
} }

View File

@@ -24,9 +24,9 @@ public:
}; };
Type(const string& name, int kind, bool canWriteToParcel, Type(const string& name, int kind, bool canWriteToParcel,
bool canWriteToRpcData, bool canBeOut); bool canBeOut);
Type(const string& package, const string& name, Type(const string& package, const string& name,
int kind, bool canWriteToParcel, bool canWriteToRpcData, bool canBeOut, int kind, bool canWriteToParcel, bool canBeOut,
const string& declFile = "", int declLine = -1); const string& declFile = "", int declLine = -1);
virtual ~Type(); virtual ~Type();
@@ -37,12 +37,10 @@ public:
inline string DeclFile() const { return m_declFile; } inline string DeclFile() const { return m_declFile; }
inline int DeclLine() const { return m_declLine; } inline int DeclLine() const { return m_declLine; }
inline bool CanWriteToParcel() const { return m_canWriteToParcel; } inline bool CanWriteToParcel() const { return m_canWriteToParcel; }
inline bool CanWriteToRpcData() const { return m_canWriteToRpcData; }
inline bool CanBeOutParameter() const { return m_canBeOut; } inline bool CanBeOutParameter() const { return m_canBeOut; }
virtual string ImportType() const; virtual string ImportType() const;
virtual string CreatorName() const; virtual string CreatorName() const;
virtual string RpcCreatorName() const;
virtual string InstantiableName() const; virtual string InstantiableName() const;
virtual void WriteToParcel(StatementBlock* addTo, Variable* v, virtual void WriteToParcel(StatementBlock* addTo, Variable* v,
@@ -61,11 +59,6 @@ public:
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags);
virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl);
protected: protected:
void SetQualifiedName(const string& qualified); void SetQualifiedName(const string& qualified);
Expression* BuildWriteToParcelFlags(int flags); Expression* BuildWriteToParcelFlags(int flags);
@@ -81,7 +74,6 @@ private:
int m_declLine; int m_declLine;
int m_kind; int m_kind;
bool m_canWriteToParcel; bool m_canWriteToParcel;
bool m_canWriteToRpcData;
bool m_canBeOut; bool m_canBeOut;
}; };
@@ -93,12 +85,7 @@ public:
const string& unmarshallParcel, const string& unmarshallParcel,
const string& writeArrayParcel, const string& writeArrayParcel,
const string& createArrayParcel, const string& createArrayParcel,
const string& readArrayParcel, const string& readArrayParcel);
const string& marshallRpc,
const string& unmarshallRpc,
const string& writeArrayRpc,
const string& createArrayRpc,
const string& readArrayRpc);
virtual void WriteToParcel(StatementBlock* addTo, Variable* v, virtual void WriteToParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, int flags); Variable* parcel, int flags);
@@ -114,22 +101,12 @@ public:
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags);
virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl);
private: private:
string m_marshallParcel; string m_marshallParcel;
string m_unmarshallParcel; string m_unmarshallParcel;
string m_writeArrayParcel; string m_writeArrayParcel;
string m_createArrayParcel; string m_createArrayParcel;
string m_readArrayParcel; string m_readArrayParcel;
string m_marshallRpc;
string m_unmarshallRpc;
string m_writeArrayRpc;
string m_createArrayRpc;
string m_readArrayRpc;
}; };
class BooleanType : public Type class BooleanType : public Type
@@ -150,11 +127,6 @@ public:
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags);
virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl);
}; };
class CharType : public Type class CharType : public Type
@@ -175,11 +147,6 @@ public:
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags);
virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl);
}; };
@@ -203,11 +170,6 @@ public:
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags);
virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl);
}; };
class CharSequenceType : public Type class CharSequenceType : public Type
@@ -344,22 +306,16 @@ public:
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void ReadFromParcel(StatementBlock* addTo, Variable* v, virtual void ReadFromParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags);
virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl);
}; };
class UserDataType : public Type class UserDataType : public Type
{ {
public: public:
UserDataType(const string& package, const string& name, UserDataType(const string& package, const string& name,
bool builtIn, bool canWriteToParcel, bool canWriteToRpcData, bool builtIn, bool canWriteToParcel,
const string& declFile = "", int declLine = -1); const string& declFile = "", int declLine = -1);
virtual string CreatorName() const; virtual string CreatorName() const;
virtual string RpcCreatorName() const;
virtual void WriteToParcel(StatementBlock* addTo, Variable* v, virtual void WriteToParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, int flags); Variable* parcel, int flags);
@@ -376,11 +332,6 @@ public:
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v, virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags);
virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl);
}; };
class InterfaceType : public Type class InterfaceType : public Type
@@ -426,17 +377,6 @@ private:
vector<Type*> m_args; vector<Type*> m_args;
}; };
class RpcDataType : public UserDataType
{
public:
RpcDataType();
virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags);
virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl);
};
class ClassLoaderType : public Type class ClassLoaderType : public Type
{ {
public: public:
@@ -459,11 +399,6 @@ public:
virtual void ReadFromParcel(StatementBlock* addTo, Variable* v, virtual void ReadFromParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, Variable** cl); Variable* parcel, Variable** cl);
virtual void WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, int flags);
virtual void CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
Variable* data, Variable** cl);
private: private:
string m_creator; string m_creator;
}; };
@@ -526,11 +461,6 @@ extern Type* PARCELABLE_INTERFACE_TYPE;
extern Type* CONTEXT_TYPE; extern Type* CONTEXT_TYPE;
extern Type* RPC_DATA_TYPE;
extern Type* RPC_ERROR_TYPE;
extern Type* RPC_CONTEXT_TYPE;
extern Type* EVENT_FAKE_TYPE;
extern Expression* NULL_VALUE; extern Expression* NULL_VALUE;
extern Expression* THIS_VALUE; extern Expression* THIS_VALUE;
extern Expression* SUPER_VALUE; extern Expression* SUPER_VALUE;

View File

@@ -60,12 +60,9 @@ test_document(document_item_type* d)
} }
else if (d->item_type == USER_DATA_TYPE) { else if (d->item_type == USER_DATA_TYPE) {
user_data_type* b = (user_data_type*)d; user_data_type* b = (user_data_type*)d;
if ((b->flattening_methods & PARCELABLE_DATA) != 0) { if (b->parcelable) {
printf("parcelable %s %s;\n", b->package, b->name.data); printf("parcelable %s %s;\n", b->package, b->name.data);
} }
if ((b->flattening_methods & RPC_DATA) != 0) {
printf("flattenable %s %s;\n", b->package, b->name.data);
}
} }
else { else {
printf("UNKNOWN d=0x%08lx d->item_type=%d\n", (long)d, d->item_type); printf("UNKNOWN d=0x%08lx d->item_type=%d\n", (long)d, d->item_type);
@@ -251,8 +248,7 @@ check_filenames(const char* filename, document_item_type* items)
user_data_type* p = (user_data_type*)items; user_data_type* p = (user_data_type*)items;
err |= check_filename(filename, p->package, &p->name); err |= check_filename(filename, p->package, &p->name);
} }
else if (items->item_type == INTERFACE_TYPE_BINDER else if (items->item_type == INTERFACE_TYPE_BINDER) {
|| items->item_type == INTERFACE_TYPE_RPC) {
interface_type* c = (interface_type*)items; interface_type* c = (interface_type*)items;
err |= check_filename(filename, c->package, &c->name); err |= check_filename(filename, c->package, &c->name);
} }
@@ -303,11 +299,9 @@ gather_types(const char* filename, document_item_type* items)
if (items->item_type == USER_DATA_TYPE) { if (items->item_type == USER_DATA_TYPE) {
user_data_type* p = (user_data_type*)items; user_data_type* p = (user_data_type*)items;
type = new UserDataType(p->package ? p->package : "", p->name.data, type = new UserDataType(p->package ? p->package : "", p->name.data,
false, ((p->flattening_methods & PARCELABLE_DATA) != 0), false, p->parcelable, filename, p->name.lineno);
((p->flattening_methods & RPC_DATA) != 0), filename, p->name.lineno);
} }
else if (items->item_type == INTERFACE_TYPE_BINDER else if (items->item_type == INTERFACE_TYPE_BINDER) {
|| items->item_type == INTERFACE_TYPE_RPC) {
interface_type* c = (interface_type*)items; interface_type* c = (interface_type*)items;
type = new InterfaceType(c->package ? c->package : "", type = new InterfaceType(c->package ? c->package : "",
c->name.data, false, c->oneway, c->name.data, false, c->oneway,
@@ -331,30 +325,17 @@ gather_types(const char* filename, document_item_type* items)
string name = c->name.data; string name = c->name.data;
name += ".Stub"; name += ".Stub";
Type* stub = new Type(c->package ? c->package : "", Type* stub = new Type(c->package ? c->package : "",
name, Type::GENERATED, false, false, false, name, Type::GENERATED, false, false,
filename, c->name.lineno); filename, c->name.lineno);
NAMES.Add(stub); NAMES.Add(stub);
name = c->name.data; name = c->name.data;
name += ".Stub.Proxy"; name += ".Stub.Proxy";
Type* proxy = new Type(c->package ? c->package : "", Type* proxy = new Type(c->package ? c->package : "",
name, Type::GENERATED, false, false, false, name, Type::GENERATED, false, false,
filename, c->name.lineno); filename, c->name.lineno);
NAMES.Add(proxy); NAMES.Add(proxy);
} }
else if (items->item_type == INTERFACE_TYPE_RPC) {
// for interfaces, also add the service base type, we don't
// bother checking these for duplicates, because the parser
// won't let us do it.
interface_type* c = (interface_type*)items;
string name = c->name.data;
name += ".ServiceBase";
Type* base = new Type(c->package ? c->package : "",
name, Type::GENERATED, false, false, false,
filename, c->name.lineno);
NAMES.Add(base);
}
} else { } else {
if (old->Kind() == Type::BUILT_IN) { if (old->Kind() == Type::BUILT_IN) {
fprintf(stderr, "%s:%d attempt to redefine built in class %s\n", fprintf(stderr, "%s:%d attempt to redefine built in class %s\n",
@@ -406,7 +387,7 @@ matches_keyword(const char* str)
} }
static int static int
check_method(const char* filename, int kind, method_type* m) check_method(const char* filename, method_type* m)
{ {
int err = 0; int err = 0;
@@ -419,20 +400,11 @@ check_method(const char* filename, int kind, method_type* m)
return err; return err;
} }
if (returnType == EVENT_FAKE_TYPE) { if (!returnType->CanWriteToParcel()) {
if (kind != INTERFACE_TYPE_RPC) {
fprintf(stderr, "%s:%d event methods only supported for rpc interfaces\n",
filename, m->type.type.lineno);
err = 1;
}
} else {
if (!(kind == INTERFACE_TYPE_BINDER ? returnType->CanWriteToParcel()
: returnType->CanWriteToRpcData())) {
fprintf(stderr, "%s:%d return type %s can't be marshalled.\n", filename, fprintf(stderr, "%s:%d return type %s can't be marshalled.\n", filename,
m->type.type.lineno, m->type.type.data); m->type.type.lineno, m->type.type.data);
err = 1; err = 1;
} }
}
if (m->type.dimension > 0 && !returnType->CanBeArray()) { if (m->type.dimension > 0 && !returnType->CanBeArray()) {
fprintf(stderr, "%s:%d return type %s%s can't be an array.\n", filename, fprintf(stderr, "%s:%d return type %s%s can't be an array.\n", filename,
@@ -464,30 +436,13 @@ check_method(const char* filename, int kind, method_type* m)
goto next; goto next;
} }
if (t == EVENT_FAKE_TYPE) { if (!t->CanWriteToParcel()) {
fprintf(stderr, "%s:%d parameter %s (%d) event can not be used as a parameter %s\n",
filename, m->type.type.lineno, arg->name.data, index,
arg->type.type.data);
err = 1;
goto next;
}
if (!(kind == INTERFACE_TYPE_BINDER ? t->CanWriteToParcel() : t->CanWriteToRpcData())) {
fprintf(stderr, "%s:%d parameter %d: '%s %s' can't be marshalled.\n", fprintf(stderr, "%s:%d parameter %d: '%s %s' can't be marshalled.\n",
filename, m->type.type.lineno, index, filename, m->type.type.lineno, index,
arg->type.type.data, arg->name.data); arg->type.type.data, arg->name.data);
err = 1; err = 1;
} }
if (returnType == EVENT_FAKE_TYPE
&& convert_direction(arg->direction.data) != IN_PARAMETER) {
fprintf(stderr, "%s:%d parameter %d: '%s %s' All paremeters on events must be 'in'.\n",
filename, m->type.type.lineno, index,
arg->type.type.data, arg->name.data);
err = 1;
goto next;
}
if (arg->direction.data == NULL if (arg->direction.data == NULL
&& (arg->type.dimension != 0 || t->CanBeOutParameter())) { && (arg->type.dimension != 0 || t->CanBeOutParameter())) {
fprintf(stderr, "%s:%d parameter %d: '%s %s' can be an out" fprintf(stderr, "%s:%d parameter %d: '%s %s' can be an out"
@@ -549,8 +504,7 @@ check_types(const char* filename, document_item_type* items)
int err = 0; int err = 0;
while (items) { while (items) {
// (nothing to check for USER_DATA_TYPE) // (nothing to check for USER_DATA_TYPE)
if (items->item_type == INTERFACE_TYPE_BINDER if (items->item_type == INTERFACE_TYPE_BINDER) {
|| items->item_type == INTERFACE_TYPE_RPC) {
map<string,method_type*> methodNames; map<string,method_type*> methodNames;
interface_type* c = (interface_type*)items; interface_type* c = (interface_type*)items;
@@ -559,7 +513,7 @@ check_types(const char* filename, document_item_type* items)
if (member->item_type == METHOD_TYPE) { if (member->item_type == METHOD_TYPE) {
method_type* m = (method_type*)member; method_type* m = (method_type*)member;
err |= check_method(filename, items->item_type, m); err |= check_method(filename, m);
// prevent duplicate methods // prevent duplicate methods
if (methodNames.find(m->name.data) == methodNames.end()) { if (methodNames.find(m->name.data) == methodNames.end()) {
@@ -600,9 +554,6 @@ exactly_one_interface(const char* filename, const document_item_type* items, con
if (next->item_type == INTERFACE_TYPE_BINDER) { if (next->item_type == INTERFACE_TYPE_BINDER) {
lineno = ((interface_type*)next)->interface_token.lineno; lineno = ((interface_type*)next)->interface_token.lineno;
} }
else if (next->item_type == INTERFACE_TYPE_RPC) {
lineno = ((interface_type*)next)->interface_token.lineno;
}
fprintf(stderr, "%s:%d aidl can only handle one interface per file\n", fprintf(stderr, "%s:%d aidl can only handle one interface per file\n",
filename, lineno); filename, lineno);
return 1; return 1;
@@ -612,9 +563,9 @@ exactly_one_interface(const char* filename, const document_item_type* items, con
*onlyParcelable = true; *onlyParcelable = true;
if (options.failOnParcelable) { if (options.failOnParcelable) {
fprintf(stderr, "%s:%d aidl can only generate code for interfaces, not" fprintf(stderr, "%s:%d aidl can only generate code for interfaces, not"
" parcelables or flattenables,\n", filename, " parcelables,\n", filename,
((user_data_type*)items)->keyword_token.lineno); ((user_data_type*)items)->keyword_token.lineno);
fprintf(stderr, "%s:%d .aidl files that only declare parcelables or flattenables" fprintf(stderr, "%s:%d .aidl files that only declare parcelables"
"may not go in the Makefile.\n", filename, "may not go in the Makefile.\n", filename,
((user_data_type*)items)->keyword_token.lineno); ((user_data_type*)items)->keyword_token.lineno);
return 1; return 1;
@@ -651,7 +602,7 @@ generate_dep_file(const Options& options, const document_item_type* items)
slash = ""; slash = "";
} }
if (items->item_type == INTERFACE_TYPE_BINDER || items->item_type == INTERFACE_TYPE_RPC) { if (items->item_type == INTERFACE_TYPE_BINDER) {
fprintf(to, "%s: \\\n", options.outputFileName.c_str()); fprintf(to, "%s: \\\n", options.outputFileName.c_str());
} else { } else {
// parcelable: there's no output file. // parcelable: there's no output file.
@@ -725,7 +676,7 @@ static string
generate_outputFileName(const Options& options, const document_item_type* items) generate_outputFileName(const Options& options, const document_item_type* items)
{ {
// items has already been checked to have only one interface. // items has already been checked to have only one interface.
if (items->item_type == INTERFACE_TYPE_BINDER || items->item_type == INTERFACE_TYPE_RPC) { if (items->item_type == INTERFACE_TYPE_BINDER) {
interface_type* type = (interface_type*)items; interface_type* type = (interface_type*)items;
return generate_outputFileName2(options, type->name, type->package); return generate_outputFileName2(options, type->name, type->package);
@@ -812,22 +763,7 @@ parse_preprocessed_file(const string& filename)
parcl->name.data = strdup(classname); parcl->name.data = strdup(classname);
parcl->semicolon_token.lineno = lineno; parcl->semicolon_token.lineno = lineno;
parcl->semicolon_token.data = strdup(";"); parcl->semicolon_token.data = strdup(";");
parcl->flattening_methods = PARCELABLE_DATA; parcl->parcelable = true;
doc = (document_item_type*)parcl;
}
else if (0 == strcmp("flattenable", type)) {
user_data_type* parcl = (user_data_type*)malloc(
sizeof(user_data_type));
memset(parcl, 0, sizeof(user_data_type));
parcl->document_item.item_type = USER_DATA_TYPE;
parcl->keyword_token.lineno = lineno;
parcl->keyword_token.data = strdup(type);
parcl->package = packagename ? strdup(packagename) : NULL;
parcl->name.lineno = lineno;
parcl->name.data = strdup(classname);
parcl->semicolon_token.lineno = lineno;
parcl->semicolon_token.data = strdup(";");
parcl->flattening_methods = RPC_DATA;
doc = (document_item_type*)parcl; doc = (document_item_type*)parcl;
} }
else if (0 == strcmp("interface", type)) { else if (0 == strcmp("interface", type)) {
@@ -1081,12 +1017,9 @@ preprocess_aidl(const Options& options)
string line; string line;
if (doc->item_type == USER_DATA_TYPE) { if (doc->item_type == USER_DATA_TYPE) {
user_data_type* parcelable = (user_data_type*)doc; user_data_type* parcelable = (user_data_type*)doc;
if ((parcelable->flattening_methods & PARCELABLE_DATA) != 0) { if (parcelable->parcelable) {
line = "parcelable "; line = "parcelable ";
} }
if ((parcelable->flattening_methods & RPC_DATA) != 0) {
line = "flattenable ";
}
if (parcelable->package) { if (parcelable->package) {
line += parcelable->package; line += parcelable->package;
line += '.'; line += '.';

View File

@@ -68,8 +68,7 @@ typedef struct method_type {
enum { enum {
USER_DATA_TYPE = 12, USER_DATA_TYPE = 12,
INTERFACE_TYPE_BINDER, INTERFACE_TYPE_BINDER
INTERFACE_TYPE_RPC
}; };
typedef struct document_item_type { typedef struct document_item_type {
@@ -78,19 +77,13 @@ typedef struct document_item_type {
} document_item_type; } document_item_type;
// for user_data_type.flattening_methods
enum {
PARCELABLE_DATA = 0x1,
RPC_DATA = 0x2
};
typedef struct user_data_type { typedef struct user_data_type {
document_item_type document_item; document_item_type document_item;
buffer_type keyword_token; // only the first one buffer_type keyword_token; // only the first one
char* package; char* package;
buffer_type name; buffer_type name;
buffer_type semicolon_token; buffer_type semicolon_token;
int flattening_methods; bool parcelable;
} user_data_type; } user_data_type;
typedef struct interface_type { typedef struct interface_type {

View File

@@ -83,8 +83,6 @@ idvalue (0|[1-9][0-9]*)
/* keywords */ /* keywords */
parcelable { SET_BUFFER(PARCELABLE); return PARCELABLE; } parcelable { SET_BUFFER(PARCELABLE); return PARCELABLE; }
interface { SET_BUFFER(INTERFACE); return INTERFACE; } interface { SET_BUFFER(INTERFACE); return INTERFACE; }
flattenable { SET_BUFFER(FLATTENABLE); return FLATTENABLE; }
rpc { SET_BUFFER(INTERFACE); return RPC; }
in { SET_BUFFER(IN); return IN; } in { SET_BUFFER(IN); return IN; }
out { SET_BUFFER(OUT); return OUT; } out { SET_BUFFER(OUT); return OUT; }
inout { SET_BUFFER(INOUT); return INOUT; } inout { SET_BUFFER(INOUT); return INOUT; }

View File

@@ -20,8 +20,6 @@ static int count_brackets(const char*);
%token ARRAY %token ARRAY
%token PARCELABLE %token PARCELABLE
%token INTERFACE %token INTERFACE
%token FLATTENABLE
%token RPC
%token IN %token IN
%token OUT %token OUT
%token INOUT %token INOUT
@@ -88,7 +86,7 @@ parcelable_decl:
b->name = $2.buffer; b->name = $2.buffer;
b->package = g_currentPackage ? strdup(g_currentPackage) : NULL; b->package = g_currentPackage ? strdup(g_currentPackage) : NULL;
b->semicolon_token = $3.buffer; b->semicolon_token = $3.buffer;
b->flattening_methods = PARCELABLE_DATA; b->parcelable = true;
$$.user_data = b; $$.user_data = b;
} }
| PARCELABLE ';' { | PARCELABLE ';' {
@@ -101,28 +99,6 @@ parcelable_decl:
g_currentFilename, $2.buffer.lineno, $2.buffer.data); g_currentFilename, $2.buffer.lineno, $2.buffer.data);
$$.user_data = NULL; $$.user_data = NULL;
} }
| FLATTENABLE IDENTIFIER ';' {
user_data_type* b = (user_data_type*)malloc(sizeof(user_data_type));
b->document_item.item_type = USER_DATA_TYPE;
b->document_item.next = NULL;
b->keyword_token = $1.buffer;
b->name = $2.buffer;
b->package = g_currentPackage ? strdup(g_currentPackage) : NULL;
b->semicolon_token = $3.buffer;
b->flattening_methods = PARCELABLE_DATA | RPC_DATA;
$$.user_data = b;
}
| FLATTENABLE ';' {
fprintf(stderr, "%s:%d syntax error in flattenable declaration. Expected type name.\n",
g_currentFilename, $1.buffer.lineno);
$$.user_data = NULL;
}
| FLATTENABLE error ';' {
fprintf(stderr, "%s:%d syntax error in flattenable declaration. Expected type name, saw \"%s\".\n",
g_currentFilename, $2.buffer.lineno, $2.buffer.data);
$$.user_data = NULL;
}
; ;
interface_header: interface_header:
@@ -146,21 +122,6 @@ interface_header:
c->comments_token = &c->oneway_token; c->comments_token = &c->oneway_token;
$$.interface_obj = c; $$.interface_obj = c;
} }
| RPC {
interface_type* c = (interface_type*)malloc(sizeof(interface_type));
c->document_item.item_type = INTERFACE_TYPE_RPC;
c->document_item.next = NULL;
c->interface_token = $1.buffer;
c->oneway = false;
memset(&c->oneway_token, 0, sizeof(buffer_type));
c->comments_token = &c->interface_token;
$$.interface_obj = c;
}
;
interface_keywords:
INTERFACE
| RPC
; ;
interface_decl: interface_decl:
@@ -173,12 +134,12 @@ interface_decl:
c->close_brace_token = $5.buffer; c->close_brace_token = $5.buffer;
$$.interface_obj = c; $$.interface_obj = c;
} }
| interface_keywords error '{' interface_items '}' { | INTERFACE error '{' interface_items '}' {
fprintf(stderr, "%s:%d: syntax error in interface declaration. Expected type name, saw \"%s\"\n", fprintf(stderr, "%s:%d: syntax error in interface declaration. Expected type name, saw \"%s\"\n",
g_currentFilename, $2.buffer.lineno, $2.buffer.data); g_currentFilename, $2.buffer.lineno, $2.buffer.data);
$$.document_item = NULL; $$.document_item = NULL;
} }
| interface_keywords error '}' { | INTERFACE error '}' {
fprintf(stderr, "%s:%d: syntax error in interface declaration. Expected type name, saw \"%s\"\n", fprintf(stderr, "%s:%d: syntax error in interface declaration. Expected type name, saw \"%s\"\n",
g_currentFilename, $2.buffer.lineno, $2.buffer.data); g_currentFilename, $2.buffer.lineno, $2.buffer.data);
$$.document_item = NULL; $$.document_item = NULL;

View File

@@ -66,9 +66,6 @@ generate_java(const string& filename, const string& originalSrc,
if (iface->document_item.item_type == INTERFACE_TYPE_BINDER) { if (iface->document_item.item_type == INTERFACE_TYPE_BINDER) {
cl = generate_binder_interface_class(iface); cl = generate_binder_interface_class(iface);
} }
else if (iface->document_item.item_type == INTERFACE_TYPE_RPC) {
cl = generate_rpc_interface_class(iface);
}
Document* document = new Document; Document* document = new Document;
document->comment = ""; document->comment = "";

View File

@@ -12,7 +12,6 @@ int generate_java(const string& filename, const string& originalSrc,
interface_type* iface); interface_type* iface);
Class* generate_binder_interface_class(const interface_type* iface); Class* generate_binder_interface_class(const interface_type* iface);
Class* generate_rpc_interface_class(const interface_type* iface);
string gather_comments(extra_text_type* extra); string gather_comments(extra_text_type* extra);
string append(const char* a, const char* b); string append(const char* a, const char* b);

File diff suppressed because it is too large Load Diff