Skip to content

Commit 6b1571a

Browse files
authored
Merge pull request #550 from splendo/feature/api-validation
Api Validation, Explicit API Mode & Linting
2 parents a0599d7 + b72a3cf commit 6b1571a

File tree

287 files changed

+8577
-3871
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

287 files changed

+8577
-3871
lines changed

.editorconfig

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
root = true
2+
3+
[*.{kt,kts}]
4+
ktlint_code_style = intellij_idea
5+
ktlint_ignore_back_ticked_identifier = true
6+
7+
ktlint_standard = enabled
8+
ktlint_standard_no-wildcard-imports = disabled
9+
ktlint_standard_filename = disabled
10+
ktlint_standard_import-ordering = disabled
11+
ktlint_standard_function-naming = disabled
12+
13+
ktlint_experimental = disabled
14+

.github/workflows/pull_request.yml

+4
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ jobs:
9797
key: cocoapods-cache-v2
9898
- name: Setup test environment
9999
uses: ./.github/actions/setup_test_action
100+
- name: ktLint
101+
run: ./gradlew lintKotlin
100102
- name: Run iOS Tests
101103
run: ./gradlew cleanTest iosSimulatorArm64Test
102104
- name: Upload iOS test artifact
@@ -118,6 +120,8 @@ jobs:
118120
- name: Setup test environment
119121
uses: ./.github/actions/setup_test_action
120122
timeout-minutes: 10
123+
- name: run apiCheck
124+
run: ./gradlew apiCheck
121125
- name: Run JVM Tests
122126
run: ./gradlew cleanTest jvmTest
123127
- name: Upload JVM test artifact

README.md

+14-1
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,12 @@ To run the tests you can use the following gradle tasks:
293293

294294
`./gradlew connectedAndroidTest` (an emulator needs to be running)
295295

296-
`./gradlew iosSimulatorArm64Test`
296+
`./gradlew iosSimulatorArm64Test` (On Apple Chip) `./gradlew iosX64Test` (On Intel Chip)
297297

298298
`./gradlew jsNodeTest`
299299

300+
`./gradlew jvmTest`
301+
300302
For some tests you need to have the firebase emulator suite running. After installing them you can run the following command inside the `test` directory:
301303

302304
`firebase emulators:start`
@@ -305,6 +307,17 @@ For some tests you need to have the firebase emulator suite running. After insta
305307
For every publicly available class or function there needs to be documentation written in the [KDoc syntax](https://kotlinlang.org/docs/kotlin-doc.html).
306308
We publish a new version of the documentation after every release and can be found [here](https://gitliveapp.github.io/firebase-kotlin-sdk/)
307309

310+
### Validation
311+
To ensure changes to the public API are well documented, this library validates its binary API. If you make changes to the API, make sure to run
312+
313+
`./gradlew apiDump`
314+
315+
### Code style
316+
This library uses the [Intellij Kotlin code style](https://www.jetbrains.com/help/idea/code-style-kotlin.html). Run the linter to make sure you follow these styles.
317+
318+
`./gradlew formatKotlin` to format to the proper style
319+
`./gradlew lintKotlin` to validate the correct style is used
320+
308321
### Compatibility with the official [Firebase Android SDK](https://github.com/firebase/firebase-android-sdk)
309322

310323
When this project began, the official Firebase Android SDK was a pure java library and the separate Kotlin extensions (KTX) module consisted of only a few extensions providing some syntactic sugar, for example `Firebase.firestore` instead of `Firebase.getInstance(),` which we naturally copied for the Firebase Kotlin SDK.

build.gradle.kts

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ plugins {
1616
alias(libs.plugins.native.cocoapods) apply false
1717
alias(libs.plugins.test.logger.plugin) apply false
1818
alias(libs.plugins.ben.manes.versions) apply false
19+
alias(libs.plugins.kotlinter) apply false
20+
alias(libs.plugins.kotlinx.binarycompatibilityvalidator)
1921
alias(libs.plugins.dokka)
2022
id("base")
2123
id("testOptionsConvention")
@@ -104,6 +106,7 @@ subprojects {
104106
}
105107

106108
apply(plugin = "com.adarshr.test-logger")
109+
apply(plugin = "org.jmailen.kotlinter")
107110

108111
repositories {
109112
mavenLocal()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
public final class dev/gitlive/firebase/analytics/AnalyticEventConstantsKt {
2+
public static final fun getEvent (Ldev/gitlive/firebase/analytics/FirebaseAnalytics;)Ldev/gitlive/firebase/analytics/FirebaseAnalyticsEvents;
3+
public static final fun getParam (Ldev/gitlive/firebase/analytics/FirebaseAnalytics;)Ldev/gitlive/firebase/analytics/FirebaseAnalyticsParam;
4+
public static final fun getUserProperty (Ldev/gitlive/firebase/analytics/FirebaseAnalytics;)Ldev/gitlive/firebase/analytics/FirebaseAnalyticsUserProperty;
5+
}
6+
7+
public final class dev/gitlive/firebase/analytics/AnalyticsKt {
8+
public static final fun logEvent (Ldev/gitlive/firebase/analytics/FirebaseAnalytics;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
9+
public static final fun setConsent (Ldev/gitlive/firebase/analytics/FirebaseAnalytics;Lkotlin/jvm/functions/Function1;)V
10+
}
11+
12+
public final class dev/gitlive/firebase/analytics/FirebaseAnalytics {
13+
public fun <init> (Lcom/google/firebase/analytics/FirebaseAnalytics;)V
14+
public final fun getAndroid ()Lcom/google/firebase/analytics/FirebaseAnalytics;
15+
public final fun getSessionId (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
16+
public final fun logEvent (Ljava/lang/String;Ljava/util/Map;)V
17+
public static synthetic fun logEvent$default (Ldev/gitlive/firebase/analytics/FirebaseAnalytics;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)V
18+
public final fun resetAnalyticsData ()V
19+
public final fun setAnalyticsCollectionEnabled (Z)V
20+
public final fun setConsent (Ljava/util/Map;)V
21+
public final fun setDefaultEventParameters (Ljava/util/Map;)V
22+
public final fun setSessionTimeoutInterval (J)V
23+
public final fun setUserId (Ljava/lang/String;)V
24+
public final fun setUserProperty (Ljava/lang/String;Ljava/lang/String;)V
25+
}
26+
27+
public final class dev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus : java/lang/Enum {
28+
public static final field DENIED Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;
29+
public static final field GRANTED Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;
30+
public static fun getEntries ()Lkotlin/enums/EnumEntries;
31+
public static fun valueOf (Ljava/lang/String;)Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;
32+
public static fun values ()[Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;
33+
}
34+
35+
public final class dev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentType : java/lang/Enum {
36+
public static final field AD_PERSONALIZATION Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentType;
37+
public static final field AD_STORAGE Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentType;
38+
public static final field AD_USER_DATA Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentType;
39+
public static final field ANALYTICS_STORAGE Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentType;
40+
public static fun getEntries ()Lkotlin/enums/EnumEntries;
41+
public static fun valueOf (Ljava/lang/String;)Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentType;
42+
public static fun values ()[Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentType;
43+
}
44+
45+
public final class dev/gitlive/firebase/analytics/FirebaseAnalyticsConsentBuilder {
46+
public fun <init> ()V
47+
public fun <init> (Ljava/util/Map;)V
48+
public synthetic fun <init> (Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
49+
public final fun component1 ()Ljava/util/Map;
50+
public final fun copy (Ljava/util/Map;)Ldev/gitlive/firebase/analytics/FirebaseAnalyticsConsentBuilder;
51+
public static synthetic fun copy$default (Ldev/gitlive/firebase/analytics/FirebaseAnalyticsConsentBuilder;Ljava/util/Map;ILjava/lang/Object;)Ldev/gitlive/firebase/analytics/FirebaseAnalyticsConsentBuilder;
52+
public fun equals (Ljava/lang/Object;)Z
53+
public final fun getAdPersonalization ()Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;
54+
public final fun getAdStorage ()Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;
55+
public final fun getAdUserData ()Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;
56+
public final fun getAnalyticsStorage ()Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;
57+
public final fun getConsentSettings ()Ljava/util/Map;
58+
public fun hashCode ()I
59+
public final fun setAdPersonalization (Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;)V
60+
public final fun setAdStorage (Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;)V
61+
public final fun setAdUserData (Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;)V
62+
public final fun setAnalyticsStorage (Ldev/gitlive/firebase/analytics/FirebaseAnalytics$ConsentStatus;)V
63+
public fun toString ()Ljava/lang/String;
64+
}
65+
66+
public final class dev/gitlive/firebase/analytics/FirebaseAnalyticsEvents {
67+
public static final field ADD_PAYMENT_INFO Ljava/lang/String;
68+
public static final field ADD_SHIPPING_INFO Ljava/lang/String;
69+
public static final field ADD_TO_CART Ljava/lang/String;
70+
public static final field ADD_TO_WISHLIST Ljava/lang/String;
71+
public static final field AD_IMPRESSION Ljava/lang/String;
72+
public static final field APP_OPEN Ljava/lang/String;
73+
public static final field BEGIN_CHECKOUT Ljava/lang/String;
74+
public static final field CAMPAIGN_DETAILS Ljava/lang/String;
75+
public static final field EARN_VIRTUAL_CURRENCY Ljava/lang/String;
76+
public static final field GENERATE_LEAD Ljava/lang/String;
77+
public static final field INSTANCE Ldev/gitlive/firebase/analytics/FirebaseAnalyticsEvents;
78+
public static final field JOIN_GROUP Ljava/lang/String;
79+
public static final field LEVEL_END Ljava/lang/String;
80+
public static final field LEVEL_START Ljava/lang/String;
81+
public static final field LEVEL_UP Ljava/lang/String;
82+
public static final field LOGIN Ljava/lang/String;
83+
public static final field POST_SCORE Ljava/lang/String;
84+
public static final field PURCHASE Ljava/lang/String;
85+
public static final field REFUND Ljava/lang/String;
86+
public static final field REMOVE_FROM_CART Ljava/lang/String;
87+
public static final field SCREEN_VIEW Ljava/lang/String;
88+
public static final field SEARCH Ljava/lang/String;
89+
public static final field SELECT_CONTENT Ljava/lang/String;
90+
public static final field SELECT_ITEM Ljava/lang/String;
91+
public static final field SELECT_PROMOTION Ljava/lang/String;
92+
public static final field SHARE Ljava/lang/String;
93+
public static final field SIGN_UP Ljava/lang/String;
94+
public static final field SPEND_VIRTUAL_CURRENCY Ljava/lang/String;
95+
public static final field TUTORIAL_BEGIN Ljava/lang/String;
96+
public static final field TUTORIAL_COMPLETE Ljava/lang/String;
97+
public static final field UNLOCK_ACHIEVEMENT Ljava/lang/String;
98+
public static final field VIEW_CART Ljava/lang/String;
99+
public static final field VIEW_ITEM Ljava/lang/String;
100+
public static final field VIEW_ITEM_LIST Ljava/lang/String;
101+
public static final field VIEW_PROMOTION Ljava/lang/String;
102+
public static final field VIEW_SEARCH_RESULTS Ljava/lang/String;
103+
}
104+
105+
public final class dev/gitlive/firebase/analytics/FirebaseAnalyticsException : java/lang/Exception {
106+
public fun <init> (Ljava/lang/String;)V
107+
}
108+
109+
public final class dev/gitlive/firebase/analytics/FirebaseAnalyticsParam {
110+
public static final field ACHIEVEMENT_ID Ljava/lang/String;
111+
public static final field ACLID Ljava/lang/String;
112+
public static final field AD_FORMAT Ljava/lang/String;
113+
public static final field AD_PLATFORM Ljava/lang/String;
114+
public static final field AD_SOURCE Ljava/lang/String;
115+
public static final field AD_UNIT_NAME Ljava/lang/String;
116+
public static final field AFFILIATION Ljava/lang/String;
117+
public static final field CAMPAIGN Ljava/lang/String;
118+
public static final field CAMPAIGN_ID Ljava/lang/String;
119+
public static final field CHARACTER Ljava/lang/String;
120+
public static final field CONTENT Ljava/lang/String;
121+
public static final field CONTENT_TYPE Ljava/lang/String;
122+
public static final field COUPON Ljava/lang/String;
123+
public static final field CP1 Ljava/lang/String;
124+
public static final field CREATIVE_FORMAT Ljava/lang/String;
125+
public static final field CREATIVE_NAME Ljava/lang/String;
126+
public static final field CREATIVE_SLOT Ljava/lang/String;
127+
public static final field CURRENCY Ljava/lang/String;
128+
public static final field DESTINATION Ljava/lang/String;
129+
public static final field DISCOUNT Ljava/lang/String;
130+
public static final field END_DATE Ljava/lang/String;
131+
public static final field EXTEND_SESSION Ljava/lang/String;
132+
public static final field FLIGHT_NUMBER Ljava/lang/String;
133+
public static final field GROUP_ID Ljava/lang/String;
134+
public static final field INDEX Ljava/lang/String;
135+
public static final field INSTANCE Ldev/gitlive/firebase/analytics/FirebaseAnalyticsParam;
136+
public static final field ITEMS Ljava/lang/String;
137+
public static final field ITEM_BRAND Ljava/lang/String;
138+
public static final field ITEM_CATEGORY Ljava/lang/String;
139+
public static final field ITEM_CATEGORY2 Ljava/lang/String;
140+
public static final field ITEM_CATEGORY3 Ljava/lang/String;
141+
public static final field ITEM_CATEGORY4 Ljava/lang/String;
142+
public static final field ITEM_CATEGORY5 Ljava/lang/String;
143+
public static final field ITEM_ID Ljava/lang/String;
144+
public static final field ITEM_LIST_ID Ljava/lang/String;
145+
public static final field ITEM_LIST_NAME Ljava/lang/String;
146+
public static final field ITEM_NAME Ljava/lang/String;
147+
public static final field ITEM_VARIANT Ljava/lang/String;
148+
public static final field LEVEL Ljava/lang/String;
149+
public static final field LEVEL_NAME Ljava/lang/String;
150+
public static final field LOCATION Ljava/lang/String;
151+
public static final field LOCATION_ID Ljava/lang/String;
152+
public static final field MARKETING_TACTIC Ljava/lang/String;
153+
public static final field MEDIUM Ljava/lang/String;
154+
public static final field METHOD Ljava/lang/String;
155+
public static final field NUMBER_OF_NIGHTS Ljava/lang/String;
156+
public static final field NUMBER_OF_PASSENGERS Ljava/lang/String;
157+
public static final field NUMBER_OF_ROOMS Ljava/lang/String;
158+
public static final field ORIGIN Ljava/lang/String;
159+
public static final field PAYMENT_TYPE Ljava/lang/String;
160+
public static final field PRICE Ljava/lang/String;
161+
public static final field PROMOTION_ID Ljava/lang/String;
162+
public static final field PROMOTION_NAME Ljava/lang/String;
163+
public static final field QUANTITY Ljava/lang/String;
164+
public static final field SCORE Ljava/lang/String;
165+
public static final field SCREEN_CLASS Ljava/lang/String;
166+
public static final field SCREEN_NAME Ljava/lang/String;
167+
public static final field SEARCH_TERM Ljava/lang/String;
168+
public static final field SHIPPING Ljava/lang/String;
169+
public static final field SHIPPING_TIER Ljava/lang/String;
170+
public static final field SOURCE Ljava/lang/String;
171+
public static final field SOURCE_PLATFORM Ljava/lang/String;
172+
public static final field START_DATE Ljava/lang/String;
173+
public static final field SUCCESS Ljava/lang/String;
174+
public static final field TAX Ljava/lang/String;
175+
public static final field TERM Ljava/lang/String;
176+
public static final field TRANSACTION_ID Ljava/lang/String;
177+
public static final field TRAVEL_CLASS Ljava/lang/String;
178+
public static final field VALUE Ljava/lang/String;
179+
public static final field VIRTUAL_CURRENCY_NAME Ljava/lang/String;
180+
}
181+
182+
public final class dev/gitlive/firebase/analytics/FirebaseAnalyticsParameters {
183+
public fun <init> ()V
184+
public fun <init> (Ljava/util/Map;)V
185+
public synthetic fun <init> (Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
186+
public final fun component1 ()Ljava/util/Map;
187+
public final fun copy (Ljava/util/Map;)Ldev/gitlive/firebase/analytics/FirebaseAnalyticsParameters;
188+
public static synthetic fun copy$default (Ldev/gitlive/firebase/analytics/FirebaseAnalyticsParameters;Ljava/util/Map;ILjava/lang/Object;)Ldev/gitlive/firebase/analytics/FirebaseAnalyticsParameters;
189+
public fun equals (Ljava/lang/Object;)Z
190+
public final fun getParameters ()Ljava/util/Map;
191+
public fun hashCode ()I
192+
public final fun param (Ljava/lang/String;D)V
193+
public final fun param (Ljava/lang/String;I)V
194+
public final fun param (Ljava/lang/String;J)V
195+
public final fun param (Ljava/lang/String;Ljava/lang/String;)V
196+
public final fun param (Ljava/lang/String;Z)V
197+
public fun toString ()Ljava/lang/String;
198+
}
199+
200+
public final class dev/gitlive/firebase/analytics/FirebaseAnalyticsUserProperty {
201+
public static final field ALLOW_AD_PERSONALIZATION_SIGNALS Ljava/lang/String;
202+
public static final field INSTANCE Ldev/gitlive/firebase/analytics/FirebaseAnalyticsUserProperty;
203+
public static final field SIGN_UP_METHOD Ljava/lang/String;
204+
}
205+
206+
public final class dev/gitlive/firebase/analytics/analyticsAndroid {
207+
public static final fun analytics (Ldev/gitlive/firebase/Firebase;Ldev/gitlive/firebase/FirebaseApp;)Ldev/gitlive/firebase/analytics/FirebaseAnalytics;
208+
public static final fun getAnalytics (Ldev/gitlive/firebase/Firebase;)Ldev/gitlive/firebase/analytics/FirebaseAnalytics;
209+
}
210+

0 commit comments

Comments
 (0)