Skip to content

Commit 6017418

Browse files
authored
Merge pull request #63 from PatilShreyas/report-extend
Provide report options to limit the content of report
2 parents ae53511 + a1341e1 commit 6017418

File tree

12 files changed

+141
-31
lines changed

12 files changed

+141
-31
lines changed

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

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import dev.shreyaspatil.composeCompilerMetricsGenerator.core.ComposeCompilerRawR
2828
import dev.shreyaspatil.composeCompilerMetricsGenerator.core.utils.ensureDirectory
2929
import dev.shreyaspatil.composeCompilerMetricsGenerator.core.utils.ensureFileExists
3030
import dev.shreyaspatil.composeCompilerMetricsGenerator.generator.HtmlReportGenerator
31+
import dev.shreyaspatil.composeCompilerMetricsGenerator.generator.ReportOptions
3132
import dev.shreyaspatil.composeCompilerMetricsGenerator.generator.ReportSpec
3233
import kotlinx.cli.ArgParser
3334
import kotlinx.cli.ArgType
@@ -43,7 +44,14 @@ import java.nio.file.Paths
4344
fun main(args: Array<String>) {
4445
val arguments = CliArguments(args, Paths.get("").toAbsolutePath())
4546

46-
val reportSpec = ReportSpec(arguments.applicationName)
47+
val reportSpec = ReportSpec(
48+
name = arguments.applicationName,
49+
options = ReportOptions(
50+
includeStableComposables = arguments.includeStableComposables,
51+
includeStableClasses = arguments.includeStableClasses,
52+
includeClasses = arguments.includeClasses,
53+
),
54+
)
4755
val rawReportProvider = arguments.getRawReportProvider()
4856

4957
printHeader("Generating Composable HTML Report")
@@ -128,6 +136,21 @@ class CliArguments(args: Array<String>, private val path: Path) {
128136
description = "Output directory name",
129137
).default(path.toAbsolutePath().toString())
130138

139+
val includeStableComposables by parser.option(
140+
ArgType.Boolean,
141+
description = "Whether to include stable Composable functions in the report",
142+
).default(true)
143+
144+
val includeStableClasses by parser.option(
145+
ArgType.Boolean,
146+
description = "Whether to include stable classes in the report",
147+
).default(true)
148+
149+
val includeClasses by parser.option(
150+
ArgType.Boolean,
151+
description = "Whether to include all the classes in the report",
152+
).default(true)
153+
131154
init {
132155
parser.parse(args)
133156

@@ -185,5 +208,5 @@ fun printHeader(header: String) = println(
185208
)
186209

187210
object Constants {
188-
const val VERSION = "v1.0.1"
211+
const val VERSION = "v1.1.0"
189212
}

docs/use/using-cli.md

Lines changed: 4 additions & 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.1 options_list
59+
Usage: Compose Compiler Report to HTML Generator ~ v1.1.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 }
@@ -65,6 +65,9 @@ Run the command to know the usage of CLI
6565
--composableMetricsFile, -composableMetrics -> Composable Metrics TXT files (separated by commas) { String }
6666
--classMetricsFile, -classMetrics -> Class Metrics TXT files (separated by commas) { String }
6767
--outputDirectory, -o -> Output directory name { String }
68+
--includeStableComposables [true] -> Whether to include stable Composable functions in the report
69+
--includeStableClasses [true] -> Whether to include stable classes in the report
70+
--includeClasses [true] -> Whether to include all the classes in the report
6871
--help, -h -> Usage info
6972
```
7073

docs/use/using-gradle-plugin.md

Lines changed: 26 additions & 8 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.1"
22+
id "dev.shreyaspatil.compose-compiler-report-generator" version "1.1.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.1"
30+
id("dev.shreyaspatil.compose-compiler-report-generator") version "1.1.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.1"
48+
classpath "dev.shreyaspatil.compose-compiler-report-generator:gradle-plugin:1.1.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.1")
69+
classpath("dev.shreyaspatil.compose-compiler-report-generator:gradle-plugin:1.1.0")
7070
}
7171
}
7272
```
@@ -122,8 +122,17 @@ If you have to configure plugin parameters manually (which is completely optiona
122122
// Sets the name for a report
123123
name = "Report Name" // Default: Module name
124124

125-
// Output path where report will be generated
126-
outputPath = project.buildDir.absolutePath + "/custom_path" // Default: module/buildDir/compose_report
125+
// Output directory where report will be generated
126+
outputDirectory = layout.buildDirectory.dir("custom_dir").get().asFile // Default: module/buildDir/compose_report
127+
128+
// Whether to include stable composable functions in the final report or not.
129+
includeStableComposables = true/false // Default: true
130+
131+
// Whether to include stable classes in the final report or not.
132+
includeStableClasses = true/false // Default: true
133+
134+
// Whether to include the ALL classes in the final report or not.
135+
includeClasses = true/false // Default: true
127136
}
128137
```
129138

@@ -140,7 +149,16 @@ If you have to configure plugin parameters manually (which is completely optiona
140149
// Sets the name for a report
141150
name.set("Report Name") // Default: Module name
142151

143-
// Output path where report will be generated
144-
outputPath.set(project.buildDir.resolve("custom_path").absolutePath) // Default: module/buildDir/compose_report
152+
// Output directory where report will be generated
153+
outputDirectory.set(layout.buildDirectory.dir("custom_dir").get().asFile) // Default: module/buildDir/compose_report
154+
155+
// Whether to include stable composable functions in the final report or not.
156+
includeStableComposables.set(true/false) // Default: true
157+
158+
// Whether to include stable classes in the final report or not.
159+
includeStableClasses.set(true/false) // Default: true
160+
161+
// Whether to include the ALL classes in the final report or not.
162+
includeClasses.set(true/false) // Default: true
145163
}
146164
```

docs/use/using-utility-as-library.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ Refer to the latest release on [GitHub Releases](https://github.com/PatilShreyas
2525

2626
```kotlin
2727
// Create a report specification with application name
28-
val reportSpec = ReportSpec("Your Application Name")
28+
val reportSpec = ReportSpec(
29+
name = "Your Application Name",
30+
options = ReportOptions() // Customize it as per need
31+
)
2932

3033
// Get provider for raw reports (generated by compose compiler)
3134
val rawReportProvider = ComposeCompilerRawReportProvider.FromDirectory("path/to/raw-reports")

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,21 @@ interface ComposeCompilerReportExtension {
5151
*/
5252
val outputDirectory: Property<File>
5353

54+
/**
55+
* Include the report for stable composable functions in the module which doesn't need optimizations.
56+
*/
57+
val includeStableComposables: Property<Boolean>
58+
59+
/**
60+
* Include the report for stable classes in the module which doesn't need optimizations.
61+
*/
62+
val includeStableClasses: Property<Boolean>
63+
64+
/**
65+
* Include the report for all classes in the module.
66+
*/
67+
val includeClasses: Property<Boolean>
68+
5469
val composeRawMetricsOutputDirectory: File
5570
get() = outputDirectory.get().resolve("raw")
5671

@@ -63,6 +78,9 @@ interface ComposeCompilerReportExtension {
6378
fun create(target: Project) = target.extensions.create<ComposeCompilerReportExtension>(NAME).apply {
6479
enableReport.convention(true)
6580
enableMetrics.convention(true)
81+
includeStableComposables.convention(true)
82+
includeStableClasses.convention(true)
83+
includeClasses.convention(true)
6684
name.convention("${target.rootProject.name}:${target.name}")
6785
outputDirectory.convention(target.buildDir.resolve("compose_report"))
6886
}

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,14 @@ import com.android.build.api.variant.Variant
2727
import dev.shreyaspatil.composeCompilerMetricsGenerator.core.ComposeCompilerMetricsProvider
2828
import dev.shreyaspatil.composeCompilerMetricsGenerator.core.ComposeCompilerRawReportProvider
2929
import dev.shreyaspatil.composeCompilerMetricsGenerator.generator.HtmlReportGenerator
30+
import dev.shreyaspatil.composeCompilerMetricsGenerator.generator.ReportOptions
3031
import dev.shreyaspatil.composeCompilerMetricsGenerator.generator.ReportSpec
3132
import dev.shreyaspatil.composeCompilerMetricsGenerator.plugin.ComposeCompilerReportExtension
3233
import org.gradle.api.DefaultTask
3334
import org.gradle.api.Project
34-
import org.gradle.api.file.Directory
3535
import org.gradle.api.file.DirectoryProperty
3636
import org.gradle.api.provider.Property
3737
import org.gradle.api.tasks.Input
38-
import org.gradle.api.tasks.InputDirectory
3938
import org.gradle.api.tasks.OutputDirectory
4039
import org.gradle.api.tasks.TaskAction
4140
import org.gradle.api.tasks.TaskProvider
@@ -52,12 +51,21 @@ abstract class ComposeCompilerReportGenerateTask : DefaultTask() {
5251
@get:Input
5352
abstract val reportName: Property<String>
5453

55-
@get:InputDirectory
54+
@get:OutputDirectory
5655
abstract val composeRawMetricsOutputDirectory: DirectoryProperty
5756

5857
@get:OutputDirectory
5958
abstract val outputDirectory: DirectoryProperty
6059

60+
@get:Input
61+
abstract val includeStableComposables: Property<Boolean>
62+
63+
@get:Input
64+
abstract val includeStableClasses: Property<Boolean>
65+
66+
@get:Input
67+
abstract val includeClasses: Property<Boolean>
68+
6169
@TaskAction
6270
fun generate() {
6371
val outputDirectory = outputDirectory.get().asFile
@@ -91,7 +99,14 @@ abstract class ComposeCompilerReportGenerateTask : DefaultTask() {
9199

92100
private fun generateReport(outputDirectory: File) {
93101
// Create a report specification with application name
94-
val reportSpec = ReportSpec(reportName.get())
102+
val reportSpec = ReportSpec(
103+
name = reportName.get(),
104+
options = ReportOptions(
105+
includeStableComposables = includeStableComposables.get(),
106+
includeStableClasses = includeStableClasses.get(),
107+
includeClasses = includeClasses.get(),
108+
),
109+
)
95110

96111
val rawReportProvider = ComposeCompilerRawReportProvider.FromDirectory(
97112
directory = composeRawMetricsOutputDirectory.get().asFile,
@@ -135,6 +150,9 @@ fun Project.registerComposeCompilerReportGenTaskForVariant(variant: Variant): Ta
135150
reportName.set(reportExtension.name)
136151
composeRawMetricsOutputDirectory.set(reportExtension.composeRawMetricsOutputDirectory)
137152
outputDirectory.set(layout.dir(reportExtension.outputDirectory))
153+
includeStableComposables.set(reportExtension.includeStableComposables)
154+
includeStableClasses.set(reportExtension.includeStableClasses)
155+
includeClasses.set(reportExtension.includeClasses)
138156

139157
group = "compose compiler report"
140158
description = "Generate Compose Compiler Metrics and Report"

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.1
4+
VERSION_NAME=1.1.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.1",
10+
"version": "1.1.0",
1111
"jdeploy": {
1212
"jdk": false,
1313
"javaVersion": "11",

report-generator/src/main/kotlin/dev/shreyaspatil/composeCompilerMetricsGenerator/generator/ReportSpec.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,17 @@ package dev.shreyaspatil.composeCompilerMetricsGenerator.generator
2525

2626
/**
2727
* Specification of a report
28-
*
29-
* TODO: See if more specifications needed in future
3028
*/
3129
data class ReportSpec(
3230
val name: String,
31+
val options: ReportOptions = ReportOptions(),
32+
)
33+
34+
/**
35+
* Options for a report
36+
*/
37+
data class ReportOptions(
38+
val includeStableComposables: Boolean = true,
39+
val includeStableClasses: Boolean = true,
40+
val includeClasses: Boolean = true,
3341
)

report-generator/src/main/kotlin/dev/shreyaspatil/composeCompilerMetricsGenerator/generator/content/ClassReport.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ import kotlinx.html.td
4343
import kotlinx.html.th
4444
import kotlinx.html.tr
4545

46-
fun FlowContent.ClassesReport(report: ClassesReport) {
46+
fun FlowContent.ClassesReport(
47+
includeStableClasses: Boolean,
48+
report: ClassesReport,
49+
) {
4750
if (report.classes.isEmpty()) {
4851
EmptyContent("No Class Report")
4952
return
@@ -65,10 +68,10 @@ fun FlowContent.ClassesReport(report: ClassesReport) {
6568
ClassesReport(report.unstableClasses)
6669
}
6770
} else {
68-
EmptyContent("No Unstable classes found")
71+
EmptyContent("No Unstable classes found 😁")
6972
}
7073

71-
if (report.stableClasses.isNotEmpty()) {
74+
if (report.stableClasses.isNotEmpty() && !includeStableClasses) {
7275
CollapsibleContent(
7376
summary = "Stable Classes",
7477
summaryAttr = {
@@ -83,7 +86,12 @@ fun FlowContent.ClassesReport(report: ClassesReport) {
8386
}
8487
} else {
8588
br { }
86-
EmptyContent("No Stable classes found")
89+
val message = if (!includeStableClasses) {
90+
"Report for stable classes is disabled in the options"
91+
} else {
92+
"No Stable classes found"
93+
}
94+
EmptyContent(message)
8795
}
8896
}
8997
}

0 commit comments

Comments
 (0)