Skip to content

Commit c75dc3d

Browse files
Setup detekt static analysis plugin (#1123)
* style: setup detekt plugin * address review feedback
1 parent 068cd9e commit c75dc3d

File tree

16 files changed

+157
-1
lines changed

16 files changed

+157
-1
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" ?>
2+
<SmellBaseline>
3+
<ManuallySuppressedIssues/>
4+
<CurrentIssues>
5+
<ID>ForbiddenComment:SessionManager.kt$SessionManager$// TODO FIXME: This is not threadsafe -- if two threads call getSessionId()</ID>
6+
<ID>ForbiddenComment:SessionManager.kt$SessionManager$// TODO: Make thread safe / wrap with AtomicReference?</ID>
7+
<ID>LongParameterList:OpenTelemetryRumInitializer.kt$OpenTelemetryRumInitializer$( activityTracerCustomizer: ((Tracer) -&gt; Tracer)?, activityNameExtractor: ScreenNameExtractor?, fragmentTracerCustomizer: ((Tracer) -&gt; Tracer)?, fragmentNameExtractor: ScreenNameExtractor?, anrAttributesExtractors: List&lt;EventAttributesExtractor&lt;Array&lt;StackTraceElement&gt;&gt;&gt;, crashAttributesExtractors: List&lt;EventAttributesExtractor&lt;CrashDetails&gt;&gt;, networkChangeAttributesExtractors: List&lt;NetworkAttributesExtractor&gt;, slowRenderingDetectionPollInterval: Duration?, )</ID>
8+
<ID>LongParameterList:OpenTelemetryRumInitializer.kt$OpenTelemetryRumInitializer$( application: Application, endpointBaseUrl: String, endpointHeaders: Map&lt;String, String&gt; = emptyMap(), spanEndpointConnectivity: EndpointConnectivity = HttpEndpointConnectivity.forTraces( endpointBaseUrl, endpointHeaders, ), logEndpointConnectivity: EndpointConnectivity = HttpEndpointConnectivity.forLogs( endpointBaseUrl, endpointHeaders, ), metricEndpointConnectivity: EndpointConnectivity = HttpEndpointConnectivity.forMetrics( endpointBaseUrl, endpointHeaders, ), rumConfig: OtelRumConfig = OtelRumConfig(), sessionConfig: SessionConfig = SessionConfig.withDefaults(), activityTracerCustomizer: ((Tracer) -&gt; Tracer)? = null, activityNameExtractor: ScreenNameExtractor? = null, fragmentTracerCustomizer: ((Tracer) -&gt; Tracer)? = null, fragmentNameExtractor: ScreenNameExtractor? = null, anrAttributesExtractors: List&lt;EventAttributesExtractor&lt;Array&lt;StackTraceElement&gt;&gt;&gt; = emptyList(), crashAttributesExtractors: List&lt;EventAttributesExtractor&lt;CrashDetails&gt;&gt; = emptyList(), networkChangeAttributesExtractors: List&lt;NetworkAttributesExtractor&gt; = emptyList(), slowRenderingDetectionPollInterval: Duration? = null, )</ID>
9+
</CurrentIssues>
10+
</SmellBaseline>

buildSrc/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ dependencies {
2323
implementation(libs.nullaway.plugin)
2424
implementation(libs.animalsniffer.plugin)
2525
implementation(libs.kotlin.plugin)
26+
implementation(libs.detekt.plugin)
2627
}

buildSrc/src/main/kotlin/otel.android-library-conventions.gradle.kts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import gradle.kotlin.dsl.accessors._d8282334f089ec6fbf714caba2b86dd9.kotlin
2-
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
2+
import io.gitlab.arturbosch.detekt.Detekt
33
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
44
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
55

@@ -9,6 +9,7 @@ plugins {
99
id("otel.errorprone-conventions")
1010
id("kotlin-kapt")
1111
id("otel.animalsniffer-conventions")
12+
id("io.gitlab.arturbosch.detekt")
1213
}
1314

1415
val javaVersion = rootProject.extra["java_version"] as JavaVersion
@@ -56,6 +57,25 @@ tasks.withType<Test> {
5657
useJUnitPlatform()
5758
}
5859

60+
detekt {
61+
buildUponDefaultConfig = true
62+
autoCorrect = true
63+
64+
// overwrite default behaviour here, if needed
65+
config.from(rootProject.files("config/detekt/detekt.yml"))
66+
67+
// suppress pre-existing issues on a per-project basis
68+
baseline = project.file("config/detekt/baseline.xml")
69+
}
70+
71+
project.tasks.withType(Detekt::class.java).configureEach {
72+
jvmTarget = targetJvm.target
73+
reports {
74+
html.required.set(true)
75+
xml.required.set(false)
76+
}
77+
}
78+
5979
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
6080
dependencies {
6181
implementation(libs.findLibrary("androidx-annotation").get())

config/detekt/detekt.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# https://detekt.dev/docs/introduction/configurations/
2+
build:
3+
maxIssues: 0

core/config/detekt/baseline.xml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" ?>
2+
<SmellBaseline>
3+
<ManuallySuppressedIssues/>
4+
<CurrentIssues>
5+
<ID>EmptyFunctionBlock:GlobalAttributesSpanAppender.kt$GlobalAttributesSpanAppender${}</ID>
6+
<ID>EmptyFunctionBlock:NetworkAttributesSpanAppender.kt$NetworkAttributesSpanAppender${}</ID>
7+
<ID>EmptyFunctionBlock:SessionIdSpanAppender.kt$SessionIdSpanAppender${}</ID>
8+
<ID>EmptyFunctionBlock:TestInitializationEvents.kt$TestInitializationEvents${ }</ID>
9+
<ID>ImplicitDefaultLocale:DiskManager.kt$DiskManager$String.format( "Requested cache size: %s, folder size: %s", requestedSize, calculatedSize, )</ID>
10+
<ID>ImplicitDefaultLocale:SessionIdRatioBasedSampler.kt$SessionIdRatioBasedSampler$String.format( "SessionIdRatioBased{traceIdRatioBased:%s}", ratioBasedSampler.description, )</ID>
11+
<ID>LongParameterList:DiskBufferingConfig.kt$DiskBufferingConfig.Companion$( enabled: Boolean = false, maxCacheSize: Int = DEFAULT_MAX_CACHE_SIZE, maxFileAgeForWriteMillis: Long = TimeUnit.SECONDS.toMillis(30), minFileAgeForReadMillis: Long = TimeUnit.SECONDS.toMillis(33), maxFileAgeForReadMillis: Long = TimeUnit.HOURS.toMillis(18), maxCacheFileSize: Int = MAX_CACHE_FILE_SIZE, debugEnabled: Boolean = false, signalsBufferDir: File? = null, )</ID>
12+
<ID>MagicNumber:DiskBufferingConfig.kt$DiskBufferingConfig.Companion$18</ID>
13+
<ID>MagicNumber:DiskBufferingConfig.kt$DiskBufferingConfig.Companion$30</ID>
14+
<ID>MagicNumber:DiskBufferingConfig.kt$DiskBufferingConfig.Companion$33</ID>
15+
<ID>MagicNumber:DiskBufferingConfig.kt$DiskBufferingConfig.Companion$5</ID>
16+
<ID>MagicNumber:DiskManager.kt$DiskManager$3</ID>
17+
<ID>MagicNumber:SignalFromDiskExporter.kt$SignalFromDiskExporter$5</ID>
18+
<ID>MaxLineLength:BufferDelegatingLogExporter.kt$BufferDelegatingLogExporter$*</ID>
19+
<ID>MaxLineLength:BufferDelegatingMetricExporter.kt$BufferDelegatingMetricExporter$private var aggregationTemporalitySelector: AggregationTemporalitySelector = AggregationTemporalitySelector.alwaysCumulative()</ID>
20+
<ID>MaxLineLength:DiskBufferingConfig.kt$DiskBufferingConfig.Companion$Log.w(OTEL_RUM_LOG_TAG, "overriding minFileAgeForReadMillis from $minFileAgeForReadMillis to $minRead")</ID>
21+
<ID>MaxLineLength:GlobalAttributesSpanAppender.kt$GlobalAttributesSpanAppender$*</ID>
22+
<ID>MaxLineLength:GlobalAttributesSpanAppenderTest.kt$GlobalAttributesSpanAppenderTest$every { originalSupplier.get() } returns attrs andThenThrows RuntimeException("Should not have been called again.")</ID>
23+
<ID>MaxLineLength:NetworkAttributesSpanAppender.kt$NetworkAttributesSpanAppender.Companion$fun</ID>
24+
<ID>MaxLineLength:SessionIdRatioBasedSampler.kt$SessionIdRatioBasedSampler$*</ID>
25+
<ID>MaxLineLength:SignalFromDiskExporter.kt$SignalFromDiskExporter$*</ID>
26+
</CurrentIssues>
27+
</SmellBaseline>

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ junitKtx = "1.3.0"
1515
autoService = "1.1.1"
1616
androidx-navigation = "2.7.7"
1717
compose = "1.5.4"
18+
detekt = "1.23.8"
1819

1920
[libraries]
2021
opentelemetry-platform-alpha = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha", version.ref = "opentelemetry-instrumentation-alpha" }
@@ -47,6 +48,7 @@ volley = "com.android.volley:volley:1.2.1"
4748
auto-service-annotations = { module = "com.google.auto.service:auto-service-annotations", version.ref = "autoService" }
4849
auto-service-processor = { module = "com.google.auto.service:auto-service", version.ref = "autoService" }
4950
compose = { group = "androidx.compose.ui", name = "ui", version.ref = "compose" }
51+
detekt-plugin = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" }
5052

5153
#Test tools
5254
opentelemetry-sdk-testing = { module = "io.opentelemetry:opentelemetry-sdk-testing" }
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" ?>
2+
<SmellBaseline>
3+
<ManuallySuppressedIssues/>
4+
<CurrentIssues>
5+
<ID>MagicNumber:ActivityLifecycleInstrumentation.kt$ActivityLifecycleInstrumentation$29</ID>
6+
<ID>TooManyFunctions:ActivityCallbacks.kt$ActivityCallbacks : DefaultingActivityLifecycleCallbacks</ID>
7+
</CurrentIssues>
8+
</SmellBaseline>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" ?>
2+
<SmellBaseline>
3+
<ManuallySuppressedIssues/>
4+
<CurrentIssues>
5+
<ID>MaxLineLength:AndroidInstrumentation.kt$AndroidInstrumentation$*</ID>
6+
<ID>UseCheckOrError:AndroidInstrumentationLoaderImpl.kt$AndroidInstrumentationLoaderImpl$throw IllegalStateException("Instrumentation with type '${instrumentation::class.java}' already exists.")</ID>
7+
</CurrentIssues>
8+
</SmellBaseline>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" ?>
2+
<SmellBaseline>
3+
<ManuallySuppressedIssues/>
4+
<CurrentIssues>
5+
<ID>MagicNumber:AnrWatcher.kt$AnrWatcher$5</ID>
6+
<ID>ReturnCount:AnrWatcher.kt$AnrWatcher$override fun run()</ID>
7+
</CurrentIssues>
8+
</SmellBaseline>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" ?>
2+
<SmellBaseline>
3+
<ManuallySuppressedIssues/>
4+
<CurrentIssues>
5+
<ID>UnusedPrivateClass:ScreenNameExtractorTest.kt$ScreenNameExtractorTest$AnnotatedFragment : Fragment</ID>
6+
</CurrentIssues>
7+
</SmellBaseline>

0 commit comments

Comments
 (0)