diff --git a/gradle/plugins/src/main/java/apigen/depencency_resolver/ApiModelsDependencyResolver.kt b/gradle/plugins/src/main/java/apigen/depencency_resolver/ApiModelsDependencyResolver.kt index e36237d..39a2891 100644 --- a/gradle/plugins/src/main/java/apigen/depencency_resolver/ApiModelsDependencyResolver.kt +++ b/gradle/plugins/src/main/java/apigen/depencency_resolver/ApiModelsDependencyResolver.kt @@ -33,27 +33,39 @@ class ApiModelsDependencyResolver( } fun getDependenciesFromFiles(files: Collection): Set = - files.fold(setOf()) { dependencies, file -> - dependencies + getFileDependencies(file) + files.fold(setOf()) { foundDependencies, file -> + val newDependencies = getFileDependencies(file) + + if (newDependencies.isEmpty()) { + foundDependencies + } else { + foundDependencies + getFileDependencies(file) + } } - private fun getFileDependencies(file: File): Set { - if (handledFiles.contains(file)) { + private fun getFileDependencies(sourceFile: File): Set { + if (handledFiles.contains(sourceFile)) { return emptySet() } - handledFiles.add(file) + handledFiles.add(sourceFile) - val json = JsonSlurper().parse(file) as Map + val json = JsonSlurper().parse(sourceFile) as Map val files = fileParser.getAllTypeNamesFromJson(json) .map { type -> modelTypes[type] - ?: throw IllegalArgumentException("Couldn't resolve $type in ${file.name}") + ?: throw IllegalArgumentException("Couldn't resolve $type in ${sourceFile.name}") } .toSet() - return files.fold(files) { dependencies, myFile -> - dependencies + getFileDependencies(myFile) + return files.fold(files) { foundDependencies, file -> + val newDependencies = getFileDependencies(file) + + if (newDependencies.isEmpty()) { + foundDependencies + } else { + foundDependencies + newDependencies + } } } }