diff --git a/build.gradle b/build.gradle index abaeb09a8f..aad7c69d1d 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ buildscript { runner : 'androidx.test:runner:1.1.0', ], ], + android_support: 'com.android.support:support-v4:28.0.0', junit : 'junit:junit:4.12', kotlin : [ gradlePlugin: "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}", @@ -34,7 +35,6 @@ buildscript { mockito_kotlin: 'com.nhaarman:mockito-kotlin-kt1.1:1.5.0', okio: 'com.squareup.okio:okio:2.2.2', robolectric : 'org.robolectric:robolectric:4.0-alpha-3', - android_support: 'com.android.support:support-v4:28.0.0' ] repositories { google() @@ -43,7 +43,7 @@ buildscript { } dependencies { classpath deps.kotlin.gradlePlugin - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:3.5.2' classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.16' classpath 'com.github.ben-manes:gradle-versions-plugin:0.20.0' classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.18" diff --git a/leakcanary-android-core/build.gradle b/leakcanary-android-core/build.gradle index 26d64a86f7..387dfe7d27 100644 --- a/leakcanary-android-core/build.gradle +++ b/leakcanary-android-core/build.gradle @@ -5,6 +5,7 @@ dependencies { api project(':shark-android') api project(':leakcanary-object-watcher-android') api project(':leakcanary-object-watcher-android-androidx') + api project(':leakcanary-object-watcher-android-support-fragments') implementation deps.kotlin.stdlib diff --git a/leakcanary-object-watcher-android-support-fragments/src/main/java/leakcanary/internal/AndroidSupportFragmentDestroyWatcher.kt b/leakcanary-object-watcher-android-support-fragments/src/main/java/leakcanary/internal/AndroidSupportFragmentDestroyWatcher.kt index 23dbca5eda..38ebd830fd 100644 --- a/leakcanary-object-watcher-android-support-fragments/src/main/java/leakcanary/internal/AndroidSupportFragmentDestroyWatcher.kt +++ b/leakcanary-object-watcher-android-support-fragments/src/main/java/leakcanary/internal/AndroidSupportFragmentDestroyWatcher.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 Square, Inc. + * Copyright (C) 2019 Square, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/leakcanary-object-watcher-android/src/main/java/leakcanary/internal/FragmentDestroyWatcher.kt b/leakcanary-object-watcher-android/src/main/java/leakcanary/internal/FragmentDestroyWatcher.kt index 60b198a36a..7d12431c2e 100644 --- a/leakcanary-object-watcher-android/src/main/java/leakcanary/internal/FragmentDestroyWatcher.kt +++ b/leakcanary-object-watcher-android/src/main/java/leakcanary/internal/FragmentDestroyWatcher.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 Square, Inc. + * Copyright (C) 2019 Square, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -50,26 +50,22 @@ internal object FragmentDestroyWatcher { ) } - if (classAvailable(ANDROIDX_FRAGMENT_CLASS_NAME) && - classAvailable(ANDROIDX_FRAGMENT_DESTROY_WATCHER_CLASS_NAME) - ) { - val watcherConstructor = Class.forName(ANDROIDX_FRAGMENT_DESTROY_WATCHER_CLASS_NAME) - .getDeclaredConstructor(ObjectWatcher::class.java, Function0::class.java) - @kotlin.Suppress("UNCHECKED_CAST") - fragmentDestroyWatchers.add( - watcherConstructor.newInstance(objectWatcher, configProvider) as (Activity) -> Unit - ) + getWatcherIfAvailable( + ANDROIDX_FRAGMENT_CLASS_NAME, + ANDROIDX_FRAGMENT_DESTROY_WATCHER_CLASS_NAME, + objectWatcher, + configProvider + )?.let { + fragmentDestroyWatchers.add(it) } - if (classAvailable(ANDROID_SUPPORT_FRAGMENT_CLASS_NAME) && - classAvailable(ANDROID_SUPPORT_FRAGMENT_DESTROY_WATCHER_CLASS_NAME) - ) { - val watcherConstructor = Class.forName(ANDROID_SUPPORT_FRAGMENT_DESTROY_WATCHER_CLASS_NAME) - .getDeclaredConstructor(ObjectWatcher::class.java, Function0::class.java) - @kotlin.Suppress("UNCHECKED_CAST") - fragmentDestroyWatchers.add( - watcherConstructor.newInstance(objectWatcher, configProvider) as (Activity) -> Unit - ) + getWatcherIfAvailable( + ANDROID_SUPPORT_FRAGMENT_CLASS_NAME, + ANDROID_SUPPORT_FRAGMENT_DESTROY_WATCHER_CLASS_NAME, + objectWatcher, + configProvider + )?.let { + fragmentDestroyWatchers.add(it) } if (fragmentDestroyWatchers.size == 0) { @@ -88,6 +84,26 @@ internal object FragmentDestroyWatcher { }) } + private fun getWatcherIfAvailable( + fragmentClassName: String, + watcherClassName: String, + objectWatcher: ObjectWatcher, + configProvider: () -> AppWatcher.Config + ): ((Activity) -> Unit)? { + + return if (classAvailable(fragmentClassName) && + classAvailable(watcherClassName) + ) { + val watcherConstructor = Class.forName(watcherClassName) + .getDeclaredConstructor(ObjectWatcher::class.java, Function0::class.java) + @Suppress("UNCHECKED_CAST") + watcherConstructor.newInstance(objectWatcher, configProvider) as (Activity) -> Unit + + } else { + null + } + } + private fun classAvailable(className: String): Boolean { return try { Class.forName(className)