Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions api/api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package com.autonomousapps {
method public final org.gradle.api.file.RegularFileProperty adviceOutput();
method public final void app();
method public final void registerPostProcessingTask(org.gradle.api.tasks.TaskProvider<? extends com.autonomousapps.AbstractPostProcessingTask> task);
method public final org.gradle.api.provider.MapProperty<java.lang.String,org.gradle.api.file.RegularFile> typeUsageOutputs();
field public static final String NAME = "dependencyAnalysis";
}

Expand All @@ -28,6 +29,7 @@ package com.autonomousapps {
method public final void issues(org.gradle.api.Action<com.autonomousapps.extension.IssueHandler> action);
method public final void reporting(org.gradle.api.Action<com.autonomousapps.extension.ReportingHandler> action);
method public final void structure(org.gradle.api.Action<com.autonomousapps.extension.DependenciesHandler> action);
method public final void typeUsage(org.gradle.api.Action<com.autonomousapps.extension.TypeUsageHandler> action);
method public final void usage(org.gradle.api.Action<com.autonomousapps.extension.UsageHandler> action);
method @Deprecated public final void usages(org.gradle.api.Action<com.autonomousapps.extension.UsageHandler> action);
method public final void useTypesafeProjectAccessors(boolean enable);
Expand All @@ -44,12 +46,20 @@ package com.autonomousapps {
method public final void abi(org.gradle.api.Action<com.autonomousapps.extension.AbiHandler> action);
method public final void issues(org.gradle.api.Action<com.autonomousapps.extension.ProjectIssueHandler> action);
method public final void structure(org.gradle.api.Action<com.autonomousapps.extension.DependenciesHandler> action);
method public final void typeUsage(org.gradle.api.Action<com.autonomousapps.extension.TypeUsageHandler> action);
}

public final class Flags {
field public static final com.autonomousapps.Flags INSTANCE;
}

@org.gradle.work.DisableCachingByDefault(because="Writes to console") public abstract class ListSourceFilesTask extends org.gradle.api.DefaultTask {
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not related to this PR

ctor public ListSourceFilesTask();
method @org.gradle.api.tasks.TaskAction public final void action();
method @org.gradle.api.tasks.Nested public abstract org.gradle.api.provider.ListProperty<com.autonomousapps.internal.kotlin.multiplatform.FileCollectionMap> getFiles();
property @org.gradle.api.tasks.Nested public abstract org.gradle.api.provider.ListProperty<com.autonomousapps.internal.kotlin.multiplatform.FileCollectionMap> files;
}

}

