diff options
author | 2024-11-27 12:03:41 -0800 | |
---|---|---|
committer | 2024-11-27 12:17:08 -0800 | |
commit | b4ed857b7f05fd628865c0ef33be2b17c422b9c4 (patch) | |
tree | f12ab569790c1a69ce429e4fcfeee02eacd05e04 | |
parent | 22113b5fb6c39e684f884b4f787d253896b69f17 (diff) |
[HostStubGen] Now method descriptor is optional in policy files
Originally, I wanted to avoid over-exposing unnecessary methods, so
I made this check strict.
However, policy files are basically for prototyping, and we should prefer
annotations anyway, so the strictness is just unnecessary.
Flag: EXEMPT host test change only
Bug: 292141694
Test: $ANDROID_BUILD_TOP/frameworks/base/ravenwood/scripts/run-ravenwood-tests.sh
Change-Id: I0d7ec4e5f06f048842892c809a8a5646512f6616
5 files changed, 30 insertions, 15 deletions
diff --git a/ravenwood/texts/ravenwood-common-policies.txt b/ravenwood/texts/ravenwood-common-policies.txt index 08f5397730da..83c31512eb70 100644 --- a/ravenwood/texts/ravenwood-common-policies.txt +++ b/ravenwood/texts/ravenwood-common-policies.txt @@ -14,7 +14,7 @@ class :r keepclass # Support APIs not available in standard JRE class java.io.FileDescriptor keep - method getInt$ ()I @com.android.ravenwood.RavenwoodJdkPatch.getInt$ - method setInt$ (I)V @com.android.ravenwood.RavenwoodJdkPatch.setInt$ + method getInt$ @com.android.ravenwood.RavenwoodJdkPatch.getInt$ + method setInt$ @com.android.ravenwood.RavenwoodJdkPatch.setInt$ class java.util.LinkedHashMap keep - method eldest ()Ljava/util/Map$Entry; @com.android.ravenwood.RavenwoodJdkPatch.eldest + method eldest @com.android.ravenwood.RavenwoodJdkPatch.eldest diff --git a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/InMemoryOutputFilter.kt b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/InMemoryOutputFilter.kt index 59fa464a7212..fc885d6f463b 100644 --- a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/InMemoryOutputFilter.kt +++ b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/InMemoryOutputFilter.kt @@ -66,6 +66,9 @@ class InMemoryOutputFilter( methodName: String, descriptor: String ) { + if (descriptor == "*") { + return + } if (classes.findMethod(className, methodName, descriptor) == null) { log.w("Unknown method $className.$methodName$descriptor") } @@ -92,7 +95,8 @@ class InMemoryOutputFilter( descriptor: String, ): FilterPolicyWithReason { return mPolicies[getMethodKey(className, methodName, descriptor)] - ?: super.getPolicyForMethod(className, methodName, descriptor) + ?: mPolicies[getMethodKey(className, methodName, "*")] + ?: super.getPolicyForMethod(className, methodName, descriptor) } fun setPolicyForMethod( @@ -107,7 +111,8 @@ class InMemoryOutputFilter( override fun getRenameTo(className: String, methodName: String, descriptor: String): String? { return mRenames[getMethodKey(className, methodName, descriptor)] - ?: super.getRenameTo(className, methodName, descriptor) + ?: mRenames[getMethodKey(className, methodName, "*")] + ?: super.getRenameTo(className, methodName, descriptor) } fun setRenameTo(className: String, methodName: String, descriptor: String, toName: String) { diff --git a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFileFilterPolicyParser.kt b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFileFilterPolicyParser.kt index caf80ebec0c9..7462a8ce12c5 100644 --- a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFileFilterPolicyParser.kt +++ b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFileFilterPolicyParser.kt @@ -303,12 +303,21 @@ class TextFileFilterPolicyParser( } private fun parseMethod(fields: Array<String>) { - if (fields.size < 4) { - throw ParseException("Method ('m') expects 3 fields.") + if (fields.size < 3 || fields.size > 4) { + throw ParseException("Method ('m') expects 3 or 4 fields.") } val name = fields[1] - val signature = fields[2] - val policy = parsePolicy(fields[3]) + val signature: String + val policyStr: String + if (fields.size <= 3) { + signature = "*" + policyStr = fields[2] + } else { + signature = fields[2] + policyStr = fields[3] + } + + val policy = parsePolicy(policyStr) if (!policy.isUsableWithMethods) { throw ParseException("Method can't have policy '$policy'") @@ -321,7 +330,7 @@ class TextFileFilterPolicyParser( policy.withReason(FILTER_REASON) ) if (policy == FilterPolicy.Substitute) { - val fromName = fields[3].substring(1) + val fromName = policyStr.substring(1) if (fromName == name) { throw ParseException( diff --git a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFilePolicyMethodReplaceFilter.kt b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFilePolicyMethodReplaceFilter.kt index d45f41407a52..a3f934cacc2c 100644 --- a/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFilePolicyMethodReplaceFilter.kt +++ b/ravenwood/tools/hoststubgen/src/com/android/hoststubgen/filters/TextFilePolicyMethodReplaceFilter.kt @@ -48,10 +48,11 @@ class TextFilePolicyMethodReplaceFilter( // Maybe use 'Tri' if we end up having too many replacements. spec.forEach { if (className == it.fromClass && - methodName == it.fromMethod && - descriptor == it.fromDescriptor + methodName == it.fromMethod ) { - return MethodReplaceTarget(it.toClass, it.toMethod) + if (it.fromDescriptor == "*" || descriptor == it.fromDescriptor) { + return MethodReplaceTarget(it.toClass, it.toMethod) + } } } return null diff --git a/ravenwood/tools/hoststubgen/test-tiny-framework/policy-override-tiny-framework.txt b/ravenwood/tools/hoststubgen/test-tiny-framework/policy-override-tiny-framework.txt index 3c138d21b75d..2f35d35d608d 100644 --- a/ravenwood/tools/hoststubgen/test-tiny-framework/policy-override-tiny-framework.txt +++ b/ravenwood/tools/hoststubgen/test-tiny-framework/policy-override-tiny-framework.txt @@ -3,11 +3,11 @@ class com/android/hoststubgen/test/tinyframework/TinyFrameworkForTextPolicy keep # field remove remove # Implicitly remove method <init> ()V keep method addOne (I)I keep - method addOneInner (I)I keep + method addOneInner keep method toBeRemoved (Ljava/lang/String;)V remove method addTwo (I)I @addTwo_host # method addTwo_host (I)I # used as a substitute - method nativeAddThree (I)I @addThree_host + method nativeAddThree @addThree_host # method addThree_host (I)I # used as a substitute method unsupportedMethod ()Ljava/lang/String; throw method visibleButUsesUnsupportedMethod ()Ljava/lang/String; keep |