Skip to content

Commit d805c6e

Browse files
committed
Merge branch 'try-replacing-ktfmt-with-detekt-droid-559'
2 parents 8bdc0e8 + f7cb264 commit d805c6e

File tree

24 files changed

+1903
-51
lines changed

24 files changed

+1903
-51
lines changed

.github/workflows/android-app.yml

+9
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,15 @@ jobs:
243243
build-root-directory: android
244244
execution-only-caches: true
245245

246+
- name: Run detekt
247+
uses: burrunan/gradle-cache-action@v1
248+
with:
249+
job-id: jdk17
250+
arguments: detekt
251+
gradle-version: wrapper
252+
build-root-directory: android
253+
execution-only-caches: true
254+
246255
# Running the AGP lint here rather than in the separate lint workflow
247256
# (android-kotlin-format-check.yml) since it's easier to make use of the running container,
248257
# cache and previously ran tasks.

android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/RedeemVoucherDialogTest.kt

-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ class RedeemVoucherDialogTest {
149149
}
150150

151151
companion object {
152-
private const val REDEEM_BUTTON_TEXT = "Redeem"
153152
private const val CANCEL_BUTTON_TEXT = "Cancel"
154153
private const val GOT_IT_BUTTON_TEXT = "Got it!"
155154
private const val DUMMY_VOUCHER = "DUMMY____VOUCHER"

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@ import androidx.compose.foundation.layout.size
88
import androidx.compose.material3.Icon
99
import androidx.compose.material3.MaterialTheme
1010
import androidx.compose.material3.Text
11-
import androidx.compose.runtime.*
11+
import androidx.compose.runtime.Composable
12+
import androidx.compose.runtime.LaunchedEffect
13+
import androidx.compose.runtime.getValue
14+
import androidx.compose.runtime.mutableStateOf
15+
import androidx.compose.runtime.remember
16+
import androidx.compose.runtime.setValue
1217
import androidx.compose.ui.Alignment
1318
import androidx.compose.ui.Modifier
1419
import androidx.compose.ui.graphics.Color

android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@file:Suppress("MagicNumber")
2+
13
package net.mullvad.mullvadvpn.util
24

35
import kotlinx.coroutines.Deferred

android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt

+4-6
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@ import androidx.core.graphics.drawable.toBitmapOrNull
77
fun PackageManager.getApplicationIconBitmapOrNull(packageName: String): Bitmap? =
88
try {
99
getApplicationIcon(packageName).toBitmapOrNull()
10-
} catch (e: Exception) {
10+
} catch (e: PackageManager.NameNotFoundException) {
1111
// Name not found is thrown if the application is not installed
12+
null
13+
} catch (e: IllegalArgumentException) {
1214
// IllegalArgumentException is thrown if the application has an invalid icon
13-
when (e) {
14-
is PackageManager.NameNotFoundException,
15-
is IllegalArgumentException -> null
16-
else -> throw e
17-
}
15+
null
1816
}

android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.util.Log
55
import androidx.lifecycle.ViewModel
66
import androidx.lifecycle.viewModelScope
77
import java.net.InetAddress
8+
import java.net.UnknownHostException
89
import kotlinx.coroutines.CoroutineDispatcher
910
import kotlinx.coroutines.Dispatchers
1011
import kotlinx.coroutines.channels.BufferOverflow
@@ -223,7 +224,7 @@ class VpnSettingsViewModel(
223224
private fun List<String>.asInetAddressList(): List<InetAddress> {
224225
return try {
225226
map { InetAddress.getByName(it) }
226-
} catch (ex: Exception) {
227+
} catch (ex: UnknownHostException) {
227228
Log.e("mullvad", "Error parsing the DNS address list.")
228229
emptyList()
229230
}

android/app/src/test/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionDeviceDataSourceTest.kt

-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import io.mockk.mockkObject
1313
import io.mockk.mockkStatic
1414
import io.mockk.unmockkAll
1515
import kotlin.reflect.KClass
16-
import net.mullvad.mullvadvpn.lib.common.util.JobTracker
1716
import net.mullvad.mullvadvpn.lib.ipc.Event
1817
import net.mullvad.mullvadvpn.lib.ipc.EventDispatcher
1918
import net.mullvad.mullvadvpn.lib.ipc.Request
@@ -22,8 +21,6 @@ import org.junit.jupiter.api.BeforeEach
2221
import org.junit.jupiter.api.Test
2322

2423
class ServiceConnectionDeviceDataSourceTest {
25-
private val tracker = JobTracker()
26-
2724
@MockK private lateinit var mockedMainLooper: Looper
2825

2926
@MockK private lateinit var mockedDispatchingHandler: EventDispatcher

android/build.gradle.kts

+25
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
2+
import io.gitlab.arturbosch.detekt.Detekt
23

34
plugins {
45
id(Dependencies.Plugin.dependencyCheckId) version Versions.Plugin.dependencyCheck apply false
56
id(Dependencies.Plugin.gradleVersionsId) version Versions.Plugin.gradleVersions
67
id(Dependencies.Plugin.ktfmtId) version Versions.Plugin.ktfmt apply false
8+
id(Dependencies.Plugin.detektId) version Versions.Plugin.detekt
79
}
810

911
buildscript {
1012
repositories {
1113
google()
1214
mavenCentral()
1315
maven(Repositories.GradlePlugins)
16+
gradlePluginPortal()
1417
}
1518

1619
dependencies {
@@ -27,6 +30,28 @@ buildscript {
2730
}
2831
}
2932

33+
val baselineFile = file("$rootDir/config/baseline.xml")
34+
val configFile = files("$rootDir/config/detekt.yml")
35+
36+
val projectSource = file(projectDir)
37+
val buildFiles = "**/build/**"
38+
39+
detekt {
40+
buildUponDefaultConfig = true
41+
allRules = false
42+
config.setFrom(configFile)
43+
source.setFrom(projectSource)
44+
baseline = baselineFile
45+
parallel = true
46+
ignoreFailures = false
47+
autoCorrect = true
48+
}
49+
50+
tasks.withType<Detekt>().configureEach {
51+
// Ignore generated files from the build directory, e.g files created by ksp.
52+
exclude(buildFiles)
53+
}
54+
3055
allprojects {
3156
apply(plugin = Dependencies.Plugin.dependencyCheckId)
3257
apply(plugin = Dependencies.Plugin.ktfmtId)

android/buildSrc/src/main/kotlin/Dependencies.kt

+1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ object Dependencies {
116116
const val dependencyCheck =
117117
"org.owasp:dependency-check-gradle:${Versions.Plugin.dependencyCheck}"
118118
const val dependencyCheckId = "org.owasp.dependencycheck"
119+
const val detektId = "io.gitlab.arturbosch.detekt"
119120
const val gradleVersionsId = "com.github.ben-manes.versions"
120121
const val junit5 = "de.mannodermaus.android-junit5"
121122
const val kotlin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}"

android/buildSrc/src/main/kotlin/Extensions.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ fun String.isNonStableVersion(): Boolean {
1111
return isNonStable
1212
}
1313

14-
fun DependencyHandler.`leakCanaryImplementation`(dependencyNotation: Any): Dependency? =
14+
fun DependencyHandler.leakCanaryImplementation(dependencyNotation: Any): Dependency? =
1515
add("leakCanaryImplementation", dependencyNotation)
1616

17-
fun DependencyHandler.`playImplementation`(dependencyNotation: Any): Dependency? =
17+
fun DependencyHandler.playImplementation(dependencyNotation: Any): Dependency? =
1818
add("playImplementation", dependencyNotation)

android/buildSrc/src/main/kotlin/Versions.kt

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ object Versions {
5050
const val androidAapt = "$android-10154469"
5151
const val playPublisher = "3.8.4"
5252
const val dependencyCheck = "8.3.1"
53+
const val detekt = "1.23.4"
5354
const val gradleVersions = "0.47.0"
5455
const val junit5 = "1.10.0.0"
5556
const val ktfmt = "0.16.0"

0 commit comments

Comments
 (0)