Skip to content

Commit 5b04e86

Browse files
committed
PlugGenerator no longer finds plugs, it only generates what was found elsewhere.
1 parent d691de0 commit 5b04e86

File tree

2 files changed

+28
-44
lines changed

2 files changed

+28
-44
lines changed

atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/PlugGenerator.kt

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,18 @@ import java.lang.UnsatisfiedLinkError
2222
import java.lang.reflect.Constructor
2323
import java.lang.reflect.Modifier
2424
import java.net.URLClassLoader
25-
import java.nio.file.FileVisitResult
26-
import java.nio.file.Files
27-
import java.nio.file.Path
28-
import java.nio.file.SimpleFileVisitor
29-
import java.nio.file.attribute.BasicFileAttributes
3025
import java.util.*
3126
import java.util.function.Function
3227
import kotlin.reflect.KFunction
3328
import kotlin.reflect.full.companionObjectInstance
3429
import kotlin.reflect.full.memberFunctions
3530

36-
class PlugGenerator internal constructor(toSearches: List<File>, toLinkAgainst: Set<File>) {
31+
class PlugGenerator
32+
internal constructor(
33+
plugToSocket: Map<String, String>,
34+
toSearches: List<File>,
35+
toLinkAgainst: Set<File>
36+
) {
3737
@JvmField val atplugInf: SortedMap<String, String> = TreeMap()
3838

3939
/** A cache from a plugin interface to a function that converts a class into its metadata. */
@@ -56,22 +56,7 @@ class PlugGenerator internal constructor(toSearches: List<File>, toLinkAgainst:
5656
}!!
5757
as KFunction<Function<Any, String>>
5858
try {
59-
val parser = PlugParser()
60-
// walk toSearch, passing each classfile to load()
61-
for (toSearch in toSearches) {
62-
if (toSearch.isDirectory) {
63-
Files.walkFileTree(
64-
toSearch.toPath(),
65-
object : SimpleFileVisitor<Path>() {
66-
override fun visitFile(file: Path, attrs: BasicFileAttributes): FileVisitResult {
67-
if (file.toString().endsWith(EXT_CLASS)) {
68-
maybeGeneratePlugin(parser, file)
69-
}
70-
return FileVisitResult.CONTINUE
71-
}
72-
})
73-
}
74-
}
59+
plugToSocket.forEach { (plug, socket) -> atplugInf[plug] = generatePlugin(plug, socket) }
7560
} finally {
7661
classLoader.close()
7762
System.setProperty("atplug.generate", "")
@@ -82,18 +67,13 @@ class PlugGenerator internal constructor(toSearches: List<File>, toLinkAgainst:
8267
* Loads a class by its FQN. If it's concrete and implements a plugin, then we'll call
8368
* generatePlugin.
8469
*/
85-
private fun maybeGeneratePlugin(parser: PlugParser, path: Path) {
86-
parser.parse(path.toFile())
87-
if (!parser.hasPlug()) {
88-
return
89-
}
90-
val plugClass = classLoader.loadClass(parser.plugClassName)
91-
val socketClass = classLoader.loadClass(parser.socketClassName)
70+
private fun generatePlugin(plugClassName: String, socketClassName: String): String {
71+
val plugClass = classLoader.loadClass(plugClassName)
72+
val socketClass = classLoader.loadClass(socketClassName)
9273
require(!Modifier.isAbstract(plugClass.modifiers)) {
9374
"Class $plugClass has @Plug($socketClass) but it is abstract."
9475
}
95-
val atplugInfContent = generatePlugin<Any, Any>(plugClass, socketClass)
96-
atplugInf[plugClass.name] = atplugInfContent
76+
return generatePlugin<Any, Any>(plugClass, socketClass)
9777
}
9878

9979
private fun <SocketT, PlugT : SocketT> generatePlugin(
@@ -128,14 +108,18 @@ class PlugGenerator internal constructor(toSearches: List<File>, toLinkAgainst:
128108
* Returns a Map from a plugin's name to its ATPLUG-INF content.
129109
*
130110
* @param toSearch a directory containing class files where we will look for plugin
131-
* implementations
111+
* implementations
132112
* @param toLinkAgainst the classes that these plugins implementations need
133113
* @return a map from component name to is ATPLUG-INF string content
134114
*/
135-
fun generate(toSearch: List<File>, toLinkAgainst: Set<File>): SortedMap<String, String> {
115+
fun generate(
116+
plugToSocket: Map<String, String>,
117+
toSearch: List<File>,
118+
toLinkAgainst: Set<File>
119+
): SortedMap<String, String> {
136120
return try {
137-
val ext = PlugGeneratorJavaExecable(toSearch, toLinkAgainst)
138-
val metadataGen = PlugGenerator(ext.toSearch, ext.toLinkAgainst)
121+
val ext = PlugGeneratorJavaExecable(plugToSocket, toSearch, toLinkAgainst)
122+
val metadataGen = PlugGenerator(plugToSocket, ext.toSearch, ext.toLinkAgainst)
139123
// save our results, with no reference to the guts of what happened inside PluginMetadataGen
140124
metadataGen.atplugInf
141125
} catch (e: Exception) {

atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/PlugGeneratorJavaExecable.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,21 @@ import java.io.File
2020
import java.util.*
2121

2222
/** [PlugGenerator.PlugGenerator] in a [JavaExecable] form. */
23-
class PlugGeneratorJavaExecable(toSearch: List<File>?, toLinkAgainst: Set<File>?) : JavaExecable {
23+
class PlugGeneratorJavaExecable(
24+
plugToSocket: Map<String, String>,
25+
toSearch: List<File>,
26+
toLinkAgainst: Set<File>
27+
) : JavaExecable {
2428
// inputs
25-
var toSearch: List<File>
26-
var toLinkAgainst: Set<File>
29+
var plugToSocket: Map<String, String> = LinkedHashMap(plugToSocket)
30+
var toSearch: List<File> = ArrayList(toSearch)
31+
var toLinkAgainst: Set<File> = LinkedHashSet(toLinkAgainst)
2732

2833
// outputs
2934
@JvmField var atplugInf: SortedMap<String, String>? = null
3035

31-
init {
32-
this.toSearch = ArrayList(toSearch)
33-
this.toLinkAgainst = LinkedHashSet(toLinkAgainst)
34-
}
35-
3636
override fun run() {
37-
val metadataGen = PlugGenerator(toSearch, toLinkAgainst)
37+
val metadataGen = PlugGenerator(plugToSocket, toSearch, toLinkAgainst)
3838
atplugInf = metadataGen.atplugInf
3939
}
4040
}

0 commit comments

Comments
 (0)