@@ -11,6 +11,7 @@ import com.picpay.gradlelint.versioncheck.api.Api
11
11
import com.picpay.gradlelint.versioncheck.cache.RepositoryCache
12
12
import com.picpay.gradlelint.versioncheck.extensions.containsVersionNumber
13
13
import com.picpay.gradlelint.versioncheck.extensions.findBuildSrcFromProjectDir
14
+ import com.picpay.gradlelint.versioncheck.extensions.findKotlinFilesWithSuffix
14
15
import com.picpay.gradlelint.versioncheck.extensions.getVarNameInVersionDeclaration
15
16
import com.picpay.gradlelint.versioncheck.extensions.getVarValueFromVersionsFileLines
16
17
import com.picpay.gradlelint.versioncheck.extensions.isVersionNumber
@@ -30,7 +31,7 @@ class VersionCheckerGradleLint : Detector(), Detector.GradleScanner {
30
31
private var repositoryHandler: MavenRemoteRepositoryHandler ? = null
31
32
private var buildSrcDir: File ? = null
32
33
private var versionsProperties: Properties ? = null
33
- private var dependenciesFileLines = emptyList <String >()
34
+ private var buildSrcKotlinFiles = mutableMapOf <String , File >()
34
35
35
36
override fun checkDslPropertyAssignment (
36
37
context : GradleContext ,
@@ -73,49 +74,48 @@ class VersionCheckerGradleLint : Detector(), Detector.GradleScanner {
73
74
): Library ? {
74
75
75
76
val properties = readVersionCheckerProperties(context.project.dir)
76
- val dependenciesFileName = properties.getProperty(LINT_DEPENDENCIES_PROPERTY )
77
- val versionsFile = properties.getProperty(LINT_VERSIONS_PROPERTY )
77
+ val versionsFileName = properties.getProperty(LINT_VERSIONS_PROPERTY )
78
+ val suffix = properties.getProperty(LINT_SUFFIX_PROPERTY )
78
79
79
80
val enableCheckForPreReleases: Boolean = properties
80
81
.getProperty(LINT_ENABLE_CHECK_PRE_RELEASES )
81
82
?.toBoolean() ? : false
82
83
83
- if (versionsFile != dependenciesFileName) {
84
- // TODO: fazer a busca em arquivos diferentes
85
- }
86
-
87
- val linesFromDependencyFile = getDependenciesFileLines(
88
- dependenciesFile = File (
89
- getBuildSrcDir(context.project.dir).absolutePath,
90
- " src${File .separator} " +
91
- " main${File .separator} " +
92
- " java${File .separator} " +
93
- " $dependenciesFileName .kt"
94
- )
84
+ val librariesKotlinFiles = getMapOfKotlinFilesFromBuildSrc(
85
+ buildSrcDir = getBuildSrcDir(context.project.dir),
86
+ librariesFileSuffix = suffix,
87
+ versionFileName = versionsFileName
95
88
)
96
89
90
+ val nameToFindLibDeclaration = value.split(" ." ).first()
91
+ val libraryDeclarationFile: File = librariesKotlinFiles[nameToFindLibDeclaration] ? : return null
92
+ val versionDeclarationFile: File = librariesKotlinFiles[versionsFileName] ? : return null
93
+
97
94
return extractLibraryFromFileLines(
98
95
valueInGradle = value,
99
- fileLines = linesFromDependencyFile,
96
+ libraryDeclarationFile = libraryDeclarationFile,
97
+ versionDeclarationFile = versionDeclarationFile,
100
98
enableCheckForPreReleases = enableCheckForPreReleases
101
99
)
102
100
}
103
101
104
102
private fun extractLibraryFromFileLines (
105
103
valueInGradle : String ,
106
- fileLines : List <String >,
104
+ libraryDeclarationFile : File ,
105
+ versionDeclarationFile : File ,
107
106
enableCheckForPreReleases : Boolean
108
107
): Library ? {
109
108
110
109
var extractedLibrary: Library ? = null
110
+ val libraryDeclarationFileLines = libraryDeclarationFile.readLines()
111
111
112
- fileLines .forEachIndexed { index, line ->
112
+ libraryDeclarationFileLines .forEachIndexed { index, line ->
113
113
114
114
val dependencyVarName = valueInGradle.split(" ." )[1 ]
115
115
if (line.tokenize().contains(dependencyVarName) && ! line.containsVersionNumber()) {
116
116
117
117
val dependency = if (! line.contains(" $" )) {
118
- dependenciesFileLines [index + 1 ].removeComments()
118
+ libraryDeclarationFileLines [index + 1 ].removeComments()
119
119
} else {
120
120
line.split(" =" )[1 ].removeComments()
121
121
}
@@ -126,7 +126,9 @@ class VersionCheckerGradleLint : Detector(), Detector.GradleScanner {
126
126
.trim()
127
127
128
128
val versionVarName = dependencyCleaned[1 ].getVarNameInVersionDeclaration()
129
- val versionNumber = fileLines.getVarValueFromVersionsFileLines(versionVarName)
129
+ val versionNumber = versionDeclarationFile.readLines()
130
+ .getVarValueFromVersionsFileLines(versionVarName)
131
+
130
132
val version = versionNumber.replace(" \" " , " " )
131
133
132
134
if (version.isVersionNumber(enableCheckForPreReleases)) {
@@ -138,11 +140,17 @@ class VersionCheckerGradleLint : Detector(), Detector.GradleScanner {
138
140
return extractedLibrary
139
141
}
140
142
141
- private fun getDependenciesFileLines (dependenciesFile : File ): List <String > {
142
- if (dependenciesFileLines.isEmpty()) {
143
- dependenciesFileLines = dependenciesFile.readLines()
143
+ private fun getMapOfKotlinFilesFromBuildSrc (
144
+ buildSrcDir : File ,
145
+ librariesFileSuffix : String ,
146
+ versionFileName : String
147
+ ): Map <String , File > {
148
+ if (buildSrcKotlinFiles.isEmpty()) {
149
+ val whatToFind = listOf (librariesFileSuffix, versionFileName)
150
+ buildSrcDir.findKotlinFilesWithSuffix(whatToFind)
151
+ .also { fileMap -> buildSrcKotlinFiles.putAll(fileMap) }
144
152
}
145
- return dependenciesFileLines
153
+ return buildSrcKotlinFiles
146
154
}
147
155
148
156
private fun readVersionCheckerProperties (projectDir : File ): Properties {
@@ -153,8 +161,8 @@ class VersionCheckerGradleLint : Detector(), Detector.GradleScanner {
153
161
)
154
162
Properties ().apply {
155
163
if (! versionLintPropertiesFile.exists()) {
156
- put(LINT_DEPENDENCIES_PROPERTY , " Dependencies" )
157
164
put(LINT_SUFFIX_PROPERTY , " Libs" )
165
+ put(LINT_VERSIONS_PROPERTY , " Versions" )
158
166
put(LINT_ENABLE_CHECK_PRE_RELEASES , " false" )
159
167
put(LINT_CACHE_LIFETIME , " 60" )
160
168
store(
@@ -198,7 +206,6 @@ class VersionCheckerGradleLint : Detector(), Detector.GradleScanner {
198
206
companion object {
199
207
200
208
private const val LINT_PROPERTIES = " versionlint.properties"
201
- private const val LINT_DEPENDENCIES_PROPERTY = " versionlint.dependencies.file"
202
209
private const val LINT_SUFFIX_PROPERTY = " versionlint.dependencies.suffix"
203
210
private const val LINT_VERSIONS_PROPERTY = " versionlint.versions.file"
204
211
private const val LINT_ENABLE_CHECK_PRE_RELEASES = " versionlint.prerelease.enable"
@@ -226,7 +233,7 @@ class VersionCheckerGradleLint : Detector(), Detector.GradleScanner {
226
233
7 ,
227
234
Severity .WARNING ,
228
235
IMPLEMENTATION
229
- ).setEnabledByDefault(false )
236
+ ).setEnabledByDefault(true )
230
237
231
238
}
232
239
}
0 commit comments