@@ -30,25 +30,42 @@ class AndroidComponent extends Class {
3030 predicate hasIntentFilter ( ) { exists ( getAndroidComponentXmlElement ( ) .getAnIntentFilterElement ( ) ) }
3131}
3232
33+ /**
34+ * An Android component that can be explicitly or implicitly exported.
35+ */
36+ class ExportableAndroidComponent extends AndroidComponent {
37+ /**
38+ * Holds if this Android component is configured as `exported` or has intent
39+ * filters configured without `exported` explicitly disabled in an
40+ * `AndroidManifest.xml` file.
41+ */
42+ override predicate isExported ( ) {
43+ getAndroidComponentXmlElement ( ) .isExported ( )
44+ or
45+ hasIntentFilter ( ) and
46+ not getAndroidComponentXmlElement ( ) .isNotExported ( )
47+ }
48+ }
49+
3350/** An Android activity. */
34- class AndroidActivity extends AndroidComponent {
51+ class AndroidActivity extends ExportableAndroidComponent {
3552 AndroidActivity ( ) { this .getASupertype * ( ) .hasQualifiedName ( "android.app" , "Activity" ) }
3653}
3754
3855/** An Android service. */
39- class AndroidService extends AndroidComponent {
56+ class AndroidService extends ExportableAndroidComponent {
4057 AndroidService ( ) { this .getASupertype * ( ) .hasQualifiedName ( "android.app" , "Service" ) }
4158}
4259
4360/** An Android broadcast receiver. */
44- class AndroidBroadcastReceiver extends AndroidComponent {
61+ class AndroidBroadcastReceiver extends ExportableAndroidComponent {
4562 AndroidBroadcastReceiver ( ) {
4663 this .getASupertype * ( ) .hasQualifiedName ( "android.content" , "BroadcastReceiver" )
4764 }
4865}
4966
5067/** An Android content provider. */
51- class AndroidContentProvider extends AndroidComponent {
68+ class AndroidContentProvider extends ExportableAndroidComponent {
5269 AndroidContentProvider ( ) {
5370 this .getASupertype * ( ) .hasQualifiedName ( "android.content" , "ContentProvider" )
5471 }
0 commit comments