Snap for 10183495 from 1015cfc92562a9c6b7ef5cc8589d6913fb342c5e to build-tools-release
Change-Id: I2cc9f14bc6e84d35345a734f1c15f20cf937f189
diff --git a/Android.bp b/Android.bp
index 66081f1..a542d96 100644
--- a/Android.bp
+++ b/Android.bp
@@ -645,6 +645,7 @@
defaults: ["aidl_test_java_integration_defaults"],
static_libs: [
"aidl-test-interface-permission-java",
+ "frameworks-base-testutils",
],
srcs: [
"tests/java/src/android/aidl/permission/tests/*.java",
@@ -660,6 +661,7 @@
defaults: ["aidl_test_java_integration_defaults"],
static_libs: [
"aidl-test-interface-permission-java",
+ "frameworks-base-testutils",
],
data: [
":cts-dalvik-device-test-runner",
diff --git a/aidl_language.cpp b/aidl_language.cpp
index 6720818..06af907 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -1097,6 +1097,7 @@
const Comments& comments, int id)
: AidlMember(location, comments),
oneway_(oneway),
+ oneway_annotation_(oneway),
type_(type),
name_(name),
arguments_(std::move(*args)),
@@ -1707,7 +1708,7 @@
AidlInterface::AidlInterface(const AidlLocation& location, const std::string& name,
const Comments& comments, bool oneway, const std::string& package,
std::vector<std::unique_ptr<AidlMember>>* members)
- : AidlDefinedType(location, name, comments, package, members) {
+ : AidlDefinedType(location, name, comments, package, members), oneway_annotation_(oneway) {
for (auto& m : GetMethods()) {
m.get()->ApplyInterfaceOneway(oneway);
}
diff --git a/aidl_language.h b/aidl_language.h
index 3b1c77d..f963edb 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -878,6 +878,7 @@
// set if this method is part of an interface that is marked oneway
void ApplyInterfaceOneway(bool oneway) { oneway_ = oneway_ || oneway; }
bool IsOneway() const { return oneway_; }
+ bool HasOnewayAnnotation() const { return oneway_annotation_; }
const std::string& GetName() const { return name_; }
bool HasId() const { return has_id_; }
@@ -917,7 +918,11 @@
void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
private:
+ // oneway_ may be set by the method or the parent interface. If the interface is oneway,
+ // is also oneway. oneway_annotation_ may only be set on creation, and may not be overridden
+ // by the parent interface. It is used to detect redundant oneway annotations.
bool oneway_;
+ bool oneway_annotation_;
std::unique_ptr<AidlTypeSpecifier> type_;
std::string name_;
const std::vector<std::unique_ptr<AidlArgument>> arguments_;
@@ -1215,6 +1220,10 @@
bool UsesPermissions() const;
std::string GetDescriptor() const;
void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
+ bool HasOnewayAnnotation() const { return oneway_annotation_; }
+
+ private:
+ bool oneway_annotation_;
};
inline std::string SimpleName(const std::string& qualified_name) {
diff --git a/build/aidl_api.go b/build/aidl_api.go
index e6256d6..8424ef0 100644
--- a/build/aidl_api.go
+++ b/build/aidl_api.go
@@ -724,7 +724,7 @@
}
func init() {
- android.RegisterSingletonType("aidl-freeze-api", freezeApiSingletonFactory)
+ android.RegisterParallelSingletonType("aidl-freeze-api", freezeApiSingletonFactory)
}
func freezeApiSingletonFactory() android.Singleton {
diff --git a/build/aidl_rust_glue.py b/build/aidl_rust_glue.py
index 519718b..c06790d 100755
--- a/build/aidl_rust_glue.py
+++ b/build/aidl_rust_glue.py
@@ -86,7 +86,8 @@
lib_rs_file.write("}\n")
def execute():
- parser = argparse.ArgumentParser(description='Generate the top-level lib.rs.')
+ parser = argparse.ArgumentParser(description='Generate the top-level lib.rs.',
+ fromfile_prefix_chars='@')
parser.add_argument('output', help='Path to output .rs file')
parser.add_argument('root', help='Common ancestor of all input files')
parser.add_argument('inputs', nargs='+', help='Input .rs files')
diff --git a/diagnostics.cpp b/diagnostics.cpp
index 5112173..5c51f03 100644
--- a/diagnostics.cpp
+++ b/diagnostics.cpp
@@ -224,6 +224,31 @@
}
};
+struct DiagnoseRedundantOneway : DiagnosticsVisitor {
+ DiagnoseRedundantOneway(DiagnosticsContext& diag) : DiagnosticsVisitor(diag) {}
+ void Visit(const AidlInterface& i) override {
+ if (i.HasOnewayAnnotation()) {
+ for (const auto& m : i.GetMethods()) {
+ if (!m->IsUserDefined()) continue;
+ if (Suppressed(*m)) continue;
+ if (m->HasOnewayAnnotation()) {
+ diag.Report(i.GetLocation(), DiagnosticID::redundant_oneway)
+ << "The interface '" << i.GetName()
+ << "' is oneway. Redundant oneway annotation for method '" << m->GetName() << "'.";
+ }
+ }
+ }
+ }
+ bool Suppressed(const AidlMethod& m) const {
+ for (const auto& w : m.GetType().SuppressWarnings()) {
+ if (w == to_string(DiagnosticID::redundant_oneway)) {
+ return true;
+ }
+ }
+ return false;
+ }
+};
+
struct DiagnoseOutArray : DiagnosticsVisitor {
DiagnoseOutArray(DiagnosticsContext& diag) : DiagnosticsVisitor(diag) {}
void Visit(const AidlMethod& m) override {
@@ -435,6 +460,7 @@
DiagnoseUntypedCollection{diag}.Check(doc);
DiagnosePermissionAnnotations{diag}.Check(doc);
DiagnoseRedundantNames{diag}.Check(doc);
+ DiagnoseRedundantOneway{diag}.Check(doc);
return diag.ErrorCount() == 0;
}
diff --git a/diagnostics.inc b/diagnostics.inc
index 85b5203..9abdee8 100644
--- a/diagnostics.inc
+++ b/diagnostics.inc
@@ -12,3 +12,4 @@
DIAG(unknown_warning, "unknown-warning", false)
DIAG(untyped_collection, "untyped-collection", false)
DIAG(redundant_name, "redundant-name", false)
+DIAG(redundant_oneway, "redundant-oneway", false)
diff --git a/diagnostics_unittest.cpp b/diagnostics_unittest.cpp
index dcbb701..feb8189 100644
--- a/diagnostics_unittest.cpp
+++ b/diagnostics_unittest.cpp
@@ -157,6 +157,24 @@
});
}
+TEST_F(DiagnosticsTest, RedundantOnewayMethodAnnotationInOnewayInterface) {
+ expect_diagnostic = DiagnosticID::redundant_oneway;
+ ParseFiles({
+ {"IFoo.aidl", "oneway interface IFoo { oneway void foo(int a); }"},
+ });
+}
+
+TEST_F(DiagnosticsTest, RedundantOnewayMethodSuppressedAtMethod) {
+ enable_diagnostic = DiagnosticID::redundant_oneway;
+ expect_diagnostic = {};
+ ParseFiles({
+ {"IFoo.aidl",
+ "oneway interface IFoo {\n"
+ " @SuppressWarnings(value={\"redundant-oneway\"}) oneway void bar();\n"
+ "}"},
+ });
+}
+
TEST_F(DiagnosticsTest, ArraysAsOutputParametersConsideredHarmful) {
expect_diagnostic = DiagnosticID::out_array;
ParseFiles({
diff --git a/generate_java_binder.cpp b/generate_java_binder.cpp
index 67bfcfa..6dd5935 100644
--- a/generate_java_binder.cpp
+++ b/generate_java_binder.cpp
@@ -85,7 +85,7 @@
std::shared_ptr<Variable> transact_data;
std::shared_ptr<Variable> transact_reply;
std::shared_ptr<Variable> transact_flags;
- std::shared_ptr<SwitchStatement> transact_switch_meta;
+ std::vector<std::shared_ptr<IfStatement>> transact_if_statements_meta;
std::shared_ptr<SwitchStatement> transact_switch_user;
std::shared_ptr<StatementBlock> transact_statements;
std::shared_ptr<SwitchStatement> code_to_method_name_switch;
@@ -181,7 +181,6 @@
transact_statements = onTransact->statements;
onTransact->exceptions.push_back("android.os.RemoteException");
this->elements.push_back(onTransact);
- this->transact_switch_meta = std::make_shared<SwitchStatement>(this->transact_code);
this->transact_switch_user = std::make_shared<SwitchStatement>(this->transact_code);
}
@@ -210,8 +209,22 @@
transact_statements->Add(ifStatement);
}
+ // Build the if/else chain for the meta methods. There at most 3 different
+ // statements so if/else is more efficient than a switch statement.
// Meta transactions are looked up prior to user-defined transactions.
- transact_statements->Add(this->transact_switch_meta);
+ AIDL_FATAL_IF(this->transact_if_statements_meta.size() == 0, AIDL_LOCATION_HERE)
+ << "Expecting to have meta methods and found none.";
+ AIDL_FATAL_IF(this->transact_if_statements_meta.size() > 3, AIDL_LOCATION_HERE)
+ << "Expecting to have at most 3 meta methods and found "
+ << this->transact_if_statements_meta.size();
+ auto ifStatement = this->transact_if_statements_meta[0];
+ std::shared_ptr<IfStatement> currentIfStatement = ifStatement;
+ for (size_t i = 1; i < transact_if_statements_meta.size(); i++) {
+ currentIfStatement->elseif = this->transact_if_statements_meta[i];
+ currentIfStatement = currentIfStatement->elseif;
+ }
+
+ transact_statements->Add(ifStatement);
transact_statements->Add(this->transact_switch_user);
// getTransactionName
@@ -925,22 +938,24 @@
}
} else {
if (method.GetName() == kGetInterfaceVersion && options.Version() > 0) {
- auto c = std::make_shared<Case>(transactCodeName);
+ auto ifStatement = std::make_shared<IfStatement>();
+ ifStatement->expression = std::make_shared<LiteralExpression>("code == " + transactCodeName);
std::ostringstream code;
code << "reply.writeNoException();\n"
<< "reply.writeInt(" << kGetInterfaceVersion << "());\n"
<< "return true;\n";
- c->statements->Add(std::make_shared<LiteralStatement>(code.str()));
- stubClass->transact_switch_meta->cases.push_back(c);
+ ifStatement->statements->Add(std::make_shared<LiteralStatement>(code.str()));
+ stubClass->transact_if_statements_meta.push_back(ifStatement);
}
if (method.GetName() == kGetInterfaceHash && !options.Hash().empty()) {
- auto c = std::make_shared<Case>(transactCodeName);
+ auto ifStatement = std::make_shared<IfStatement>();
+ ifStatement->expression = std::make_shared<LiteralExpression>("code == " + transactCodeName);
std::ostringstream code;
code << "reply.writeNoException();\n"
<< "reply.writeString(" << kGetInterfaceHash << "());\n"
<< "return true;\n";
- c->statements->Add(std::make_shared<LiteralStatement>(code.str()));
- stubClass->transact_switch_meta->cases.push_back(c);
+ ifStatement->statements->Add(std::make_shared<LiteralStatement>(code.str()));
+ stubClass->transact_if_statements_meta.push_back(ifStatement);
}
}
@@ -1028,12 +1043,13 @@
Class* interface, std::shared_ptr<StubClass> stub,
std::shared_ptr<ProxyClass> proxy) {
// the interface descriptor transaction handler
- auto c = std::make_shared<Case>("INTERFACE_TRANSACTION");
- c->statements->Add(std::make_shared<MethodCall>(
+ auto ifStatement = std::make_shared<IfStatement>();
+ ifStatement->expression = std::make_shared<LiteralExpression>("code == INTERFACE_TRANSACTION");
+ ifStatement->statements->Add(std::make_shared<MethodCall>(
stub->transact_reply, "writeString",
std::vector<std::shared_ptr<Expression>>{stub->GetTransactDescriptor(nullptr)}));
- c->statements->Add(std::make_shared<ReturnStatement>(TRUE_VALUE));
- stub->transact_switch_meta->cases.push_back(c);
+ ifStatement->statements->Add(std::make_shared<ReturnStatement>(TRUE_VALUE));
+ stub->transact_if_statements_meta.push_back(ifStatement);
// and the proxy-side method returning the descriptor directly
auto getDesc = std::make_shared<Method>();
diff --git a/tests/android/aidl/tests/permission/IProtected.aidl b/tests/android/aidl/tests/permission/IProtected.aidl
index d2fdba5..2504bc8 100644
--- a/tests/android/aidl/tests/permission/IProtected.aidl
+++ b/tests/android/aidl/tests/permission/IProtected.aidl
@@ -11,5 +11,7 @@
void NonManifestPermission();
// Used by the integration tests to dynamically set permissions that are considered granted.
- @RequiresNoPermission void SetGranted(in List<String> permissions);
+ @RequiresNoPermission void Grant(in String permission);
+ @RequiresNoPermission void Revoke(in String permission);
+ @RequiresNoPermission void RevokeAll();
}
diff --git a/tests/golden_output/aidl-test-fixedsizearray-java-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.java b/tests/golden_output/aidl-test-fixedsizearray-java-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.java
index a04eb16..54e451f 100644
--- a/tests/golden_output/aidl-test-fixedsizearray-java-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.java
+++ b/tests/golden_output/aidl-test-fixedsizearray-java-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.java
@@ -427,13 +427,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
@@ -844,13 +840,9 @@
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
java.lang.String descriptor = DESCRIPTOR;
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java
index a4f89ab..6628a8e 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java
@@ -99,13 +99,9 @@
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
java.lang.String descriptor = DESCRIPTOR;
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
@@ -206,13 +202,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java
index e24b2b4..0bd23dc 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java
@@ -69,13 +69,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IDeprecated.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IDeprecated.java
index d9c1d4b..723f90b 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IDeprecated.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IDeprecated.java
@@ -60,13 +60,9 @@
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
java.lang.String descriptor = DESCRIPTOR;
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java
index 95c3526..e80b1b6 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java
@@ -69,13 +69,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java
index 1fdf120..39f55af 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java
@@ -69,13 +69,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java
index 325fd8f..e8e16ea 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java
@@ -69,13 +69,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java
index 733a502..6110111 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java
@@ -931,13 +931,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
@@ -3993,13 +3989,9 @@
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
java.lang.String descriptor = DESCRIPTOR;
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java
index cb240f4..0599124 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java
@@ -99,13 +99,9 @@
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
java.lang.String descriptor = DESCRIPTOR;
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
@@ -206,13 +202,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/nested/INestedService.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/nested/INestedService.java
index 004f0e3..265146e 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/nested/INestedService.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/nested/INestedService.java
@@ -76,13 +76,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
@@ -287,13 +283,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/INoPermission.java b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/INoPermission.java
index fc65b93..3d96568 100644
--- a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/INoPermission.java
+++ b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/INoPermission.java
@@ -68,13 +68,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtected.java b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtected.java
index 1e10c08..87ddac0 100644
--- a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtected.java
+++ b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtected.java
@@ -20,7 +20,13 @@
{
}
// Used by the integration tests to dynamically set permissions that are considered granted.
- @Override public void SetGranted(java.util.List<java.lang.String> permissions) throws android.os.RemoteException
+ @Override public void Grant(java.lang.String permission) throws android.os.RemoteException
+ {
+ }
+ @Override public void Revoke(java.lang.String permission) throws android.os.RemoteException
+ {
+ }
+ @Override public void RevokeAll() throws android.os.RemoteException
{
}
@Override
@@ -87,9 +93,17 @@
{
return "NonManifestPermission";
}
- case TRANSACTION_SetGranted:
+ case TRANSACTION_Grant:
{
- return "SetGranted";
+ return "Grant";
+ }
+ case TRANSACTION_Revoke:
+ {
+ return "Revoke";
+ }
+ case TRANSACTION_RevokeAll:
+ {
+ return "RevokeAll";
}
default:
{
@@ -108,13 +122,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
@@ -142,12 +152,27 @@
reply.writeNoException();
break;
}
- case TRANSACTION_SetGranted:
+ case TRANSACTION_Grant:
{
- java.util.List<java.lang.String> _arg0;
- _arg0 = data.createStringArrayList();
+ java.lang.String _arg0;
+ _arg0 = data.readString();
data.enforceNoDataAvail();
- this.SetGranted(_arg0);
+ this.Grant(_arg0);
+ reply.writeNoException();
+ break;
+ }
+ case TRANSACTION_Revoke:
+ {
+ java.lang.String _arg0;
+ _arg0 = data.readString();
+ data.enforceNoDataAvail();
+ this.Revoke(_arg0);
+ reply.writeNoException();
+ break;
+ }
+ case TRANSACTION_RevokeAll:
+ {
+ this.RevokeAll();
reply.writeNoException();
break;
}
@@ -230,14 +255,43 @@
}
}
// Used by the integration tests to dynamically set permissions that are considered granted.
- @Override public void SetGranted(java.util.List<java.lang.String> permissions) throws android.os.RemoteException
+ @Override public void Grant(java.lang.String permission) throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
android.os.Parcel _reply = android.os.Parcel.obtain();
try {
_data.writeInterfaceToken(DESCRIPTOR);
- _data.writeStringList(permissions);
- boolean _status = mRemote.transact(Stub.TRANSACTION_SetGranted, _data, _reply, 0);
+ _data.writeString(permission);
+ boolean _status = mRemote.transact(Stub.TRANSACTION_Grant, _data, _reply, 0);
+ _reply.readException();
+ }
+ finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ }
+ @Override public void Revoke(java.lang.String permission) throws android.os.RemoteException
+ {
+ android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
+ android.os.Parcel _reply = android.os.Parcel.obtain();
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(permission);
+ boolean _status = mRemote.transact(Stub.TRANSACTION_Revoke, _data, _reply, 0);
+ _reply.readException();
+ }
+ finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ }
+ @Override public void RevokeAll() throws android.os.RemoteException
+ {
+ android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
+ android.os.Parcel _reply = android.os.Parcel.obtain();
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ boolean _status = mRemote.transact(Stub.TRANSACTION_RevokeAll, _data, _reply, 0);
_reply.readException();
}
finally {
@@ -268,11 +322,13 @@
protected void NonManifestPermission_enforcePermission() throws SecurityException {
mEnforcer.enforcePermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, getCallingPid(), getCallingUid());
}
- static final int TRANSACTION_SetGranted = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4);
+ static final int TRANSACTION_Grant = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4);
+ static final int TRANSACTION_Revoke = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5);
+ static final int TRANSACTION_RevokeAll = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6);
/** @hide */
public int getMaxTransactionId()
{
- return 4;
+ return 6;
}
}
public static final java.lang.String DESCRIPTOR = "android$aidl$tests$permission$IProtected".replace('$', '.');
@@ -286,5 +342,9 @@
public void NonManifestPermission() throws android.os.RemoteException;
// Used by the integration tests to dynamically set permissions that are considered granted.
@android.annotation.RequiresNoPermission
- public void SetGranted(java.util.List<java.lang.String> permissions) throws android.os.RemoteException;
+ public void Grant(java.lang.String permission) throws android.os.RemoteException;
+ @android.annotation.RequiresNoPermission
+ public void Revoke(java.lang.String permission) throws android.os.RemoteException;
+ @android.annotation.RequiresNoPermission
+ public void RevokeAll() throws android.os.RemoteException;
}
diff --git a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtectedInterface.java b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtectedInterface.java
index 5a97ed0..ade2de8 100644
--- a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtectedInterface.java
+++ b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtectedInterface.java
@@ -86,13 +86,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/platform/IProtected.java b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/platform/IProtected.java
index aca8d07..c0e6cf7 100644
--- a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/platform/IProtected.java
+++ b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/platform/IProtected.java
@@ -79,13 +79,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-java-source/gen/android/aidl/versioned/tests/IFooInterface.java b/tests/golden_output/aidl-test-versioned-interface-V1-java-source/gen/android/aidl/versioned/tests/IFooInterface.java
index 7d66241..6dca016 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-java-source/gen/android/aidl/versioned/tests/IFooInterface.java
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-java-source/gen/android/aidl/versioned/tests/IFooInterface.java
@@ -76,25 +76,19 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
- case TRANSACTION_getInterfaceVersion:
- {
- reply.writeNoException();
- reply.writeInt(getInterfaceVersion());
- return true;
- }
- case TRANSACTION_getInterfaceHash:
- {
- reply.writeNoException();
- reply.writeString(getInterfaceHash());
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
+ }
+ else if (code == TRANSACTION_getInterfaceVersion) {
+ reply.writeNoException();
+ reply.writeInt(getInterfaceVersion());
+ return true;
+ }
+ else if (code == TRANSACTION_getInterfaceHash) {
+ reply.writeNoException();
+ reply.writeString(getInterfaceHash());
+ return true;
}
switch (code)
{
diff --git a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java
index c8ab851..c061734 100644
--- a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java
+++ b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java
@@ -69,13 +69,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
@@ -289,13 +285,9 @@
if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
data.enforceInterface(descriptor);
}
- switch (code)
- {
- case INTERFACE_TRANSACTION:
- {
- reply.writeString(descriptor);
- return true;
- }
+ if (code == INTERFACE_TRANSACTION) {
+ reply.writeString(descriptor);
+ return true;
}
switch (code)
{
diff --git a/tests/java/src/android/aidl/permission/service/FakePermissionEnforcer.java b/tests/java/src/android/aidl/permission/service/FakePermissionEnforcer.java
deleted file mode 100644
index f7b694a..0000000
--- a/tests/java/src/android/aidl/permission/service/FakePermissionEnforcer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.aidl.permission.service;
-
-import static android.permission.PermissionManager.PERMISSION_GRANTED;
-import static android.permission.PermissionManager.PERMISSION_HARD_DENIED;
-
-import android.annotation.NonNull;
-import android.content.AttributionSource;
-import java.util.List;
-
-/* Fake for android.os.PermissionEnforcer
- */
-public class FakePermissionEnforcer extends android.os.PermissionEnforcer {
- private List<String> mGranted;
-
- public void setGranted(List<String> granted) { mGranted = granted; }
-
- @Override
- protected int checkPermission(@NonNull String permission, int pid, int uid) {
- if (mGranted != null && mGranted.contains(permission)) {
- return PERMISSION_GRANTED;
- }
- return PERMISSION_HARD_DENIED;
- }
-
- @Override
- protected int checkPermission(@NonNull String permission, @NonNull AttributionSource source) {
- if (mGranted != null && mGranted.contains(permission)) {
- return PERMISSION_GRANTED;
- }
- return PERMISSION_HARD_DENIED;
- }
-}
diff --git a/tests/java/src/android/aidl/permission/service/PermissionTestService.java b/tests/java/src/android/aidl/permission/service/PermissionTestService.java
index b65b5df..f3bb0ce 100644
--- a/tests/java/src/android/aidl/permission/service/PermissionTestService.java
+++ b/tests/java/src/android/aidl/permission/service/PermissionTestService.java
@@ -20,6 +20,7 @@
import android.annotation.EnforcePermission;
import android.os.Binder;
import android.os.ServiceManager;
+import android.os.test.FakePermissionEnforcer;
import java.util.List;
public class PermissionTestService extends IProtected.Stub {
@@ -62,7 +63,17 @@
}
@Override
- public void SetGranted(List<String> permissions) {
- mPermissionEnforcer.setGranted(permissions);
+ public void Grant(String permission) {
+ mPermissionEnforcer.grant(permission);
+ }
+
+ @Override
+ public void Revoke(String permission) {
+ mPermissionEnforcer.revoke(permission);
+ }
+
+ @Override
+ public void RevokeAll() {
+ mPermissionEnforcer.revokeAll();
}
}
diff --git a/tests/java/src/android/aidl/permission/tests/PermissionTests.java b/tests/java/src/android/aidl/permission/tests/PermissionTests.java
index 91a9f42..6eb9035 100644
--- a/tests/java/src/android/aidl/permission/tests/PermissionTests.java
+++ b/tests/java/src/android/aidl/permission/tests/PermissionTests.java
@@ -39,42 +39,48 @@
@Test
public void testProtected() throws Exception {
// Requires READ_PHONE_STATE.
- service.SetGranted(List.of());
assertThrows(SecurityException.class, () -> service.PermissionProtected());
- service.SetGranted(List.of("android.permission.READ_PHONE_STATE"));
+ service.Grant("android.permission.READ_PHONE_STATE");
service.PermissionProtected();
}
@Test
public void testMultiplePermissionsAll() throws Exception {
// Requires INTERNET and VIBRATE.
- service.SetGranted(List.of());
assertThrows(SecurityException.class, () -> service.MultiplePermissionsAll());
- service.SetGranted(List.of("android.permission.INTERNET"));
+
+ service.Grant("android.permission.INTERNET");
assertThrows(SecurityException.class, () -> service.MultiplePermissionsAll());
- service.SetGranted(List.of("android.permission.VIBRATE"));
+ service.RevokeAll();
+
+ service.Grant("android.permission.VIBRATE");
assertThrows(SecurityException.class, () -> service.MultiplePermissionsAll());
- service.SetGranted(List.of("android.permission.INTERNET", "android.permission.VIBRATE"));
+ service.RevokeAll();
+
+ service.Grant("android.permission.INTERNET");
+ service.Grant("android.permission.VIBRATE");
service.MultiplePermissionsAll();
}
@Test
public void testMultiplePermissionsAny() throws Exception {
// Requires INTERNET or VIBRATE.
- service.SetGranted(List.of());
assertThrows(SecurityException.class, () -> service.MultiplePermissionsAny());
- service.SetGranted(List.of("android.permission.INTERNET"));
+
+ service.Grant("android.permission.INTERNET");
service.MultiplePermissionsAny();
- service.SetGranted(List.of("android.permission.VIBRATE"));
+ service.RevokeAll();
+
+ service.Grant("android.permission.VIBRATE");
service.MultiplePermissionsAny();
}
@Test
public void testNonManifestPermission() throws Exception {
// Requires android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK
- service.SetGranted(List.of());
assertThrows(SecurityException.class, () -> service.NonManifestPermission());
- service.SetGranted(List.of("android.permission.MAINLINE_NETWORK_STACK"));
+
+ service.Grant("android.permission.MAINLINE_NETWORK_STACK");
service.NonManifestPermission();
}
diff --git a/tests/java/src/android/aidl/permission/tests/PermissionTestsLocal.java b/tests/java/src/android/aidl/permission/tests/PermissionTestsLocal.java
index 3e3146e..22aa6bd 100644
--- a/tests/java/src/android/aidl/permission/tests/PermissionTestsLocal.java
+++ b/tests/java/src/android/aidl/permission/tests/PermissionTestsLocal.java
@@ -20,10 +20,10 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThrows;
-import android.aidl.permission.service.FakePermissionEnforcer;
import android.aidl.permission.service.PermissionTestService;
import android.aidl.tests.permission.IProtected;
import android.os.RemoteException;
+import android.os.test.FakePermissionEnforcer;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -34,5 +34,6 @@
public void setUp() throws RemoteException {
service = new PermissionTestService(new FakePermissionEnforcer());
assertNotNull(service);
+ service.RevokeAll();
}
}
diff --git a/tests/java/src/android/aidl/permission/tests/PermissionTestsRemote.java b/tests/java/src/android/aidl/permission/tests/PermissionTestsRemote.java
index 5602fe8..0d8620e 100644
--- a/tests/java/src/android/aidl/permission/tests/PermissionTestsRemote.java
+++ b/tests/java/src/android/aidl/permission/tests/PermissionTestsRemote.java
@@ -35,5 +35,6 @@
assertNotNull(binder);
service = IProtected.Stub.asInterface(binder);
assertNotNull(service);
+ service.RevokeAll();
}
}