Skip to content

Deduplicate //attr/@path? #983

Open
Open
@jonpryor

Description

@jonpryor

It's quite common to need to modify multiple attributes on a given element via Metadata. Consider:

Updating ContentProvider.setReadPermission():
https://github.com/xamarin/xamarin-android/blob/d260d035a840dd314ddc7ef194489933a9929794/src/Mono.Android/metadata#L72-L75

Update ActivityInstrumentationTestCase.getActivity():
https://github.com/xamarin/xamarin-android/blob/d260d035a840dd314ddc7ef194489933a9929794/src/Mono.Android/metadata#L223-L224

Update RemoteController.OnClientUpdateListener.onClientPlaybackStateUpdate():
https://github.com/xamarin/xamarin-android/blob/d260d035a840dd314ddc7ef194489933a9929794/src/Mono.Android/metadata#L835-L837

See also #981, in which a plausible fix for IAnnotatedArrayType.AnnotatedOwnerType will require setting both propertyName and managedOverride.

Would it be useful to allow setting multiple attributes as part of one larger element?

For example, instead of:

<attr path="/api/package[@name='java.lang.reflect']/interface[@name='AnnotatedArrayType']/method[@name='getAnnotatedOwnerType' and count(parameter)=0]"
    name="propertyName">IAnnotatedType.AnnotatedOwnerType</attr>
<attr path="/api/package[@name='java.lang.reflect']/interface[@name='AnnotatedArrayType']/method[@name='getAnnotatedOwnerType' and count(parameter)=0]"
    name="managedOverride">abstract</attr>

Have:

<attr path="/api/package[@name='java.lang.reflect']/interface[@name='AnnotatedArrayType']/method[@name='getAnnotatedOwnerType' and count(parameter)=0]">
  <name>propertyName</name><value>IAnnotatedType.AnnotatedOwnerType</value>
  <name>managedOverride</name><value>abstract</value>
</attr>

Or perhaps "commonly suffixed" attribute values?

<attr path="/api/package[@name='java.lang.reflect']/interface[@name='AnnotatedArrayType']/method[@name='getAnnotatedOwnerType' and count(parameter)=0]"
    name1="propertyName" value1="IAnnotatedType.AnnotatedOwnerType"
    name2="managedOverride" value2="abstract"
/>

Would this be at all worthwhile? Is there a better and shorter syntax to consider?

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementProposed change to current functionalitygeneratorIssues binding a Java library (generator, class-parse, etc.)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions