Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrate Kotlin binary compatibility validator. #1120

Merged
merged 7 commits into from Feb 11, 2022

Conversation

pengdev
Copy link
Member

@pengdev pengdev commented Feb 4, 2022

Summary of changes

This PR:

Here's the suggested Workflow:
When starting to validate your library public API, we recommend the following workflow:

  • Preparation phase (one-time action):

    • As the first step, apply the plugin, configure it and execute apiDump.
    • Validate your public API manually.
    • Commit .api files to your VCS.
    • At this moment, default check task will validate public API along with test run and will fail
      the build if API differs.
  • Regular workflow

    • When doing code changes that do not imply any changes in public API, no additional
      actions should be performed. check task on your CI will validate everything.
    • When doing code changes that imply changes in public API, whether it is a new API or
      adjustments in existing one, check task will start to fail. apiDump should be executed manually,
      the resulting diff in .api file should be verified: only signatures you expected to change should be changed.
    • Commit the resulting .api diff along with code changes.

User impact (optional)

Pull request checklist:

  • Briefly describe the changes in this PR.
  • Include before/after visuals or gifs if this PR includes visual changes.
  • Write tests for all new functionality. If tests were not written, please explain why.
  • Optimize code for java consumption (@JvmOverloads, @file:JvmName, etc).
  • Add example if relevant.
  • Document any changes to public APIs.
  • Apply changelog label ('breaking change', 'bug 🪲', 'build', 'docs', 'feature 🍏', 'performance ⚡', 'testing 💯') or use the label 'skip changelog'
  • Add an entry inside this element for inclusion in the mapbox-maps-android changelog: <changelog></changelog>.
  • If this PR is a v10.[version] release branch fix / enhancement, merge it to main firstly and then port to v10.[version] release branch.

Fixes: < Link to related issues that will be fixed by this pull request, if they exist >

PRs must be submitted under the terms of our Contributor License Agreement CLA.

@pengdev pengdev self-assigned this Feb 4, 2022
@pengdev pengdev changed the title Peng binary compatibility validator Integrate binary compatibility validator. Feb 4, 2022
@pengdev pengdev requested a review from tobrun February 4, 2022 15:02
@pengdev pengdev force-pushed the peng-binary-compatibility-validator branch from 88660a2 to da6cb5f Compare February 4, 2022 15:09
@pengdev pengdev force-pushed the peng-binary-compatibility-validator branch from da6cb5f to 8768819 Compare February 4, 2022 15:42
@pengdev
Copy link
Member Author

pengdev commented Feb 4, 2022

A sample output comparing with v10.2.0 release:

* What went wrong:
Execution failed for task ':sdk-base:apiCheck'.
> API check failed for project sdk-base.
  --- /src/sdk-base/api/sdk-base.api
  +++ /src/sdk-base/build/api/sdk-base.api
  @@ -5,6 +5,14 @@
   	public static synthetic fun toCameraOptions$default (Lcom/mapbox/maps/CameraState;Lcom/mapbox/maps/ScreenCoordinate;ILjava/lang/Object;)Lcom/mapbox/maps/CameraOptions;
   }
   
  +public final class com/mapbox/maps/MapboxAnnotationException : java/lang/RuntimeException {
  +	public fun <init> (Ljava/lang/String;)V
  +}
  +
  +public final class com/mapbox/maps/MapboxCameraAnimationException : java/lang/RuntimeException {
  +	public fun <init> (Ljava/lang/String;)V
  +}
  +
   public abstract interface annotation class com/mapbox/maps/MapboxExperimental : java/lang/annotation/Annotation {
   }
   
  @@ -15,6 +23,22 @@
   	public abstract fun onStop ()V
   }
   
  +public final class com/mapbox/maps/MapboxLocationComponentException : java/lang/RuntimeException {
  +	public fun <init> (Ljava/lang/String;)V
  +}
  +
  +public final class com/mapbox/maps/MapboxMapException : java/lang/RuntimeException {
  +	public fun <init> (Ljava/lang/String;)V
  +}
  +
  +public final class com/mapbox/maps/MapboxStyleException : java/lang/RuntimeException {
  +	public fun <init> (Ljava/lang/String;)V
  +}
  +
  +public final class com/mapbox/maps/MapboxViewAnnotationException : java/lang/RuntimeException {
  +	public fun <init> (Ljava/lang/String;)V
  +}
  +
   public final class com/mapbox/maps/base/BuildConfig {
   	public static final field BUILD_TYPE Ljava/lang/String;
   	public static final field DEBUG Z
  @@ -302,6 +326,7 @@
   	public static final field FILE_SYSTEM Lcom/mapbox/maps/extension/observable/model/DataSourceType;
   	public static final field NETWORK Lcom/mapbox/maps/extension/observable/model/DataSourceType;
   	public static final field RESOURCE_LOADER Lcom/mapbox/maps/extension/observable/model/DataSourceType;
  +	public final fun getValue ()Ljava/lang/String;
   	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/extension/observable/model/DataSourceType;
   	public static fun values ()[Lcom/mapbox/maps/extension/observable/model/DataSourceType;
   }
  @@ -325,6 +350,7 @@
   	public static final field SPRITE Lcom/mapbox/maps/extension/observable/model/MapLoadErrorType;
   	public static final field STYLE Lcom/mapbox/maps/extension/observable/model/MapLoadErrorType;
   	public static final field TILE Lcom/mapbox/maps/extension/observable/model/MapLoadErrorType;
  +	public final fun getValue ()Ljava/lang/String;
   	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/extension/observable/model/MapLoadErrorType;
   	public static fun values ()[Lcom/mapbox/maps/extension/observable/model/MapLoadErrorType;
   }
  @@ -332,6 +358,7 @@
   public final class com/mapbox/maps/extension/observable/model/RenderMode : java/lang/Enum {
   	public static final field FULL Lcom/mapbox/maps/extension/observable/model/RenderMode;
   	public static final field PARTIAL Lcom/mapbox/maps/extension/observable/model/RenderMode;
  +	public final fun getValue ()Ljava/lang/String;
   	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/extension/observable/model/RenderMode;
   	public static fun values ()[Lcom/mapbox/maps/extension/observable/model/RenderMode;
   }
  @@ -356,6 +383,7 @@
   public final class com/mapbox/maps/extension/observable/model/RequestPriority : java/lang/Enum {
   	public static final field LOW Lcom/mapbox/maps/extension/observable/model/RequestPriority;
   	public static final field REGULAR Lcom/mapbox/maps/extension/observable/model/RequestPriority;
  +	public final fun getValue ()Ljava/lang/String;
   	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/extension/observable/model/RequestPriority;
   	public static fun values ()[Lcom/mapbox/maps/extension/observable/model/RequestPriority;
   }
  @@ -369,6 +397,7 @@
   	public static final field STYLE Lcom/mapbox/maps/extension/observable/model/RequestType;
   	public static final field TILE Lcom/mapbox/maps/extension/observable/model/RequestType;
   	public static final field UNKNOWN Lcom/mapbox/maps/extension/observable/model/RequestType;
  +	public final fun getValue ()Ljava/lang/String;
   	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/extension/observable/model/RequestType;
   	public static fun values ()[Lcom/mapbox/maps/extension/observable/model/RequestType;
   }
  @@ -408,6 +437,7 @@
   	public static final field RATE_LIMIT Lcom/mapbox/maps/extension/observable/model/ResponseErrorReason;
   	public static final field SERVER Lcom/mapbox/maps/extension/observable/model/ResponseErrorReason;
   	public static final field SUCCESS Lcom/mapbox/maps/extension/observable/model/ResponseErrorReason;
  +	public final fun getValue ()Ljava/lang/String;
   	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/extension/observable/model/ResponseErrorReason;
   	public static fun values ()[Lcom/mapbox/maps/extension/observable/model/ResponseErrorReason;
   }
  @@ -417,6 +447,7 @@
   	public static final field LOCAL_FILE Lcom/mapbox/maps/extension/observable/model/ResponseSourceType;
   	public static final field NETWORK Lcom/mapbox/maps/extension/observable/model/ResponseSourceType;
   	public static final field TILE_STORE Lcom/mapbox/maps/extension/observable/model/ResponseSourceType;
  +	public final fun getValue ()Ljava/lang/String;
   	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/extension/observable/model/ResponseSourceType;
   	public static fun values ()[Lcom/mapbox/maps/extension/observable/model/ResponseSourceType;
   }
  @@ -424,6 +455,7 @@
   public final class com/mapbox/maps/extension/observable/model/SourceDataType : java/lang/Enum {
   	public static final field METADATA Lcom/mapbox/maps/extension/observable/model/SourceDataType;
   	public static final field TILE Lcom/mapbox/maps/extension/observable/model/SourceDataType;
  +	public final fun getValue ()Ljava/lang/String;
   	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/extension/observable/model/SourceDataType;
   	public static fun values ()[Lcom/mapbox/maps/extension/observable/model/SourceDataType;
   }
  @@ -432,6 +464,7 @@
   	public static final field SOURCES Lcom/mapbox/maps/extension/observable/model/StyleDataType;
   	public static final field SPRITE Lcom/mapbox/maps/extension/observable/model/StyleDataType;
   	public static final field STYLE Lcom/mapbox/maps/extension/observable/model/StyleDataType;
  +	public final fun getValue ()Ljava/lang/String;
   	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/extension/observable/model/StyleDataType;
   	public static fun values ()[Lcom/mapbox/maps/extension/observable/model/StyleDataType;
   }
  @@ -648,6 +681,7 @@
   	public static final field MAPBOX_LOGO_PLUGIN_ID Ljava/lang/String;
   	public static final field MAPBOX_MAP_OVERLAY_PLUGIN_ID Ljava/lang/String;
   	public static final field MAPBOX_SCALEBAR_PLUGIN_ID Ljava/lang/String;
  +	public static final field MAPBOX_VIEWPORT_PLUGIN_ID Ljava/lang/String;
   	public synthetic fun <init> (Ljava/lang/String;Lcom/mapbox/maps/plugin/MapPlugin;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
   	public fun equals (Ljava/lang/Object;)Z
   	public final fun getId ()Ljava/lang/String;
  @@ -667,6 +701,14 @@
   	public fun <init> (Ljava/lang/String;)V
   }
   
  +public final class com/mapbox/maps/plugin/PuckBearingSource : java/lang/Enum {
  +	public static final field COURSE Lcom/mapbox/maps/plugin/PuckBearingSource;
  +	public static final field HEADING Lcom/mapbox/maps/plugin/PuckBearingSource;
  +	public final fun getValue ()Ljava/lang/String;
  +	public static fun valueOf (Ljava/lang/String;)Lcom/mapbox/maps/plugin/PuckBearingSource;
  +	public static fun values ()[Lcom/mapbox/maps/plugin/PuckBearingSource;
  +}
  +
   public final class com/mapbox/maps/plugin/ScrollMode : java/lang/Enum {
   	public static final field HORIZONTAL Lcom/mapbox/maps/plugin/ScrollMode;
   	public static final field HORIZONTAL_AND_VERTICAL Lcom/mapbox/maps/plugin/ScrollMode;
  @@ -817,12 +859,13 @@
   
   public final class com/mapbox/maps/plugin/animation/MapAnimationOptions {
   	public static final field Companion Lcom/mapbox/maps/plugin/animation/MapAnimationOptions$Companion;
  -	public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Long;Landroid/animation/TimeInterpolator;Landroid/animation/Animator$AnimatorListener;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
  +	public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Landroid/animation/TimeInterpolator;Landroid/animation/Animator$AnimatorListener;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
   	public fun equals (Ljava/lang/Object;)Z
   	public final fun getAnimatorListener ()Landroid/animation/Animator$AnimatorListener;
   	public final fun getDuration ()Ljava/lang/Long;
   	public final fun getInterpolator ()Landroid/animation/TimeInterpolator;
   	public final fun getOwner ()Ljava/lang/String;
  +	public final fun getStartDelay ()Ljava/lang/Long;
   	public fun hashCode ()I
   }
   
  @@ -833,6 +876,7 @@
   	public final fun duration (J)Lcom/mapbox/maps/plugin/animation/MapAnimationOptions$Builder;
   	public final fun interpolator (Landroid/animation/TimeInterpolator;)Lcom/mapbox/maps/plugin/animation/MapAnimationOptions$Builder;
   	public final fun owner (Ljava/lang/String;)Lcom/mapbox/maps/plugin/animation/MapAnimationOptions$Builder;
  +	public final fun startDelay (J)Lcom/mapbox/maps/plugin/animation/MapAnimationOptions$Builder;
   }
   
   public final class com/mapbox/maps/plugin/animation/MapAnimationOptions$Companion {
  @@ -854,6 +898,7 @@
   	public static final field MIN_MERCATOR_LATITUDE D
   	public fun <init> (JLcom/google/gson/JsonObject;Lcom/mapbox/geojson/Geometry;)V
   	public fun getData ()Lcom/google/gson/JsonElement;
  +	public final fun getFeatureIdentifier ()Ljava/lang/String;
   	public final fun getGeometry ()Lcom/mapbox/geojson/Geometry;
   	public final fun getId ()J
   	protected final fun getJsonObject ()Lcom/google/gson/JsonObject;
  @@ -1820,7 +1865,8 @@
   	public fun <init> (ZZIFLcom/mapbox/maps/plugin/LocationPuck;)V
   	public fun <init> (ZZIFLjava/lang/String;Lcom/mapbox/maps/plugin/LocationPuck;)V
   	public fun <init> (ZZIFLjava/lang/String;Ljava/lang/String;Lcom/mapbox/maps/plugin/LocationPuck;)V
  -	public synthetic fun <init> (ZZIFLjava/lang/String;Ljava/lang/String;Lcom/mapbox/maps/plugin/LocationPuck;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
  +	public fun <init> (ZZIFLjava/lang/String;Ljava/lang/String;Lcom/mapbox/maps/plugin/PuckBearingSource;Lcom/mapbox/maps/plugin/LocationPuck;)V
  +	public synthetic fun <init> (ZZIFLjava/lang/String;Ljava/lang/String;Lcom/mapbox/maps/plugin/PuckBearingSource;Lcom/mapbox/maps/plugin/LocationPuck;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
   	public fun <init> (ZZILcom/mapbox/maps/plugin/LocationPuck;)V
   	public fun <init> (ZZLcom/mapbox/maps/plugin/LocationPuck;)V
   	public final fun component1 ()Z
  @@ -1829,14 +1875,16 @@
   	public final fun component4 ()F
   	public final fun component5 ()Ljava/lang/String;
   	public final fun component6 ()Ljava/lang/String;
  -	public final fun component7 ()Lcom/mapbox/maps/plugin/LocationPuck;
  -	public final fun copy (ZZIFLjava/lang/String;Ljava/lang/String;Lcom/mapbox/maps/plugin/LocationPuck;)Lcom/mapbox/maps/plugin/locationcomponent/generated/LocationComponentSettings;
  -	public static synthetic fun copy$default (Lcom/mapbox/maps/plugin/locationcomponent/generated/LocationComponentSettings;ZZIFLjava/lang/String;Ljava/lang/String;Lcom/mapbox/maps/plugin/LocationPuck;ILjava/lang/Object;)Lcom/mapbox/maps/plugin/locationcomponent/generated/LocationComponentSettings;
  +	public final fun component7 ()Lcom/mapbox/maps/plugin/PuckBearingSource;
  +	public final fun component8 ()Lcom/mapbox/maps/plugin/LocationPuck;
  +	public final fun copy (ZZIFLjava/lang/String;Ljava/lang/String;Lcom/mapbox/maps/plugin/PuckBearingSource;Lcom/mapbox/maps/plugin/LocationPuck;)Lcom/mapbox/maps/plugin/locationcomponent/generated/LocationComponentSettings;
  +	public static synthetic fun copy$default (Lcom/mapbox/maps/plugin/locationcomponent/generated/LocationComponentSettings;ZZIFLjava/lang/String;Ljava/lang/String;Lcom/mapbox/maps/plugin/PuckBearingSource;Lcom/mapbox/maps/plugin/LocationPuck;ILjava/lang/Object;)Lcom/mapbox/maps/plugin/locationcomponent/generated/LocationComponentSettings;
   	public fun equals (Ljava/lang/Object;)Z
   	public final fun getEnabled ()Z
   	public final fun getLayerAbove ()Ljava/lang/String;
   	public final fun getLayerBelow ()Ljava/lang/String;
   	public final fun getLocationPuck ()Lcom/mapbox/maps/plugin/LocationPuck;
  +	public final fun getPuckBearingSource ()Lcom/mapbox/maps/plugin/PuckBearingSource;
   	public final fun getPulsingColor ()I
   	public final fun getPulsingEnabled ()Z
   	public final fun getPulsingMaxRadius ()F
  @@ -1845,6 +1893,7 @@
   	public final fun setLayerAbove (Ljava/lang/String;)V
   	public final fun setLayerBelow (Ljava/lang/String;)V
   	public final fun setLocationPuck (Lcom/mapbox/maps/plugin/LocationPuck;)V
  +	public final fun setPuckBearingSource (Lcom/mapbox/maps/plugin/PuckBearingSource;)V
   	public final fun setPulsingColor (I)V
   	public final fun setPulsingEnabled (Z)V
   	public final fun setPulsingMaxRadius (F)V
  @@ -1859,6 +1908,7 @@
   	public fun getLayerAbove ()Ljava/lang/String;
   	public fun getLayerBelow ()Ljava/lang/String;
   	public fun getLocationPuck ()Lcom/mapbox/maps/plugin/LocationPuck;
  +	public fun getPuckBearingSource ()Lcom/mapbox/maps/plugin/PuckBearingSource;
   	public fun getPulsingColor ()I
   	public fun getPulsingEnabled ()Z
   	public fun getPulsingMaxRadius ()F
  @@ -1868,6 +1918,7 @@
   	public fun setLayerAbove (Ljava/lang/String;)V
   	public fun setLayerBelow (Ljava/lang/String;)V
   	public fun setLocationPuck (Lcom/mapbox/maps/plugin/LocationPuck;)V
  +	public fun setPuckBearingSource (Lcom/mapbox/maps/plugin/PuckBearingSource;)V
   	public fun setPulsingColor (I)V
   	public fun setPulsingEnabled (Z)V
   	public fun setPulsingMaxRadius (F)V
  @@ -1879,6 +1930,7 @@
   	public abstract fun getLayerAbove ()Ljava/lang/String;
   	public abstract fun getLayerBelow ()Ljava/lang/String;
   	public abstract fun getLocationPuck ()Lcom/mapbox/maps/plugin/LocationPuck;
  +	public abstract fun getPuckBearingSource ()Lcom/mapbox/maps/plugin/PuckBearingSource;
   	public abstract fun getPulsingColor ()I
   	public abstract fun getPulsingEnabled ()Z
   	public abstract fun getPulsingMaxRadius ()F
  @@ -1887,6 +1939,7 @@
   	public abstract fun setLayerAbove (Ljava/lang/String;)V
   	public abstract fun setLayerBelow (Ljava/lang/String;)V
   	public abstract fun setLocationPuck (Lcom/mapbox/maps/plugin/LocationPuck;)V
  +	public abstract fun setPuckBearingSource (Lcom/mapbox/maps/plugin/PuckBearingSource;)V
   	public abstract fun setPulsingColor (I)V
   	public abstract fun setPulsingEnabled (Z)V
   	public abstract fun setPulsingMaxRadius (F)V
  @@ -2216,6 +2269,214 @@
   	public abstract fun updateSettings (Lkotlin/jvm/functions/Function1;)V
   }
   
  +public abstract interface class com/mapbox/maps/plugin/viewport/CompletionListener {
  +	public abstract fun onComplete (Z)V
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/ViewportConstantsKt {
  +	public static final field DEFAULT_FOLLOW_PUCK_VIEWPORT_STATE_PITCH D
  +	public static final field DEFAULT_FOLLOW_PUCK_VIEWPORT_STATE_ZOOM D
  +	public static final field DEFAULT_STATE_ANIMATION_DURATION_MS J
  +	public static final field DEFAULT_TRANSITION_MAX_DURATION_MS J
  +}
  +
  +public abstract interface class com/mapbox/maps/plugin/viewport/ViewportPlugin : com/mapbox/maps/plugin/MapPlugin {
  +	public abstract fun addStatusObserver (Lcom/mapbox/maps/plugin/viewport/ViewportStatusObserver;)V
  +	public abstract fun getDefaultTransition ()Lcom/mapbox/maps/plugin/viewport/transition/ViewportTransition;
  +	public abstract fun getOptions ()Lcom/mapbox/maps/plugin/viewport/data/ViewportOptions;
  +	public abstract fun getStatus ()Lcom/mapbox/maps/plugin/viewport/ViewportStatus;
  +	public abstract fun idle ()V
  +	public abstract fun makeDefaultViewportTransition (Lcom/mapbox/maps/plugin/viewport/data/DefaultViewportTransitionOptions;)Lcom/mapbox/maps/plugin/viewport/transition/DefaultViewportTransition;
  +	public abstract fun makeFollowPuckViewportState (Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions;)Lcom/mapbox/maps/plugin/viewport/state/FollowPuckViewportState;
  +	public abstract fun makeImmediateViewportTransition ()Lcom/mapbox/maps/plugin/viewport/transition/ViewportTransition;
  +	public abstract fun makeOverviewViewportState (Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions;)Lcom/mapbox/maps/plugin/viewport/state/OverviewViewportState;
  +	public abstract fun removeStatusObserver (Lcom/mapbox/maps/plugin/viewport/ViewportStatusObserver;)V
  +	public abstract fun setDefaultTransition (Lcom/mapbox/maps/plugin/viewport/transition/ViewportTransition;)V
  +	public abstract fun setOptions (Lcom/mapbox/maps/plugin/viewport/data/ViewportOptions;)V
  +	public abstract fun transitionTo (Lcom/mapbox/maps/plugin/viewport/state/ViewportState;Lcom/mapbox/maps/plugin/viewport/transition/ViewportTransition;Lcom/mapbox/maps/plugin/viewport/CompletionListener;)V
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/ViewportPlugin$DefaultImpls {
  +	public static fun cleanup (Lcom/mapbox/maps/plugin/viewport/ViewportPlugin;)V
  +	public static fun initialize (Lcom/mapbox/maps/plugin/viewport/ViewportPlugin;)V
  +	public static synthetic fun makeDefaultViewportTransition$default (Lcom/mapbox/maps/plugin/viewport/ViewportPlugin;Lcom/mapbox/maps/plugin/viewport/data/DefaultViewportTransitionOptions;ILjava/lang/Object;)Lcom/mapbox/maps/plugin/viewport/transition/DefaultViewportTransition;
  +	public static synthetic fun makeFollowPuckViewportState$default (Lcom/mapbox/maps/plugin/viewport/ViewportPlugin;Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions;ILjava/lang/Object;)Lcom/mapbox/maps/plugin/viewport/state/FollowPuckViewportState;
  +	public static fun onDelegateProvider (Lcom/mapbox/maps/plugin/viewport/ViewportPlugin;Lcom/mapbox/maps/plugin/delegates/MapDelegateProvider;)V
  +	public static synthetic fun transitionTo$default (Lcom/mapbox/maps/plugin/viewport/ViewportPlugin;Lcom/mapbox/maps/plugin/viewport/state/ViewportState;Lcom/mapbox/maps/plugin/viewport/transition/ViewportTransition;Lcom/mapbox/maps/plugin/viewport/CompletionListener;ILjava/lang/Object;)V
  +}
  +
  +public abstract class com/mapbox/maps/plugin/viewport/ViewportStatus {
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/ViewportStatus$Idle : com/mapbox/maps/plugin/viewport/ViewportStatus {
  +	public static final field INSTANCE Lcom/mapbox/maps/plugin/viewport/ViewportStatus$Idle;
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/ViewportStatus$State : com/mapbox/maps/plugin/viewport/ViewportStatus {
  +	public fun <init> (Lcom/mapbox/maps/plugin/viewport/state/ViewportState;)V
  +	public fun equals (Ljava/lang/Object;)Z
  +	public final fun getState ()Lcom/mapbox/maps/plugin/viewport/state/ViewportState;
  +	public fun hashCode ()I
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/ViewportStatus$Transition : com/mapbox/maps/plugin/viewport/ViewportStatus {
  +	public fun <init> (Lcom/mapbox/maps/plugin/viewport/transition/ViewportTransition;Lcom/mapbox/maps/plugin/viewport/state/ViewportState;)V
  +	public fun equals (Ljava/lang/Object;)Z
  +	public final fun getToState ()Lcom/mapbox/maps/plugin/viewport/state/ViewportState;
  +	public final fun getTransition ()Lcom/mapbox/maps/plugin/viewport/transition/ViewportTransition;
  +	public fun hashCode ()I
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public abstract interface class com/mapbox/maps/plugin/viewport/ViewportStatusObserver {
  +	public abstract fun onViewportStatusChanged (Lcom/mapbox/maps/plugin/viewport/ViewportStatus;Lcom/mapbox/maps/plugin/viewport/ViewportStatus;Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;)V
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/DefaultViewportTransitionOptions {
  +	public synthetic fun <init> (JLkotlin/jvm/internal/DefaultConstructorMarker;)V
  +	public fun equals (Ljava/lang/Object;)Z
  +	public final fun getMaxDurationMs ()J
  +	public fun hashCode ()I
  +	public final fun toBuilder ()Lcom/mapbox/maps/plugin/viewport/data/DefaultViewportTransitionOptions$Builder;
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/DefaultViewportTransitionOptions$Builder {
  +	public fun <init> ()V
  +	public final fun build ()Lcom/mapbox/maps/plugin/viewport/data/DefaultViewportTransitionOptions;
  +	public final fun maxDurationMs (J)Lcom/mapbox/maps/plugin/viewport/data/DefaultViewportTransitionOptions$Builder;
  +}
  +
  +public abstract class com/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateBearing {
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateBearing$Constant : com/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateBearing {
  +	public fun <init> (D)V
  +	public fun equals (Ljava/lang/Object;)Z
  +	public final fun getBearing ()D
  +	public fun hashCode ()I
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateBearing$SyncWithLocationPuck : com/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateBearing {
  +	public static final field INSTANCE Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateBearing$SyncWithLocationPuck;
  +	public fun equals (Ljava/lang/Object;)Z
  +	public fun hashCode ()I
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions {
  +	public synthetic fun <init> (Lcom/mapbox/maps/EdgeInsets;Ljava/lang/Double;Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateBearing;Ljava/lang/Double;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
  +	public fun equals (Ljava/lang/Object;)Z
  +	public final fun getAnimationDurationMs ()J
  +	public final fun getBearing ()Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateBearing;
  +	public final fun getPadding ()Lcom/mapbox/maps/EdgeInsets;
  +	public final fun getPitch ()Ljava/lang/Double;
  +	public final fun getZoom ()Ljava/lang/Double;
  +	public fun hashCode ()I
  +	public final fun toBuilder ()Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions$Builder;
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions$Builder {
  +	public fun <init> ()V
  +	public final fun animationDurationMs (J)Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions$Builder;
  +	public final fun bearing (Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateBearing;)Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions$Builder;
  +	public final fun build ()Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions;
  +	public final fun padding (Lcom/mapbox/maps/EdgeInsets;)Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions$Builder;
  +	public final fun pitch (Ljava/lang/Double;)Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions$Builder;
  +	public final fun zoom (Ljava/lang/Double;)Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions$Builder;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions {
  +	public synthetic fun <init> (Lcom/mapbox/geojson/Geometry;Lcom/mapbox/maps/EdgeInsets;Ljava/lang/Double;Ljava/lang/Double;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
  +	public fun equals (Ljava/lang/Object;)Z
  +	public final fun getAnimationDurationMs ()J
  +	public final fun getBearing ()Ljava/lang/Double;
  +	public final fun getGeometry ()Lcom/mapbox/geojson/Geometry;
  +	public final fun getPadding ()Lcom/mapbox/maps/EdgeInsets;
  +	public final fun getPitch ()Ljava/lang/Double;
  +	public fun hashCode ()I
  +	public final fun toBuilder ()Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions$Builder;
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions$Builder {
  +	public fun <init> ()V
  +	public final fun animationDurationMs (J)Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions$Builder;
  +	public final fun bearing (Ljava/lang/Double;)Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions$Builder;
  +	public final fun build ()Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions;
  +	public final fun geometry (Lcom/mapbox/geojson/Geometry;)Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions$Builder;
  +	public final fun padding (Lcom/mapbox/maps/EdgeInsets;)Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions$Builder;
  +	public final fun pitch (Ljava/lang/Double;)Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions$Builder;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/ViewportOptions {
  +	public synthetic fun <init> (ZLkotlin/jvm/internal/DefaultConstructorMarker;)V
  +	public fun equals (Ljava/lang/Object;)Z
  +	public final fun getTransitionsToIdleUponUserInteraction ()Z
  +	public fun hashCode ()I
  +	public final fun toBuilder ()Lcom/mapbox/maps/plugin/viewport/data/ViewportOptions$Builder;
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/ViewportOptions$Builder {
  +	public fun <init> ()V
  +	public final fun build ()Lcom/mapbox/maps/plugin/viewport/data/ViewportOptions;
  +	public final fun transitionsToIdleUponUserInteraction (Z)Lcom/mapbox/maps/plugin/viewport/data/ViewportOptions$Builder;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason {
  +	public static final field Companion Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason$Companion;
  +	public fun equals (Ljava/lang/Object;)Z
  +	public static final fun getIDLE_REQUESTED ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +	public static final fun getTRANSITION_FAILED ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +	public static final fun getTRANSITION_STARTED ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +	public static final fun getTRANSITION_SUCCEEDED ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +	public static final fun getUSER_INTERACTION ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +	public fun hashCode ()I
  +	public fun toString ()Ljava/lang/String;
  +}
  +
  +public final class com/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason$Companion {
  +	public final fun getIDLE_REQUESTED ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +	public final fun getTRANSITION_FAILED ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +	public final fun getTRANSITION_STARTED ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +	public final fun getTRANSITION_SUCCEEDED ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +	public final fun getUSER_INTERACTION ()Lcom/mapbox/maps/plugin/viewport/data/ViewportStatusChangeReason;
  +}
  +
  +public abstract interface class com/mapbox/maps/plugin/viewport/state/FollowPuckViewportState : com/mapbox/maps/plugin/viewport/state/ViewportState {
  +	public abstract fun getOptions ()Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions;
  +	public abstract fun setOptions (Lcom/mapbox/maps/plugin/viewport/data/FollowPuckViewportStateOptions;)V
  +}
  +
  +public abstract interface class com/mapbox/maps/plugin/viewport/state/OverviewViewportState : com/mapbox/maps/plugin/viewport/state/ViewportState {
  +	public abstract fun getOptions ()Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions;
  +	public abstract fun setOptions (Lcom/mapbox/maps/plugin/viewport/data/OverviewViewportStateOptions;)V
  +}
  +
  +public abstract interface class com/mapbox/maps/plugin/viewport/state/ViewportState {
  +	public abstract fun observeDataSource (Lcom/mapbox/maps/plugin/viewport/state/ViewportStateDataObserver;)Lcom/mapbox/maps/plugin/animation/Cancelable;
  +	public abstract fun startUpdatingCamera ()V
  +	public abstract fun stopUpdatingCamera ()V
  +}
  +
  +public abstract interface class com/mapbox/maps/plugin/viewport/state/ViewportStateDataObserver {
  +	public abstract fun onNewData (Lcom/mapbox/maps/CameraOptions;)Z
  +}
  +
  +public abstract interface class com/mapbox/maps/plugin/viewport/transition/DefaultViewportTransition : com/mapbox/maps/plugin/viewport/transition/ViewportTransition {
  +	public abstract fun getOptions ()Lcom/mapbox/maps/plugin/viewport/data/DefaultViewportTransitionOptions;
  +	public abstract fun setOptions (Lcom/mapbox/maps/plugin/viewport/data/DefaultViewportTransitionOptions;)V
  +}
  +
  +public abstract interface class com/mapbox/maps/plugin/viewport/transition/ViewportTransition {
  +	public abstract fun run (Lcom/mapbox/maps/plugin/viewport/state/ViewportState;Lcom/mapbox/maps/plugin/viewport/CompletionListener;)Lcom/mapbox/maps/plugin/animation/Cancelable;
  +}
  +
   public final class com/mapbox/maps/util/MathUtils {
   	public static final field INSTANCE Lcom/mapbox/maps/util/MathUtils;
   	public final fun prepareOptimalBearingPath ([D)[D
  
   You can run :sdk-base:apiDump task to overwrite API declarations

@pengdev pengdev marked this pull request as ready for review February 8, 2022 11:01
@pengdev pengdev requested a review from a team as a code owner February 8, 2022 11:01
@kiryldz
Copy link
Contributor

kiryldz commented Feb 8, 2022

@pengdev several q:

  1. At least for me it seems I do understand how this works - do we actually need then both verify-api and verify-binary-compatibility?
  2. I guess it's better to add Workflow from PR description to some readme - we will have breaking changes for sure even if we expose additional method on MapInterface so having those steps documented somewhere sounds logical to me. Perhaps we could even add a new checkbox to update dependency template as only those PRs could bring in binary incompatible changes that are treated more like bugs (interfaces like MapInterface should and will be not exposed at some point).
  3. I see new check is failing now - is this expected because .api files are not committed yet?

@pengdev pengdev force-pushed the peng-binary-compatibility-validator branch from 8768819 to ba13c41 Compare February 8, 2022 11:33
@pengdev
Copy link
Member Author

pengdev commented Feb 8, 2022

  1. At least for me it seems I do understand how this works - do we actually need then both verify-api and verify-binary-compatibility?

verify-api uses revapi under the hood, which is a API validator for Java APIs, and it doesn't filter out Kotlin internal classes. with Koltin.
verify-binary-compatibility uses Kotlin's binary compatibility validator, which takes Kotlin specific metadata into consideration, and is more suitable to validate the Kotlin public APIs.
Imo, we should keep track of both Java and Kotlin API compatibility.

  1. I guess it's better to add Workflow from PR description to some readme - we will have breaking changes for sure even if we expose additional method on MapInterface so having those steps documented somewhere sounds logical to me. Perhaps we could even add a new checkbox to update dependency template as only those PRs could bring in binary incompatible changes that are treated more like bugs (interfaces like MapInterface should and will be not exposed at some point).

sounds good to me, will add the workflow to the PR templates.

  1. I see new check is failing now - is this expected because .api files are not committed yet?

I just added the api files for v10.2.0 release tag, to get a sense on how the bot works. Just updated the api files to match the latest codebase.

@pengdev pengdev changed the title Integrate binary compatibility validator. Integrate Kotlin binary compatibility validator. Feb 8, 2022
@pengdev pengdev force-pushed the peng-binary-compatibility-validator branch from cb68bf9 to cc56e60 Compare February 9, 2022 17:18
@@ -23,6 +23,9 @@ workflows:
- verify-docs:
requires:
- verify-code
- verify-kotlin-binary-compatibility:
requires:
- verify-code
- verify-api:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we remove verify-api?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think verify-api is a good indicator on reporting major/breaking changes, the binary compatibility validator and metalava doesn't report breaking changes automatically.

@yunikkk
Copy link
Contributor

yunikkk commented Feb 11, 2022

verify-api uses revapi under the hood, which is a API validator for Java APIs, and it doesn't filter out Kotlin internal classes. with Koltin.
verify-binary-compatibility uses Kotlin's binary compatibility validator, which takes Kotlin specific metadata into consideration, and is more suitable to validate the Kotlin public APIs.
Imo, we should keep track of both Java and Kotlin API compatibility.

IMO naming is a bit confusing, both api / binary compatibility mean similar things and it's not clear how are these checks different. WDYT about renaming, for example might be :

  • verify-api-metalava
  • verify-api-kotlin-binary-checker
  • verify-api-revapi

@yunikkk
Copy link
Contributor

yunikkk commented Feb 11, 2022

When doing code changes that imply changes in public API, whether it is a new API or
adjustments in existing one, check task will start to fail. apiDump should be executed manually,
the resulting diff in .api file should be verified: only signatures you expected to change should be changed.

So, it's manual step, right? Sadly =\

@pengdev
Copy link
Member Author

pengdev commented Feb 11, 2022

So, it's manual step, right? Sadly =\

yes, it's a manual step, but I will try to make a simple MakeFile config to do the api file update.

@pengdev pengdev merged commit 56bf409 into main Feb 11, 2022
@pengdev pengdev deleted the peng-binary-compatibility-validator branch February 11, 2022 13:45
@pengdev
Copy link
Member Author

pengdev commented Feb 11, 2022

IMO naming is a bit confusing, both api / binary compatibility mean similar things and it's not clear how are these checks different. WDYT about renaming, for example might be :

verify-api-metalava
verify-api-kotlin-binary-checker
verify-api-revapi

Sounds good to me, I will address it in follow-up PR when introducing metalava

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants