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 \
generate_java.cpp \
generate_java_binder.cpp \
generate_java_rpc.cpp \
options.cpp \
search_path.cpp \

View File

@@ -28,9 +28,6 @@ Type* CONTEXT_TYPE;
Type* MAP_TYPE;
Type* LIST_TYPE;
Type* CLASSLOADER_TYPE;
Type* RPC_DATA_TYPE;
Type* RPC_ERROR_TYPE;
Type* EVENT_FAKE_TYPE;
Expression* NULL_VALUE;
Expression* THIS_VALUE;
@@ -42,7 +39,6 @@ void
register_base_types()
{
VOID_TYPE = new BasicType("void",
"XXX", "XXX", "XXX", "XXX", "XXX",
"XXX", "XXX", "XXX", "XXX", "XXX");
NAMES.Add(VOID_TYPE);
@@ -50,37 +46,37 @@ register_base_types()
NAMES.Add(BOOLEAN_TYPE);
BYTE_TYPE = new BasicType("byte",
"writeByte", "readByte", "writeByteArray", "createByteArray", "readByteArray",
"putByte", "getByte", "putByteArray", "createByteArray", "getByteArray");
"writeByte", "readByte", "writeByteArray", "createByteArray",
"readByteArray");
NAMES.Add(BYTE_TYPE);
CHAR_TYPE = new CharType();
NAMES.Add(CHAR_TYPE);
INT_TYPE = new BasicType("int",
"writeInt", "readInt", "writeIntArray", "createIntArray", "readIntArray",
"putInteger", "getInteger", "putIntegerArray", "createIntegerArray", "getIntegerArray");
"writeInt", "readInt", "writeIntArray", "createIntArray",
"readIntArray");
NAMES.Add(INT_TYPE);
LONG_TYPE = new BasicType("long",
"writeLong", "readLong", "writeLongArray", "createLongArray", "readLongArray",
"putLong", "getLong", "putLongArray", "createLongArray", "getLongArray");
"writeLong", "readLong", "writeLongArray", "createLongArray",
"readLongArray");
NAMES.Add(LONG_TYPE);
FLOAT_TYPE = new BasicType("float",
"writeFloat", "readFloat", "writeFloatArray", "createFloatArray", "readFloatArray",
"putFloat", "getFloat", "putFloatArray", "createFloatArray", "getFloatArray");
"writeFloat", "readFloat", "writeFloatArray", "createFloatArray",
"readFloatArray");
NAMES.Add(FLOAT_TYPE);
DOUBLE_TYPE = new BasicType("double",
"writeDouble", "readDouble", "writeDoubleArray", "createDoubleArray", "readDoubleArray",
"putDouble", "getDouble", "putDoubleArray", "createDoubleArray", "getDoubleArray");
"writeDouble", "readDouble", "writeDoubleArray",
"createDoubleArray", "readDoubleArray");
NAMES.Add(DOUBLE_TYPE);
STRING_TYPE = new StringType();
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);
CHAR_SEQUENCE_TYPE = new CharSequenceType();
@@ -92,7 +88,7 @@ register_base_types()
LIST_TYPE = new ListType();
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);
REMOTE_EXCEPTION_TYPE = new RemoteExceptionType();
@@ -119,19 +115,9 @@ register_base_types()
PARCELABLE_INTERFACE_TYPE = new ParcelableInterfaceType();
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);
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();
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,
bool canBeOut)
Type::Type(const string& name, int kind, bool canWriteToParcel, bool canBeOut)
:m_package(),
m_name(name),
m_declFile(""),
m_declLine(-1),
m_kind(kind),
m_canWriteToParcel(canWriteToParcel),
m_canWriteToRpcData(canWriteToRpcData),
m_canBeOut(canBeOut)
{
m_qualifiedName = name;
}
Type::Type(const string& package, const string& name,
int kind, bool canWriteToParcel, bool canWriteToRpcData,
bool canBeOut, const string& declFile, int declLine)
int kind, bool canWriteToParcel, bool canBeOut,
const string& declFile, int declLine)
:m_package(package),
m_name(name),
m_declFile(declFile),
m_declLine(declLine),
m_kind(kind),
m_canWriteToParcel(canWriteToParcel),
m_canWriteToRpcData(canWriteToRpcData),
m_canBeOut(canBeOut)
{
if (package.length() > 0) {
@@ -213,12 +196,6 @@ Type::CreatorName() const
return "";
}
string
Type::RpcCreatorName() const
{
return "";
}
string
Type::InstantiableName() const
{
@@ -281,26 +258,6 @@ Type::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel,
+ 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
Type::SetQualifiedName(const string& qualified)
{
@@ -324,20 +281,13 @@ Type::BuildWriteToParcelFlags(int flags)
BasicType::BasicType(const string& name, const string& marshallParcel,
const string& unmarshallParcel, const string& writeArrayParcel,
const string& createArrayParcel, const string& readArrayParcel,
const string& marshallRpc, const string& unmarshallRpc,
const string& writeArrayRpc, const string& createArrayRpc, const string& readArrayRpc)
:Type(name, BUILT_IN, true, true, false),
const string& createArrayParcel, const string& readArrayParcel)
:Type(name, BUILT_IN, true, false),
m_marshallParcel(marshallParcel),
m_unmarshallParcel(unmarshallParcel),
m_writeArrayParcel(writeArrayParcel),
m_createArrayParcel(createArrayParcel),
m_readArrayParcel(readArrayParcel),
m_marshallRpc(marshallRpc),
m_unmarshallRpc(unmarshallRpc),
m_writeArrayRpc(writeArrayRpc),
m_createArrayRpc(createArrayRpc),
m_readArrayRpc(readArrayRpc)
m_readArrayParcel(readArrayParcel)
{
}
@@ -378,24 +328,10 @@ BasicType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* par
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()
: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));
}
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()
: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));
}
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()
: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));
}
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()
: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()
: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()
: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()
: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()
: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()
: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()
: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()
: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()
: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()
: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()
: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));
}
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,
bool builtIn, bool canWriteToParcel, bool canWriteToRpcData,
bool builtIn, bool canWriteToParcel,
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)
{
}
@@ -918,12 +798,6 @@ UserDataType::CreatorName() const
return QualifiedName() + ".CREATOR";
}
string
UserDataType::RpcCreatorName() const
{
return QualifiedName() + ".RPC_CREATOR";
}
void
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)));
}
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,
bool builtIn, bool oneway,
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)
,m_oneway(oneway)
{
@@ -1075,7 +932,7 @@ InterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* pa
GenericType::GenericType(const string& package, const string& name,
const vector<Type*>& args)
:Type(package, name, BUILT_IN, true, true, true)
:Type(package, name, BUILT_IN, true, true)
{
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()
: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,
bool canWriteToRpcData, bool canBeOut);
bool canBeOut);
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);
virtual ~Type();
@@ -37,12 +37,10 @@ public:
inline string DeclFile() const { return m_declFile; }
inline int DeclLine() const { return m_declLine; }
inline bool CanWriteToParcel() const { return m_canWriteToParcel; }
inline bool CanWriteToRpcData() const { return m_canWriteToRpcData; }
inline bool CanBeOutParameter() const { return m_canBeOut; }
virtual string ImportType() const;
virtual string CreatorName() const;
virtual string RpcCreatorName() const;
virtual string InstantiableName() const;
virtual void WriteToParcel(StatementBlock* addTo, Variable* v,
@@ -61,11 +59,6 @@ public:
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
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:
void SetQualifiedName(const string& qualified);
Expression* BuildWriteToParcelFlags(int flags);
@@ -81,7 +74,6 @@ private:
int m_declLine;
int m_kind;
bool m_canWriteToParcel;
bool m_canWriteToRpcData;
bool m_canBeOut;
};
@@ -93,12 +85,7 @@ public:
const string& unmarshallParcel,
const string& writeArrayParcel,
const string& createArrayParcel,
const string& readArrayParcel,
const string& marshallRpc,
const string& unmarshallRpc,
const string& writeArrayRpc,
const string& createArrayRpc,
const string& readArrayRpc);
const string& readArrayParcel);
virtual void WriteToParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, int flags);
@@ -114,22 +101,12 @@ public:
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
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:
string m_marshallParcel;
string m_unmarshallParcel;
string m_writeArrayParcel;
string m_createArrayParcel;
string m_readArrayParcel;
string m_marshallRpc;
string m_unmarshallRpc;
string m_writeArrayRpc;
string m_createArrayRpc;
string m_readArrayRpc;
};
class BooleanType : public Type
@@ -150,11 +127,6 @@ public:
Variable* parcel, Variable** cl);
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
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
@@ -175,11 +147,6 @@ public:
Variable* parcel, Variable** cl);
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
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);
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
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
@@ -344,22 +306,16 @@ public:
Variable* parcel, Variable** cl);
virtual void ReadFromParcel(StatementBlock* addTo, Variable* v,
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
{
public:
UserDataType(const string& package, const string& name,
bool builtIn, bool canWriteToParcel, bool canWriteToRpcData,
bool builtIn, bool canWriteToParcel,
const string& declFile = "", int declLine = -1);
virtual string CreatorName() const;
virtual string RpcCreatorName() const;
virtual void WriteToParcel(StatementBlock* addTo, Variable* v,
Variable* parcel, int flags);
@@ -376,11 +332,6 @@ public:
Variable* parcel, Variable** cl);
virtual void ReadArrayFromParcel(StatementBlock* addTo, Variable* v,
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
@@ -426,17 +377,6 @@ private:
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
{
public:
@@ -459,11 +399,6 @@ public:
virtual void ReadFromParcel(StatementBlock* addTo, Variable* v,
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:
string m_creator;
};
@@ -526,11 +461,6 @@ extern Type* PARCELABLE_INTERFACE_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* THIS_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) {
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);
}
if ((b->flattening_methods & RPC_DATA) != 0) {
printf("flattenable %s %s;\n", b->package, b->name.data);
}
}
else {
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;
err |= check_filename(filename, p->package, &p->name);
}
else if (items->item_type == INTERFACE_TYPE_BINDER
|| items->item_type == INTERFACE_TYPE_RPC) {
else if (items->item_type == INTERFACE_TYPE_BINDER) {
interface_type* c = (interface_type*)items;
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) {
user_data_type* p = (user_data_type*)items;
type = new UserDataType(p->package ? p->package : "", p->name.data,
false, ((p->flattening_methods & PARCELABLE_DATA) != 0),
((p->flattening_methods & RPC_DATA) != 0), filename, p->name.lineno);
false, p->parcelable, filename, p->name.lineno);
}
else if (items->item_type == INTERFACE_TYPE_BINDER
|| items->item_type == INTERFACE_TYPE_RPC) {
else if (items->item_type == INTERFACE_TYPE_BINDER) {
interface_type* c = (interface_type*)items;
type = new InterfaceType(c->package ? c->package : "",
c->name.data, false, c->oneway,
@@ -331,30 +325,17 @@ gather_types(const char* filename, document_item_type* items)
string name = c->name.data;
name += ".Stub";
Type* stub = new Type(c->package ? c->package : "",
name, Type::GENERATED, false, false, false,
name, Type::GENERATED, false, false,
filename, c->name.lineno);
NAMES.Add(stub);
name = c->name.data;
name += ".Stub.Proxy";
Type* proxy = new Type(c->package ? c->package : "",
name, Type::GENERATED, false, false, false,
name, Type::GENERATED, false, false,
filename, c->name.lineno);
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 {
if (old->Kind() == Type::BUILT_IN) {
fprintf(stderr, "%s:%d attempt to redefine built in class %s\n",
@@ -406,7 +387,7 @@ matches_keyword(const char* str)
}
static int
check_method(const char* filename, int kind, method_type* m)
check_method(const char* filename, method_type* m)
{
int err = 0;
@@ -419,19 +400,10 @@ check_method(const char* filename, int kind, method_type* m)
return err;
}
if (returnType == EVENT_FAKE_TYPE) {
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,
if (!returnType->CanWriteToParcel()) {
fprintf(stderr, "%s:%d return type %s can't be marshalled.\n", filename,
m->type.type.lineno, m->type.type.data);
err = 1;
}
err = 1;
}
if (m->type.dimension > 0 && !returnType->CanBeArray()) {
@@ -464,30 +436,13 @@ check_method(const char* filename, int kind, method_type* m)
goto next;
}
if (t == EVENT_FAKE_TYPE) {
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())) {
if (!t->CanWriteToParcel()) {
fprintf(stderr, "%s:%d parameter %d: '%s %s' can't be marshalled.\n",
filename, m->type.type.lineno, index,
arg->type.type.data, arg->name.data);
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
&& (arg->type.dimension != 0 || t->CanBeOutParameter())) {
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;
while (items) {
// (nothing to check for USER_DATA_TYPE)
if (items->item_type == INTERFACE_TYPE_BINDER
|| items->item_type == INTERFACE_TYPE_RPC) {
if (items->item_type == INTERFACE_TYPE_BINDER) {
map<string,method_type*> methodNames;
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) {
method_type* m = (method_type*)member;
err |= check_method(filename, items->item_type, m);
err |= check_method(filename, m);
// prevent duplicate methods
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) {
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",
filename, lineno);
return 1;
@@ -612,9 +563,9 @@ exactly_one_interface(const char* filename, const document_item_type* items, con
*onlyParcelable = true;
if (options.failOnParcelable) {
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);
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,
((user_data_type*)items)->keyword_token.lineno);
return 1;
@@ -651,7 +602,7 @@ generate_dep_file(const Options& options, const document_item_type* items)
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());
} else {
// parcelable: there's no output file.
@@ -725,7 +676,7 @@ static string
generate_outputFileName(const Options& options, const document_item_type* items)
{
// 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;
return generate_outputFileName2(options, type->name, type->package);
@@ -812,22 +763,7 @@ parse_preprocessed_file(const string& filename)
parcl->name.data = strdup(classname);
parcl->semicolon_token.lineno = lineno;
parcl->semicolon_token.data = strdup(";");
parcl->flattening_methods = PARCELABLE_DATA;
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;
parcl->parcelable = true;
doc = (document_item_type*)parcl;
}
else if (0 == strcmp("interface", type)) {
@@ -1081,12 +1017,9 @@ preprocess_aidl(const Options& options)
string line;
if (doc->item_type == USER_DATA_TYPE) {
user_data_type* parcelable = (user_data_type*)doc;
if ((parcelable->flattening_methods & PARCELABLE_DATA) != 0) {
if (parcelable->parcelable) {
line = "parcelable ";
}
if ((parcelable->flattening_methods & RPC_DATA) != 0) {
line = "flattenable ";
}
if (parcelable->package) {
line += parcelable->package;
line += '.';

View File

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

View File

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

View File

@@ -20,8 +20,6 @@ static int count_brackets(const char*);
%token ARRAY
%token PARCELABLE
%token INTERFACE
%token FLATTENABLE
%token RPC
%token IN
%token OUT
%token INOUT
@@ -88,7 +86,7 @@ parcelable_decl:
b->name = $2.buffer;
b->package = g_currentPackage ? strdup(g_currentPackage) : NULL;
b->semicolon_token = $3.buffer;
b->flattening_methods = PARCELABLE_DATA;
b->parcelable = true;
$$.user_data = b;
}
| PARCELABLE ';' {
@@ -101,28 +99,6 @@ parcelable_decl:
g_currentFilename, $2.buffer.lineno, $2.buffer.data);
$$.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:
@@ -146,21 +122,6 @@ interface_header:
c->comments_token = &c->oneway_token;
$$.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:
@@ -173,12 +134,12 @@ interface_decl:
c->close_brace_token = $5.buffer;
$$.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",
g_currentFilename, $2.buffer.lineno, $2.buffer.data);
$$.document_item = NULL;
}
| interface_keywords error '}' {
| INTERFACE error '}' {
fprintf(stderr, "%s:%d: syntax error in interface declaration. Expected type name, saw \"%s\"\n",
g_currentFilename, $2.buffer.lineno, $2.buffer.data);
$$.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) {
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->comment = "";

View File

@@ -12,7 +12,6 @@ int generate_java(const string& filename, const string& originalSrc,
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 append(const char* a, const char* b);

File diff suppressed because it is too large Load Diff