@@ -133,15 +133,30 @@ public TreeVisitor<?, ExecutionContext> getScanner(DependencyVersionState acc) {
133133 @ Nullable
134134 private GradleSettings gradleSettings ;
135135
136+ private final Map <String , String > localVariableValues = new HashMap <>();
137+
136138 @ Override
137139 public @ Nullable J visit (@ Nullable Tree tree , ExecutionContext ctx ) {
138140 if (tree instanceof SourceFile ) {
139141 gradleProject = tree .getMarkers ().findFirst (GradleProject .class ).orElse (null );
140142 gradleSettings = tree .getMarkers ().findFirst (GradleSettings .class ).orElse (null );
143+ localVariableValues .clear ();
141144 }
142145 return super .visit (tree , ctx );
143146 }
144147
148+ @ Override
149+ public J visitVariable (J .VariableDeclarations .NamedVariable variable , ExecutionContext ctx ) {
150+ J .VariableDeclarations .NamedVariable v = (J .VariableDeclarations .NamedVariable ) super .visitVariable (variable , ctx );
151+ if (v .getInitializer () instanceof J .Literal ) {
152+ String value = literalValue (v .getInitializer ());
153+ if (value != null ) {
154+ localVariableValues .put (v .getSimpleName (), value );
155+ }
156+ }
157+ return v ;
158+ }
159+
145160 @ Override
146161 public J visitMethodInvocation (J .MethodInvocation method , ExecutionContext ctx ) {
147162 J .MethodInvocation m = (J .MethodInvocation ) super .visitMethodInvocation (method , ctx );
@@ -185,20 +200,34 @@ public J visitMethodInvocation(J.MethodInvocation method, ExecutionContext ctx)
185200
186201 G .GString .Value gStringValue = (G .GString .Value ) gString .getStrings ().get (0 );
187202 String versionVariableName = gStringValue .getTree ().toString ();
203+ String resolverPluginId = pluginId ;
204+ if ("kotlin" .equals (pluginId )) {
205+ resolverPluginId = String .format ("org.jetbrains.%s.%s" , pluginId , literalValue (pluginArgs .get (0 )));
206+ }
188207 String resolvedPluginVersion = new DependencyVersionSelector (metadataFailures , gradleProject , gradleSettings )
189- .select (new GroupArtifact (pluginId , pluginId + ".gradle.plugin" ), "classpath" , newVersion , versionPattern , ctx );
208+ .select (new GroupArtifact (resolverPluginId , resolverPluginId + ".gradle.plugin" ), "classpath" , newVersion , versionPattern , ctx );
190209
191210 acc .versionPropNameToPluginId .put (versionVariableName , pluginId );
192211 assert resolvedPluginVersion != null ;
193212 acc .pluginIdToNewVersion .put (pluginId , resolvedPluginVersion );
194213 } else if (versionArgs .get (0 ) instanceof J .Identifier ) {
195214 J .Identifier identifier = (J .Identifier ) versionArgs .get (0 );
196215 String versionVariableName = identifier .getSimpleName ();
197- String resolvedPluginVersion = new DependencyVersionSelector (metadataFailures , gradleProject , gradleSettings )
198- .select (new GroupArtifact (pluginId , pluginId + ".gradle.plugin" ), "classpath" , newVersion , versionPattern , ctx );
216+ String resolverPluginId = pluginId ;
217+ if ("kotlin" .equals (pluginId )) {
218+ resolverPluginId = String .format ("org.jetbrains.%s.%s" , pluginId , literalValue (pluginArgs .get (0 )));
219+ }
220+ String localCurrentVersion = localVariableValues .get (versionVariableName );
221+ String resolvedPluginVersion ;
222+ if (localCurrentVersion != null ) {
223+ resolvedPluginVersion = new DependencyVersionSelector (metadataFailures , gradleProject , gradleSettings )
224+ .select (new GroupArtifactVersion (resolverPluginId , resolverPluginId + ".gradle.plugin" , localCurrentVersion ), "classpath" , newVersion , versionPattern , ctx );
225+ } else {
226+ resolvedPluginVersion = new DependencyVersionSelector (metadataFailures , gradleProject , gradleSettings )
227+ .select (new GroupArtifact (resolverPluginId , resolverPluginId + ".gradle.plugin" ), "classpath" , newVersion , versionPattern , ctx );
228+ }
199229
200230 acc .versionPropNameToPluginId .put (versionVariableName , pluginId );
201- assert resolvedPluginVersion != null ;
202231 acc .pluginIdToNewVersion .put (pluginId , resolvedPluginVersion );
203232 }
204233 } catch (MavenDownloadingException e ) {
0 commit comments