# keep names that are used by reflection.

# Keep names that are used only by unit tests
-keep class ** {
  *** *ForTest(...);
}

-keepclasseswithmembers class com.android.exchange.adapter.Parser {
  *** resetInput(java.io.InputStream);
}

-keepclasseswithmembers class com.android.exchange.provider.GalResult {
  *** addGalData(com.android.exchange.provider.GalResult$GalData);
  *** addGalData(long, java.lang.String, java.lang.String);
}

-keepclasseswithmembers class com.android.exchange.provider.MailboxUtilities {
  *** setFlagsAndChildrensParentKey(android.content.Context, java.lang.String, java.lang.String);
}
