Skip to content

Commit

Permalink
add support-fragments to leakcnacary-core, remove duplicated code for…
Browse files Browse the repository at this point in the history
… fragment watcher creation
  • Loading branch information
AndreasBoehm committed Nov 26, 2019
1 parent 49838e3 commit c6b3a47
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 22 deletions.
4 changes: 2 additions & 2 deletions build.gradle
Expand Up @@ -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}",
Expand All @@ -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()
Expand All @@ -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"
Expand Down
1 change: 1 addition & 0 deletions leakcanary-android-core/build.gradle
Expand Up @@ -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

Expand Down
@@ -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.
Expand Down
@@ -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.
Expand Down Expand Up @@ -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) {
Expand All @@ -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)
Expand Down

0 comments on commit c6b3a47

Please sign in to comment.