Skip to content

Commit f4d12ce

Browse files
authored
Merge pull request #35 from PatilShreyas/v1.0.0
Release v1.0.0
2 parents 574e411 + f1ca11c commit f4d12ce

File tree

10 files changed

+107
-101
lines changed

10 files changed

+107
-101
lines changed

cli/src/main/kotlin/dev/shreyaspatil/composeCompilerMetricsGenerator/cli/Main.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,5 +185,5 @@ fun printHeader(header: String) = println(
185185
)
186186

187187
object Constants {
188-
const val VERSION = "v1.0.0-beta03"
188+
const val VERSION = "v1.0.0"
189189
}

docs/use/using-cli.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ Run the command to know the usage of CLI
5656
!!! success "▶️Output"
5757

5858
```shell
59-
Usage: Compose Compiler Report to HTML Generator ~ v1.0.0-beta03 options_list
59+
Usage: Compose Compiler Report to HTML Generator ~ v1.0.0 options_list
6060
Options:
6161
--applicationName, -app -> Application name (To be displayed in the report) (always required) { String }
6262
--inputDirectory, -i -> Input directory where composable report and metrics are available { String }

docs/use/using-gradle-plugin.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ Apply the plugin to the module in which _**compose is enabled**_.
1919

2020
```groovy title="build.gradle"
2121
plugins {
22-
id "dev.shreyaspatil.compose-compiler-report-generator" version "1.0.0-beta03"
22+
id "dev.shreyaspatil.compose-compiler-report-generator" version "1.0.0"
2323
}
2424
```
2525

2626
=== "Kotlin"
2727

2828
```kotlin title="build.gradle.kts"
2929
plugins {
30-
id("dev.shreyaspatil.compose-compiler-report-generator") version "1.0.0-beta03"
30+
id("dev.shreyaspatil.compose-compiler-report-generator") version "1.0.0"
3131
}
3232
```
3333

@@ -45,7 +45,7 @@ Add this to top project level `build.gradle`
4545
}
4646
}
4747
dependencies {
48-
classpath "dev.shreyaspatil.compose-compiler-report-generator:gradle-plugin:1.0.0-beta03"
48+
classpath "dev.shreyaspatil.compose-compiler-report-generator:gradle-plugin:1.0.0"
4949
}
5050
}
5151
```
@@ -66,7 +66,7 @@ Add this to top project level `build.gradle`
6666
}
6767
}
6868
dependencies {
69-
classpath("dev.shreyaspatil.compose-compiler-report-generator:gradle-plugin:1.0.0-beta03")
69+
classpath("dev.shreyaspatil.compose-compiler-report-generator:gradle-plugin:1.0.0")
7070
}
7171
}
7272
```

gradle-plugin/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ group = GROUP
2020
version = VERSION_NAME
2121

2222
dependencies {
23-
implementation(gradleApi())
23+
compileOnly(gradleApi())
2424
compileOnly(kotlin("stdlib"))
2525
compileOnly(libs.kotlin.gradle.plugin)
2626
compileOnly(libs.android.gradle.plugin)

gradle-plugin/src/main/kotlin/dev/shreyaspatil/composeCompilerMetricsGenerator/plugin/ComposeCompilerReportExtension.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ package dev.shreyaspatil.composeCompilerMetricsGenerator.plugin
2626
import org.gradle.api.Project
2727
import org.gradle.api.provider.Property
2828
import org.gradle.kotlin.dsl.create
29+
import org.gradle.kotlin.dsl.getByType
2930
import java.io.File
3031

3132
interface ComposeCompilerReportExtension {
@@ -59,11 +60,16 @@ interface ComposeCompilerReportExtension {
5960
/**
6061
* Creates a extension of type [ComposeCompilerReportExtension] and returns
6162
*/
62-
fun get(target: Project) = target.extensions.create<ComposeCompilerReportExtension>(NAME).apply {
63+
fun create(target: Project) = target.extensions.create<ComposeCompilerReportExtension>(NAME).apply {
6364
enableReport.convention(true)
6465
enableMetrics.convention(true)
6566
name.convention("${target.rootProject.name}:${target.name}")
6667
outputPath.convention(target.buildDir.resolve("compose_report").absolutePath)
6768
}
69+
70+
/**
71+
* Get extensions applied to the [target] project.
72+
*/
73+
fun get(target: Project) = target.extensions.getByType<ComposeCompilerReportExtension>()
6874
}
6975
}

gradle-plugin/src/main/kotlin/dev/shreyaspatil/composeCompilerMetricsGenerator/plugin/ReportGenPlugin.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ package dev.shreyaspatil.composeCompilerMetricsGenerator.plugin
2525

2626
import com.android.build.api.dsl.CommonExtension
2727
import com.android.build.api.variant.AndroidComponentsExtension
28-
import dev.shreyaspatil.composeCompilerMetricsGenerator.plugin.task.createComposeCompilerReportGenTaskForVariant
2928
import dev.shreyaspatil.composeCompilerMetricsGenerator.plugin.task.executingComposeCompilerReportGenerationGradleTask
29+
import dev.shreyaspatil.composeCompilerMetricsGenerator.plugin.task.registerComposeCompilerReportGenTaskForVariant
3030
import org.gradle.api.Plugin
3131
import org.gradle.api.Project
3232
import org.gradle.kotlin.dsl.getByType
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
3636
@Suppress("UnstableApiUsage")
3737
class ReportGenPlugin : Plugin<Project> {
3838
override fun apply(target: Project) {
39-
val reportExt = ComposeCompilerReportExtension.get(target)
39+
val reportExt = ComposeCompilerReportExtension.create(target)
4040

4141
val android = runCatching {
4242
target.extensions.getByType(AndroidComponentsExtension::class.java)
@@ -46,7 +46,7 @@ class ReportGenPlugin : Plugin<Project> {
4646

4747
android.onVariants { variant ->
4848
// Create gradle tasks for generating report
49-
target.createComposeCompilerReportGenTaskForVariant(variant, reportExt)
49+
target.registerComposeCompilerReportGenTaskForVariant(variant)
5050
}
5151

5252
target.afterEvaluate {

gradle-plugin/src/main/kotlin/dev/shreyaspatil/composeCompilerMetricsGenerator/plugin/task/ComposeCompilerReportGenerateTask.kt

Lines changed: 88 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -29,52 +29,105 @@ import dev.shreyaspatil.composeCompilerMetricsGenerator.core.ComposeCompilerRawR
2929
import dev.shreyaspatil.composeCompilerMetricsGenerator.generator.HtmlReportGenerator
3030
import dev.shreyaspatil.composeCompilerMetricsGenerator.generator.ReportSpec
3131
import dev.shreyaspatil.composeCompilerMetricsGenerator.plugin.ComposeCompilerReportExtension
32+
import org.gradle.api.DefaultTask
3233
import org.gradle.api.Project
33-
import org.gradle.api.Task
34-
import org.gradle.api.tasks.GradleBuild
34+
import org.gradle.api.provider.Property
35+
import org.gradle.api.tasks.Input
36+
import org.gradle.api.tasks.TaskAction
3537
import org.gradle.api.tasks.TaskProvider
36-
import org.gradle.configurationcache.extensions.capitalized
38+
import org.gradle.tooling.GradleConnector
3739
import java.io.File
3840
import java.io.FileNotFoundException
3941

4042
const val KEY_ENABLE_REPORT_GEN = "dev.shreyaspatil.composeCompiler.reportGen.enable"
4143

42-
fun Project.createComposeCompilerReportGenTaskForVariant(
43-
variant: Variant,
44-
reportExtension: ComposeCompilerReportExtension
45-
): TaskProvider<GradleBuild> {
46-
val taskName = variant.name + "ComposeCompilerHtmlReport"
47-
return tasks.register(taskName, GradleBuild::class.java) {
48-
startParameter.projectProperties[KEY_ENABLE_REPORT_GEN] = true.toString()
44+
abstract class ComposeCompilerReportGenerateTask : DefaultTask() {
45+
@get:Input
46+
abstract val compileKotlinTasks: Property<String>
4947

50-
// All compilation tasks should be re-run. Because if any developer deletes report
51-
// and again runs this task then compose metrics won't be generated by compiler again
52-
startParameter.isRerunTasks = true
48+
private val reportExtension: ComposeCompilerReportExtension
49+
get() = ComposeCompilerReportExtension.get(project)
5350

54-
tasks = listOf("compile${variant.name.capitalized()}Kotlin")
51+
@TaskAction
52+
fun generate() {
53+
val reportExt = reportExtension
54+
cleanupDirectory(reportExtension.outputPath.get())
5555

56-
doFirst {
57-
cleanupDirectory(reportExtension.outputPath.get())
58-
}
56+
generateRawMetricsAndReport()
5957

60-
doLast {
61-
generateReport(reportExtension)
62-
}
58+
generateReport(reportExt)
59+
}
6360

64-
group = "compose compiler report"
65-
description = "Generate Compose Compiler Metrics and Report"
61+
private fun generateRawMetricsAndReport() {
62+
GradleConnector.newConnector().forProjectDirectory(project.layout.projectDirectory.asFile)
63+
.connect()
64+
.use {
65+
it.newBuild()
66+
.setStandardOutput(System.out)
67+
.setStandardError(System.err)
68+
.setStandardInput(System.`in`)
69+
.forTasks(compileKotlinTasks.get())
70+
.withArguments(
71+
// Re-running is necessary. In case devs deleted raw files and if task uses cache
72+
// then this task will explode 💣
73+
"--rerun-tasks",
74+
75+
// Signal for enabling report generation in `kotlinOptions{}` block.
76+
"-P$KEY_ENABLE_REPORT_GEN=true"
77+
)
78+
.run()
79+
}
6680
}
67-
}
6881

69-
fun cleanupDirectory(directory: String) {
70-
val dirFile = File(directory)
71-
if (dirFile.exists()) {
72-
if (!dirFile.isDirectory) {
73-
throw FileNotFoundException("'$directory' is not a directory")
82+
private fun generateReport(reportExtension: ComposeCompilerReportExtension) {
83+
val outputDirectory = reportExtension.outputPath.get().let { File(it) }
84+
85+
// Create a report specification with application name
86+
val reportSpec = ReportSpec(reportExtension.name.get())
87+
88+
val rawReportProvider = ComposeCompilerRawReportProvider.FromDirectory(
89+
directory = reportExtension.composeRawMetricsOutputDirectory
90+
)
91+
92+
// Provide metric files to generator
93+
val htmlGenerator = HtmlReportGenerator(
94+
reportSpec = reportSpec,
95+
metricsProvider = ComposeCompilerMetricsProvider(rawReportProvider)
96+
)
97+
98+
// Generate HTML (as String)
99+
val html = htmlGenerator.generateHtml()
100+
101+
// Create a report file
102+
val file = outputDirectory.resolve("index.html")
103+
file.writeText(html)
104+
105+
val reportUrl = file.toURI().toURL().toExternalForm()
106+
logger.quiet("Compose Compiler report is generated: $reportUrl")
107+
}
108+
109+
private fun cleanupDirectory(directory: String) {
110+
val dirFile = File(directory)
111+
if (dirFile.exists()) {
112+
if (!dirFile.isDirectory) {
113+
throw FileNotFoundException("'$directory' is not a directory")
114+
}
74115
}
116+
117+
dirFile.deleteRecursively()
75118
}
119+
}
120+
121+
fun Project.registerComposeCompilerReportGenTaskForVariant(variant: Variant): TaskProvider<ComposeCompilerReportGenerateTask> {
122+
val taskName = variant.name + "ComposeCompilerHtmlReport"
123+
val compileKotlinTaskName = compileKotlinTaskNameFromVariant(variant)
124+
125+
return tasks.register(taskName, ComposeCompilerReportGenerateTask::class.java) {
126+
compileKotlinTasks.set(compileKotlinTaskName)
76127

77-
dirFile.deleteRecursively()
128+
group = "compose compiler report"
129+
description = "Generate Compose Compiler Metrics and Report"
130+
}
78131
}
79132

80133
/**
@@ -84,28 +137,10 @@ fun Project.executingComposeCompilerReportGenerationGradleTask() = runCatching {
84137
property(KEY_ENABLE_REPORT_GEN)
85138
}.getOrNull() == "true"
86139

87-
private fun Task.generateReport(reportExtension: ComposeCompilerReportExtension) {
88-
val outputDirectory = reportExtension.outputPath.get().let { File(it) }
89-
90-
// Create a report specification with application name
91-
val reportSpec = ReportSpec(reportExtension.name.get())
92-
93-
val rawReportProvider = ComposeCompilerRawReportProvider.FromDirectory(
94-
directory = reportExtension.composeRawMetricsOutputDirectory
95-
)
96-
97-
// Provide metric files to generator
98-
val htmlGenerator = HtmlReportGenerator(
99-
reportSpec = reportSpec,
100-
metricsProvider = ComposeCompilerMetricsProvider(rawReportProvider)
101-
)
102-
103-
// Generate HTML (String)
104-
val html = htmlGenerator.generateHtml()
105-
106-
// Create a report file
107-
val file = outputDirectory.resolve("index.html")
108-
file.writeText(html)
109-
110-
logger.quiet("Compose Compiler report is generated: ${file.absolutePath}")
140+
/**
141+
* Returns a task name for compile<VARIANT>Kotlin with [variant]
142+
*/
143+
fun compileKotlinTaskNameFromVariant(variant: Variant): String {
144+
val variantName = variant.name.let { it[0].toUpperCase() + it.substring(1) }
145+
return "compile${variantName}Kotlin"
111146
}

gradle-plugin/src/main/kotlin/dev/shreyaspatil/composeCompilerMetricsGenerator/plugin/utils/CommonExtensionsExt.kt

Lines changed: 0 additions & 35 deletions
This file was deleted.

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
kotlin.code.style=official
22

33
GROUP=dev.shreyaspatil.compose-compiler-report-generator
4-
VERSION_NAME=1.0.0-beta03
4+
VERSION_NAME=1.0.0
55

66
# Library configuration
77
SONATYPE_HOST=DEFAULT

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"main": "index.js",
88
"preferGlobal": true,
99
"repository": "https://github.com/PatilShreyas/compose-report-to-html",
10-
"version": "1.0.0-beta03",
10+
"version": "1.0.0",
1111
"jdeploy": {
1212
"jdk": false,
1313
"javaVersion": "11",

0 commit comments

Comments
 (0)