![JAR search and dependency download from the Maven repository](/logo.png)
com.github.roroche.eoplantumlbuilder.classes.ClsInPackage.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eo-plantuml-builder Show documentation
Show all versions of eo-plantuml-builder Show documentation
Kotlin library to build PlantUML diagrams
The newest version!
package com.github.roroche.eoplantumlbuilder.classes
import com.github.roroche.eoplantumlbuilder.classes.exceptions.InvalidPackageException
import com.github.roroche.eoplantumlbuilder.urls.Urls
import io.github.classgraph.ClassGraph
import java.net.URL
import java.net.URLClassLoader
/**
* Utility class to find [Classes] in a given package.
*
* @property packageName The name of the package to scan.
* @property classGraph Utility to find classes in package.
*/
class ClsInPackage(
private val packageName: String,
private val classGraph: ClassGraph
) : Classes {
/**
* Secondary constructor.
*
* @param packageName The name of the package to scan.
* @param classLoader The [ClassLoader] to use.
*/
constructor(
packageName: String,
classLoader: ClassLoader
) : this(
packageName = packageName,
classGraph = ClassGraph(
).whitelistPackages(
packageName
).enableClassInfo(
).overrideClassLoaders(
classLoader
)
)
/**
* Secondary constructor.
*
* @param packageName The name of the package to scan.
* @param urls The [URL] array to use.
*/
constructor(
packageName: String,
urls: Array
) : this(
packageName = packageName,
classLoader = URLClassLoader(urls)
)
/**
* Secondary constructor.
*
* @param packageName The name of the package to scan.
* @param urls The [Urls] to use.
*/
constructor(
packageName: String,
urls: Urls
) : this(
packageName = packageName,
urls = urls.list().toTypedArray()
)
/**
* Secondary constructor.
*
* @param packageName The name of the package to scan.
*/
constructor(
packageName: String
) : this(
packageName = packageName,
classLoader = Thread.currentThread().contextClassLoader
)
/**
* @return Classes to be used for diagram generation.
*/
override fun list(): List> {
classGraph.scan().use { scanResult ->
return scanResult.allClasses.loadClasses().ifEmpty {
throw InvalidPackageException(packageName)
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy