diff --git a/build.gradle b/build.gradle index 48423ce0..057f8bcb 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,8 @@ import com.android.build.gradle.BaseExtension -import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext { - kotlin_version = '2.2.0' - } repositories { mavenCentral() google() @@ -18,7 +13,6 @@ buildscript { // For displaying method/field counts when building with Gradle: // https://github.com/KeepSafe/dexcount-gradle-plugin classpath("com.getkeepsafe.dexcount:dexcount-gradle-plugin:4.0.0") - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -76,11 +70,6 @@ subprojects { subproject -> plugins.withId("com.android.library") { configureAndroidModule(subproject) } - tasks.withType(KotlinCompile).configureEach { - compilerOptions { - jvmTarget = JvmTarget.JVM_1_8 - } - } tasks.withType(JavaCompile).configureEach { // enable deprecation checks options.compilerArgs += "-Xlint:deprecation" diff --git a/contract-tests/build.gradle b/contract-tests/build.gradle index c716ab21..dde0df0c 100644 --- a/contract-tests/build.gradle +++ b/contract-tests/build.gradle @@ -2,7 +2,6 @@ plugins { id("com.android.application") // make sure this line comes *after* you apply the Android plugin id("com.getkeepsafe.dexcount") - id 'org.jetbrains.kotlin.android' } android { diff --git a/example/build.gradle b/example/build.gradle index 401e5acc..797ab8d8 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -2,7 +2,6 @@ plugins { id("com.android.application") // make sure this line comes *after* you apply the Android plugin id("com.getkeepsafe.dexcount") - id 'org.jetbrains.kotlin.android' } android { diff --git a/launchdarkly-android-client-sdk/build.gradle b/launchdarkly-android-client-sdk/build.gradle index 75363f8d..3b7566cb 100644 --- a/launchdarkly-android-client-sdk/build.gradle +++ b/launchdarkly-android-client-sdk/build.gradle @@ -3,7 +3,6 @@ plugins { id("signing") id("maven-publish") id("com.getkeepsafe.dexcount") - id 'org.jetbrains.kotlin.android' } group = "com.launchdarkly" diff --git a/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/integrations/RegistrationCompleteResult.java b/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/integrations/RegistrationCompleteResult.java new file mode 100644 index 00000000..629ee1bd --- /dev/null +++ b/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/integrations/RegistrationCompleteResult.java @@ -0,0 +1,137 @@ +package com.launchdarkly.sdk.android.integrations; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * Result of attempting to register all configured {@link Plugin}s during SDK initialization. + * + *

This is a closed type hierarchy with exactly two subtypes: {@link Success} and {@link Failure}. + */ +public abstract class RegistrationCompleteResult { + + private RegistrationCompleteResult() { + // sealed: only the nested subtypes may extend this class. + } + + /** + * @return a {@link Success} result indicating that every plugin registered without error. + */ + @NonNull + public static RegistrationCompleteResult success() { + return Success.INSTANCE; + } + + /** + * @param failures the per-plugin failures collected during registration; must be non-null. + * @return a {@link Failure} result wrapping the supplied failures. + */ + @NonNull + public static RegistrationCompleteResult failure(@NonNull List failures) { + return new Failure(failures); + } + + /** + * Indicates that all plugins registered successfully. + */ + public static final class Success extends RegistrationCompleteResult { + /** The single instance. */ + public static final Success INSTANCE = new Success(); + + private Success() {} + + @Override public boolean equals(Object other) { return other instanceof Success; } + @Override public int hashCode() { return Success.class.hashCode(); } + @Override public String toString() { return "Success"; } + } + + /** + * Indicates that one or more plugins failed to register. The wrapped list contains + * the failure details for each plugin that threw during registration. + */ + public static final class Failure extends RegistrationCompleteResult { + @NonNull private final List failures; + + public Failure(@NonNull List failures) { + this.failures = Collections.unmodifiableList(failures); + } + + @NonNull + public List getFailures() { + return failures; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof Failure)) return false; + return failures.equals(((Failure) other).failures); + } + + @Override + public int hashCode() { + return failures.hashCode(); + } + + @Override + public String toString() { + return "Failure(failures=" + failures + ")"; + } + + /** + * Details about a single plugin's registration failure. + */ + public static final class PluginFailure { + @NonNull private final String pluginName; + @Nullable private final String message; + @Nullable private final Throwable cause; + + public PluginFailure(@NonNull String pluginName, @Nullable String message, @Nullable Throwable cause) { + this.pluginName = pluginName; + this.message = message; + this.cause = cause; + } + + @NonNull + public String getPluginName() { + return pluginName; + } + + @Nullable + public String getMessage() { + return message; + } + + @Nullable + public Throwable getCause() { + return cause; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof PluginFailure)) return false; + PluginFailure that = (PluginFailure) other; + return pluginName.equals(that.pluginName) + && Objects.equals(message, that.message) + && Objects.equals(cause, that.cause); + } + + @Override + public int hashCode() { + return Objects.hash(pluginName, message, cause); + } + + @Override + public String toString() { + return "PluginFailure(pluginName=" + pluginName + + ", message=" + message + + ", cause=" + cause + ")"; + } + } + } +} diff --git a/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/integrations/RegistrationCompleteResult.kt b/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/integrations/RegistrationCompleteResult.kt deleted file mode 100644 index 45b0b71e..00000000 --- a/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/integrations/RegistrationCompleteResult.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.launchdarkly.sdk.android.integrations - -import com.launchdarkly.sdk.android.integrations.RegistrationCompleteResult.Failure.PluginFailure - -sealed class RegistrationCompleteResult { - object Success : RegistrationCompleteResult() - data class Failure(val failures: List) : RegistrationCompleteResult() { - data class PluginFailure(val pluginName: String, val message: String?, val cause: Throwable?) - } - - companion object { - @JvmStatic - fun success() = Success - - @JvmStatic - fun failure(failures: List) = Failure(failures) - } -} diff --git a/shared-test-code/build.gradle b/shared-test-code/build.gradle index 287a19fc..c3fb0e05 100644 --- a/shared-test-code/build.gradle +++ b/shared-test-code/build.gradle @@ -1,7 +1,6 @@ plugins { id("com.android.library") id("com.getkeepsafe.dexcount") - id 'org.jetbrains.kotlin.android' } group = "com.launchdarkly"