You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.4 KiB
Groovy
45 lines
1.4 KiB
Groovy
package org.xbib.gradle.plugin.shadow.internal
|
|
|
|
import org.gradle.api.Project
|
|
import org.gradle.api.file.FileCollection
|
|
import org.gradle.api.tasks.SourceSet
|
|
|
|
class UnusedTracker {
|
|
|
|
private final FileCollection toMinimize
|
|
|
|
private final List<ClazzpathUnit> projectUnits
|
|
|
|
private final Clazzpath clazzPath
|
|
|
|
private UnusedTracker(List<File> classDirs, FileCollection toMinimize) {
|
|
this.toMinimize = toMinimize
|
|
this.clazzPath = new Clazzpath()
|
|
this.projectUnits = classDirs.collect { clazzPath.addClazzpathUnit(it) }
|
|
}
|
|
|
|
Set<String> findUnused() {
|
|
Set<Clazz> unused = clazzPath.clazzes
|
|
for (cpu in projectUnits) {
|
|
unused.removeAll(cpu.clazzes)
|
|
unused.removeAll(cpu.transitiveDependencies)
|
|
}
|
|
unused.collect { it.name }.toSet()
|
|
}
|
|
|
|
void addDependency(File jarOrDir) {
|
|
if (toMinimize.contains(jarOrDir)) {
|
|
clazzPath.addClazzpathUnit(jarOrDir)
|
|
}
|
|
}
|
|
|
|
static UnusedTracker forProject(Project project, FileCollection toMinimize) {
|
|
final List<File> classDirs = new ArrayList<>()
|
|
for (SourceSet sourceSet in project.sourceSets) {
|
|
Iterable<File> classesDirs = sourceSet.output.classesDirs
|
|
classDirs.addAll(classesDirs.findAll { it.isDirectory() })
|
|
}
|
|
return new UnusedTracker(classDirs, toMinimize)
|
|
}
|
|
}
|