package com.autonomousapps.exception {
Expand Down Expand Up @@ -214,6 +224,13 @@ package com.autonomousapps.extension {
method public String getName();
}

public abstract class TypeUsageHandler {
ctor @javax.inject.Inject public TypeUsageHandler(org.gradle.api.model.ObjectFactory objects);
method public final void excludePackages(java.lang.String... packages);
method public final void excludeRegex(@org.intellij.lang.annotations.Language("RegExp") java.lang.String... patterns);
method public final void excludeTypes(java.lang.String... types);
}

public final class Undefined extends com.autonomousapps.extension.Behavior {
ctor public Undefined();
ctor public Undefined(java.util.Set<? extends com.autonomousapps.extension.Exclusion> filter = mutableSetOf(), String sourceSetName = "__all");
Expand Down Expand Up @@ -509,6 +526,50 @@ package com.autonomousapps.model {
property public String identifier;
}

@com.squareup.moshi.JsonClass(generateAdapter=false) public final class ProjectTypeUsage {
ctor public ProjectTypeUsage(String projectPath, com.autonomousapps.model.TypeUsageSummary summary, java.util.Map<java.lang.String,java.lang.Integer> internal, java.util.Map<java.lang.String,? extends java.util.Map<java.lang.String,java.lang.Integer>> projectDependencies, java.util.Map<java.lang.String,? extends java.util.Map<java.lang.String,java.lang.Integer>> libraryDependencies, java.util.Map<java.lang.String,java.lang.Integer> unknownDependencies = emptyMap());
method public String component1();
method public com.autonomousapps.model.TypeUsageSummary component2();
method public java.util.Map<java.lang.String,java.lang.Integer> component3();
method public java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.Integer>> component4();
method public java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.Integer>> component5();
method public java.util.Map<java.lang.String,java.lang.Integer> component6();
method public com.autonomousapps.model.ProjectTypeUsage copy(String projectPath, com.autonomousapps.model.TypeUsageSummary summary, java.util.Map<java.lang.String,java.lang.Integer> internal, java.util.Map<java.lang.String,? extends java.util.Map<java.lang.String,java.lang.Integer>> projectDependencies, java.util.Map<java.lang.String,? extends java.util.Map<java.lang.String,java.lang.Integer>> libraryDependencies, java.util.Map<java.lang.String,java.lang.Integer> unknownDependencies);
method public java.util.Map<java.lang.String,java.lang.Integer> getInternal();
method public java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.Integer>> getLibraryDependencies();
method public java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.Integer>> getProjectDependencies();
method public String getProjectPath();
method public com.autonomousapps.model.TypeUsageSummary getSummary();
method public java.util.Map<java.lang.String,java.lang.Integer> getUnknownDependencies();
method public boolean isEmpty();
property public final java.util.Map<java.lang.String,java.lang.Integer> internal;
property public final java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.Integer>> libraryDependencies;
property public final java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.Integer>> projectDependencies;
property public final String projectPath;
property public final com.autonomousapps.model.TypeUsageSummary summary;
property public final java.util.Map<java.lang.String,java.lang.Integer> unknownDependencies;
}

@com.squareup.moshi.JsonClass(generateAdapter=false) public final class TypeUsageSummary {
ctor public TypeUsageSummary(int totalTypes, int totalFiles, int internalTypes, int projectDependencies, int libraryDependencies);
method public int component1();
method public int component2();
method public int component3();
method public int component4();
method public int component5();
method public com.autonomousapps.model.TypeUsageSummary copy(int totalTypes, int totalFiles, int internalTypes, int projectDependencies, int libraryDependencies);
method public int getInternalTypes();
method public int getLibraryDependencies();
method public int getProjectDependencies();
method public int getTotalFiles();
method public int getTotalTypes();
property public final int internalTypes;
property public final int libraryDependencies;
property public final int projectDependencies;
property public final int totalFiles;
property public final int totalTypes;
}

@com.squareup.moshi.JsonClass(generateAdapter=false) public final class Warning implements java.lang.Comparable<com.autonomousapps.model.Warning> {
ctor public Warning(java.util.Set<com.autonomousapps.model.DuplicateClass> duplicateClasses);
method public int compareTo(com.autonomousapps.model.Warning other);
Expand Down
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Solid specs! I'm curious why we can't make more straightforward equality checks.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed it

Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Copyright (c) 2026. Tony Robalik.
// SPDX-License-Identifier: Apache-2.0
package com.autonomousapps.jvm

import com.autonomousapps.jvm.projects.TypeUsageProject
import com.autonomousapps.jvm.projects.TypeUsageWithFiltersProject
import com.autonomousapps.jvm.projects.TypeUsageMultiModuleProject

import static com.autonomousapps.utils.Runner.build
import static com.google.common.truth.Truth.assertThat

final class TypeUsageSpec extends AbstractJvmSpec {
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following project convention to test computeTypeUsageMain task


def "generates type usage report (#gradleVersion)"() {
given:
def project = new TypeUsageProject()
gradleProject = project.gradleProject

when:
build(gradleVersion, gradleProject.rootDir, 'computeTypeUsageMain')

then:
assertThat(project.actualTypeUsage()).isEqualTo(project.expectedTypeUsage())

where:
gradleVersion << gradleVersions()
}

def "excludes filtered types (#gradleVersion)"() {
given:
def project = new TypeUsageWithFiltersProject()
gradleProject = project.gradleProject

when:
build(gradleVersion, gradleProject.rootDir, 'computeTypeUsageMain')

then:
assertThat(project.actualTypeUsage()).isEqualTo(project.expectedTypeUsage())

where:
gradleVersion << gradleVersions()
}

def "tracks type usage across multiple modules (#gradleVersion)"() {
given:
def project = new TypeUsageMultiModuleProject()
gradleProject = project.gradleProject

when:
build(gradleVersion, gradleProject.rootDir, 'computeTypeUsageMain')

then: 'app module'
assertThat(project.actualTypeUsageFor(':app')).isEqualTo(project.expectedAppTypeUsage())

and: 'core module'
assertThat(project.actualTypeUsageFor(':core')).isEqualTo(project.expectedCoreTypeUsage())

and: 'utils module'
assertThat(project.actualTypeUsageFor(':utils')).isEqualTo(project.expectedUtilsTypeUsage())

where:
gradleVersion << gradleVersions()
}
}
Loading