This is an automated email from the ASF dual-hosted git repository.

jdaugherty pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/grails-intellij-plugin.git


The following commit(s) were added to refs/heads/main by this push:
     new c1935d8  Fix mechanical deprecation warnings
c1935d8 is described below

commit c1935d8b25c4efc3b479d52b3b3659fe98026c07
Author: James Daugherty <[email protected]>
AuthorDate: Mon Jul 20 12:00:58 2026 -0500

    Fix mechanical deprecation warnings
    
    Replace deprecated APIs with their supported equivalents:
    - Kotlin String.capitalize()/decapitalize() -> replaceFirstChar
    - Query.asIterable() -> findAll()
    - Class.newInstance() -> getDeclaredConstructor().newInstance()
    - new URL(String) -> new URI(String).toURL()
    - JDOMExternalizer -> local helpers preserving the <setting> XML format
    - FilenameIndex.getFilesByName -> getVirtualFilesByName + PsiManager
---
 .../jetbrains/plugins/grails/artefact/impl/util.kt |  6 +--
 .../editor/toolbar/GrailsGoToArtefactActionBase.kt |  2 +-
 .../grails/editor/toolbar/GrailsToolbarActions.kt  |  6 +--
 .../plugins/grails/lang/GormTraitContributor.kt    |  4 +-
 .../plugins/grails/plugins/descriptors.kt          |  2 +-
 src/org/jetbrains/plugins/grails/plugins/impl.kt   |  2 +-
 .../projectView/impl/OldGrailsNodeProvider.kt      |  2 +-
 .../grails/references/EnhancesTraitsCollector.kt   |  2 +-
 ...GrailsMethodNamedArgumentReferenceProvider.java |  2 +-
 .../GrailsPluginListReferenceProvider.java         | 19 +++++---
 .../grails/runner/GrailsRunConfiguration.java      | 19 ++++----
 ...atableRunConfigurationWithCommonParameters.java | 55 ++++++++++++++++++----
 .../impl/GrailsInstallationCommandExecutor.java    |  9 +++-
 .../grails/spring/GrailsSpringBeanDiscoverer.java  |  2 +-
 .../plugins/grails/util/GrailsArtifact.java        |  5 +-
 15 files changed, 94 insertions(+), 43 deletions(-)

diff --git a/src/org/jetbrains/plugins/grails/artefact/impl/util.kt 
b/src/org/jetbrains/plugins/grails/artefact/impl/util.kt
index 06855fc..d2e9cda 100644
--- a/src/org/jetbrains/plugins/grails/artefact/impl/util.kt
+++ b/src/org/jetbrains/plugins/grails/artefact/impl/util.kt
@@ -87,7 +87,7 @@ private fun 
GrailsArtefactHandler.collectConventionalArtefacts(application: Grai
   val resultScope = artefactDirectoryScope.intersectWith(scope)
   return AllClassesSearch.search(resultScope, project) { className ->
     className.endsWith(artefactClassSuffix)
-  }.asIterable().filter { artefactClass ->
+  }.findAll().filter { artefactClass ->
     val file = artefactClass.containingFile?.virtualFile
     file?.nameWithoutExtension == artefactClass.name && file?.fileType == 
GroovyFileType.GROOVY_FILE_TYPE
   }
@@ -134,7 +134,7 @@ private fun 
GrailsArtefactHandler.collectAnnotatedArtefacts(application: GrailsA
 
   val annotationClass = 
JavaPsiFacade.getInstance(project).findClass(GRAILS_ARTEFACT_ARTEFACT,
                                                                      
annotationClassSearchScope) ?: return null
-  return AnnotatedElementsSearch.searchPsiClasses(annotationClass, 
scope).asIterable().filter { artefactClass ->
+  return AnnotatedElementsSearch.searchPsiClasses(annotationClass, 
scope).findAll().filter { artefactClass ->
     artefactClass.containingFile?.virtualFile?.fileType == 
GroovyFileType.GROOVY_FILE_TYPE
     && artefactClass.name?.endsWith(artefactClassSuffix) ?: false
     && 
artefactClass.modifierList?.findAnnotation(GRAILS_ARTEFACT_ARTEFACT)?.let {
@@ -151,7 +151,7 @@ private fun 
GrailsArtefactHandler.collectSpecificAnnotatedArtefacts(application:
   val project = application.project
   val annotationClassSearchScope = application.getScope(true, false)
   JavaPsiFacade.getInstance(project).findClass(annotationFqn, 
annotationClassSearchScope)?.let { annotationClass ->
-    AnnotatedElementsSearch.searchPsiClasses(annotationClass, 
scope).asIterable().filter { artefactClass ->
+    AnnotatedElementsSearch.searchPsiClasses(annotationClass, 
scope).findAll().filter { artefactClass ->
       artefactClass.containingFile?.virtualFile?.fileType == 
GroovyFileType.GROOVY_FILE_TYPE &&
       artefactClass.name?.endsWith(artefactClassSuffix) ?: false
     }
diff --git 
a/src/org/jetbrains/plugins/grails/editor/toolbar/GrailsGoToArtefactActionBase.kt
 
b/src/org/jetbrains/plugins/grails/editor/toolbar/GrailsGoToArtefactActionBase.kt
index c8bc248..f043215 100644
--- 
a/src/org/jetbrains/plugins/grails/editor/toolbar/GrailsGoToArtefactActionBase.kt
+++ 
b/src/org/jetbrains/plugins/grails/editor/toolbar/GrailsGoToArtefactActionBase.kt
@@ -28,7 +28,7 @@ import javax.swing.Icon
 abstract class GrailsGoToArtefactActionBase(private val artefactType: 
GrailsArtifact) : GrailsToolbarTargetAction<PsiClass>() {
 
   @NlsSafe override fun getTitle(artefactData: ArtefactData): String {
-    return artefactData.artefactName.capitalize() + artefactType.suffix
+    return artefactData.artefactName.replaceFirstChar { it.uppercaseChar() } + 
artefactType.suffix
   }
 
   override fun getNavigateTargets(artefactData: ArtefactData): 
MutableCollection<GrClassDefinition> = artefactType.getInstances(
diff --git 
a/src/org/jetbrains/plugins/grails/editor/toolbar/GrailsToolbarActions.kt 
b/src/org/jetbrains/plugins/grails/editor/toolbar/GrailsToolbarActions.kt
index 28f7cb0..d898ac6 100644
--- a/src/org/jetbrains/plugins/grails/editor/toolbar/GrailsToolbarActions.kt
+++ b/src/org/jetbrains/plugins/grails/editor/toolbar/GrailsToolbarActions.kt
@@ -74,7 +74,7 @@ class GoToViewAction : GrailsToolbarVfileAction() {
   override fun isOpenSingle(): Boolean = false
 
   @ActionText override fun getTitle(artefactData: ArtefactData): String =
-    GrailsBundle.message("action.text.go.to.views", 
artefactData.artefactName.capitalize())
+    GrailsBundle.message("action.text.go.to.views", 
artefactData.artefactName.replaceFirstChar { it.uppercaseChar() })
 
   override fun getNavigateTargets(artefactData: ArtefactData): 
Collection<VirtualFile> = VfsUtil.findRelativeFile(
     artefactData.application.appRoot, GrailsUtils.VIEWS_DIRECTORY, 
artefactData.artefactName
@@ -94,7 +94,7 @@ class GoToTestAction : GrailsToolbarVfileAction() {
   override fun isOpenSingle(): Boolean = false
 
   @ActionText override fun getTitle(artefactData: ArtefactData): String =
-    GrailsBundle.message("action.text.go.to.tests", 
artefactData.artefactName.capitalize())
+    GrailsBundle.message("action.text.go.to.tests", 
artefactData.artefactName.replaceFirstChar { it.uppercaseChar() })
 
   override fun getNavigateTargets(artefactData: ArtefactData): 
Collection<VirtualFile> {
     val result = mutableListOf<VirtualFile>()
@@ -110,7 +110,7 @@ class GoToTestAction : GrailsToolbarVfileAction() {
     return result
   }
 
-  override fun createGenerateActions(artefactData: ArtefactData): 
Collection<AnAction> = artefactData.artefactName.capitalize().let {
+  override fun createGenerateActions(artefactData: ArtefactData): 
Collection<AnAction> = artefactData.artefactName.replaceFirstChar { 
it.uppercaseChar() }.let {
     listOf(
       GenerateTestsAction(false, artefactData.artefactName, 
GrailsArtifact.DOMAIN).apply {
         templatePresentation.text = 
GrailsBundle.message("action.text.generate.tests.unit", it)
diff --git a/src/org/jetbrains/plugins/grails/lang/GormTraitContributor.kt 
b/src/org/jetbrains/plugins/grails/lang/GormTraitContributor.kt
index a289bf1..3d024cb 100644
--- a/src/org/jetbrains/plugins/grails/lang/GormTraitContributor.kt
+++ b/src/org/jetbrains/plugins/grails/lang/GormTraitContributor.kt
@@ -85,7 +85,7 @@ class GormTraitContributor : AstTransformationSupport {
       if (initializer is GrLiteral) {
         val value = initializer.value
         if (value is String) {
-          return value.capitalize()
+          return value.replaceFirstChar { it.uppercaseChar() }
         }
       }
     }
@@ -112,7 +112,7 @@ class GormTraitContributor : AstTransformationSupport {
     })
     
gormEntity.putUserData(GroovyDirectInheritorsSearcher.IGNORE_INHERITANCE_CHECK, 
true)
     val query = ClassInheritorsSearch.search(gormEntity, scope, true)
-    val traits = query.asIterable().asSequence().filter {
+    val traits = query.findAll().asSequence().filter {
       GrTraitUtil.isTrait(it)
     }
     
gormEntity.removeUserData(GroovyDirectInheritorsSearcher.IGNORE_INHERITANCE_CHECK)
diff --git a/src/org/jetbrains/plugins/grails/plugins/descriptors.kt 
b/src/org/jetbrains/plugins/grails/plugins/descriptors.kt
index c9e1c77..54fdc93 100644
--- a/src/org/jetbrains/plugins/grails/plugins/descriptors.kt
+++ b/src/org/jetbrains/plugins/grails/plugins/descriptors.kt
@@ -24,7 +24,7 @@ interface GrailsPluginDescriptor {
   val pluginClass: PsiClass
   val pluginVersion: String?
   val pluginName: String
-    get() = pluginClass.name?.removeSuffix(pluginClassSuffix)?.decapitalize() 
?: ""
+    get() = 
pluginClass.name?.removeSuffix(pluginClassSuffix)?.replaceFirstChar { 
it.lowercaseChar() } ?: ""
 
 }
 
diff --git a/src/org/jetbrains/plugins/grails/plugins/impl.kt 
b/src/org/jetbrains/plugins/grails/plugins/impl.kt
index fe47972..92ecc21 100644
--- a/src/org/jetbrains/plugins/grails/plugins/impl.kt
+++ b/src/org/jetbrains/plugins/grails/plugins/impl.kt
@@ -44,7 +44,7 @@ fun GrailsApplication.getSourcePlugins(): 
Collection<Grails3SourcePluginDescript
 private fun GrailsApplication.doComputeSourcePlugins(): 
Collection<Grails3SourcePluginDescriptor> {
   return AllClassesSearch.search(getScope(true, false), project) { className ->
     className.endsWith(pluginClassSuffix)
-  }.asIterable().mapNotNull {
+  }.findAll().mapNotNull {
     val application = GrailsApplicationManager.findApplication(it)
     if (application == null || application == this) null
     else Grails3SourcePluginDescriptor(it, application)
diff --git 
a/src/org/jetbrains/plugins/grails/projectView/impl/OldGrailsNodeProvider.kt 
b/src/org/jetbrains/plugins/grails/projectView/impl/OldGrailsNodeProvider.kt
index f644e8a..c7d4721 100644
--- a/src/org/jetbrains/plugins/grails/projectView/impl/OldGrailsNodeProvider.kt
+++ b/src/org/jetbrains/plugins/grails/projectView/impl/OldGrailsNodeProvider.kt
@@ -69,7 +69,7 @@ class OldGrailsNodeProvider : GrailsViewNodeProvider {
         for (child in srcDir.children) {
           manager.findDirectory(child)?.let {
             val name = child.name
-            val icon = (Language.findLanguageByID(name.capitalize()) ?: 
Language.findLanguageByID(name.uppercase(Locale.getDefault())))
+            val icon = (Language.findLanguageByID(name.replaceFirstChar { 
it.uppercaseChar() }) ?: 
Language.findLanguageByID(name.uppercase(Locale.getDefault())))
                 ?.associatedFileType?.icon ?: PlatformIcons.SOURCE_FOLDERS_ICON
             result += GrailsPsiDirectoryNode(it, settings, icon, SRC_FOLDERS, 
"Sources:$name", ::shouldShowItem)
           }
diff --git 
a/src/org/jetbrains/plugins/grails/references/EnhancesTraitsCollector.kt 
b/src/org/jetbrains/plugins/grails/references/EnhancesTraitsCollector.kt
index e537921..127cfc6 100644
--- a/src/org/jetbrains/plugins/grails/references/EnhancesTraitsCollector.kt
+++ b/src/org/jetbrains/plugins/grails/references/EnhancesTraitsCollector.kt
@@ -50,7 +50,7 @@ private fun doFindTraits(project: Project, scope: 
GlobalSearchScope): Map<String
   val annotationClass = 
JavaPsiFacade.getInstance(project).findClass(annotationFqn, scope) ?: return 
emptyMap()
   val annotatedClasses = 
AnnotatedElementsSearch.searchPsiClasses(annotationClass, scope)
   val result = mutableMapOf<String, MutableCollection<String>>()
-  for (clazz in annotatedClasses.asIterable()) {
+  for (clazz in annotatedClasses.findAll()) {
     if (!GrTraitUtil.isTrait(clazz)) continue
     val traitFqn = clazz.qualifiedName ?: continue
     val annotation = AnnotationUtil.findAnnotation(clazz, annotationFqn) ?: 
continue
diff --git 
a/src/org/jetbrains/plugins/grails/references/GrailsMethodNamedArgumentReferenceProvider.java
 
b/src/org/jetbrains/plugins/grails/references/GrailsMethodNamedArgumentReferenceProvider.java
index d7c1795..8ec018e 100644
--- 
a/src/org/jetbrains/plugins/grails/references/GrailsMethodNamedArgumentReferenceProvider.java
+++ 
b/src/org/jetbrains/plugins/grails/references/GrailsMethodNamedArgumentReferenceProvider.java
@@ -237,7 +237,7 @@ public final class 
GrailsMethodNamedArgumentReferenceProvider extends PsiReferen
     private void ensureInit() {
       if (myInstance == null) {
         try {
-          myInstance = myClass.newInstance();
+          myInstance = myClass.getDeclaredConstructor().newInstance();
         }
         catch (Exception e) {
           throw new RuntimeException(e);
diff --git 
a/src/org/jetbrains/plugins/grails/references/pluginClass/GrailsPluginListReferenceProvider.java
 
b/src/org/jetbrains/plugins/grails/references/pluginClass/GrailsPluginListReferenceProvider.java
index 4a77f82..8bd5e15 100644
--- 
a/src/org/jetbrains/plugins/grails/references/pluginClass/GrailsPluginListReferenceProvider.java
+++ 
b/src/org/jetbrains/plugins/grails/references/pluginClass/GrailsPluginListReferenceProvider.java
@@ -24,6 +24,7 @@ import com.intellij.psi.PsiClass;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiField;
 import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiManager;
 import com.intellij.psi.PsiModifier;
 import com.intellij.psi.PsiPolyVariantReferenceBase;
 import com.intellij.psi.PsiReference;
@@ -31,6 +32,7 @@ import com.intellij.psi.PsiReferenceProvider;
 import com.intellij.psi.ResolveResult;
 import com.intellij.psi.search.FilenameIndex;
 import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.util.ProcessingContext;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.plugins.grails.GroovyMvcIcons;
@@ -42,6 +44,7 @@ import 
org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literal
 import org.jetbrains.plugins.groovy.lang.resolve.ElementResolveResult;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -84,11 +87,13 @@ public class GrailsPluginListReferenceProvider extends 
PsiReferenceProvider {
 
           Project project = element.getProject();
 
+          PsiManager psiManager = PsiManager.getInstance(project);
           for (String fileName : FilenameIndex.getAllFilenames(project)) {
             if (fileName.endsWith("GrailsPlugin.groovy") && fileName.length() 
> "GrailsPlugin.groovy".length()) {
-              PsiFile[] files = FilenameIndex.getFilesByName(project, 
fileName, GlobalSearchScope.allScope(project));
+              Collection<VirtualFile> files = 
FilenameIndex.getVirtualFilesByName(fileName, 
GlobalSearchScope.allScope(project));
 
-              for (PsiFile file : files) {
+              for (VirtualFile virtualFile : files) {
+                PsiFile file = psiManager.findFile(virtualFile);
                 if (file instanceof GroovyFile) {
                   for (PsiClass psiClass : ((GroovyFile)file).getClasses()) {
                     if (!psiClass.hasModifierProperty(PsiModifier.ABSTRACT) && 
psiClass.getName().endsWith("GrailsPlugin")) {
@@ -120,13 +125,15 @@ public class GrailsPluginListReferenceProvider extends 
PsiReferenceProvider {
 
           GlobalSearchScope searchScope = GlobalSearchScope.allScope(project);
 
-          PsiFile[] files = FilenameIndex.getFilesByName(project, fileName, 
searchScope);
+          Collection<VirtualFile> files = 
FilenameIndex.getVirtualFilesByName(fileName, searchScope);
 
-          if (files.length == 0) return ResolveResult.EMPTY_ARRAY;
+          if (files.isEmpty()) return ResolveResult.EMPTY_ARRAY;
 
-          List<ResolveResult> res = new ArrayList<>(files.length);
+          PsiManager psiManager = PsiManager.getInstance(project);
+          List<ResolveResult> res = new ArrayList<>(files.size());
 
-          for (PsiFile file : files) {
+          for (VirtualFile virtualFile : files) {
+            PsiFile file = psiManager.findFile(virtualFile);
             if (file instanceof GroovyFile) {
               for (PsiClass psiClass : ((GroovyFile)file).getClasses()) {
                 if (!psiClass.hasModifierProperty(PsiModifier.ABSTRACT) && 
psiClass.getName().endsWith("GrailsPlugin")) {
diff --git 
a/src/org/jetbrains/plugins/grails/runner/GrailsRunConfiguration.java 
b/src/org/jetbrains/plugins/grails/runner/GrailsRunConfiguration.java
index 32a3f91..990e565 100644
--- a/src/org/jetbrains/plugins/grails/runner/GrailsRunConfiguration.java
+++ b/src/org/jetbrains/plugins/grails/runner/GrailsRunConfiguration.java
@@ -28,7 +28,6 @@ import com.intellij.openapi.options.SettingsEditor;
 import com.intellij.openapi.options.SettingsEditorGroup;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.InvalidDataException;
-import com.intellij.openapi.util.JDOMExternalizer;
 import com.intellij.openapi.util.NlsContexts.TabTitle;
 import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.WriteExternalException;
@@ -46,7 +45,8 @@ import 
org.jetbrains.plugins.grails.structure.GrailsApplicationManager;
 import org.jetbrains.plugins.groovy.mvc.MvcCommand;
 
 import java.net.MalformedURLException;
-import java.net.URL;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.List;
 
 public final class GrailsRunConfiguration
@@ -135,10 +135,9 @@ public final class GrailsRunConfiguration
       String browserUrl = getLaunchBrowserUrl();
       if (browserUrl != null) {
         try {
-          //noinspection ResultOfObjectAllocationIgnored
-          new URL(browserUrl);
+          new URI(browserUrl).toURL();
         }
-        catch (MalformedURLException e) {
+        catch (MalformedURLException | URISyntaxException | 
IllegalArgumentException e) {
           throw new 
RuntimeConfigurationException(GrailsBundle.message("run.configuration.error.invalid.launch.url"));
         }
       }
@@ -149,9 +148,9 @@ public final class GrailsRunConfiguration
   public void readExternal(@NotNull Element element) throws 
InvalidDataException {
     super.readExternal(element);
 
-    myGrailsApplicationRootPath = JDOMExternalizer.readString(element, 
ROOT_ELEMENT_NAME);
-    myLaunchBrowser = !"false".equals(JDOMExternalizer.readString(element, 
LAUNCH_BROWSER));
-    myLaunchBrowserUrl = JDOMExternalizer.readString(element, 
LAUNCH_BROWSER_URL);
+    myGrailsApplicationRootPath = readSetting(element, ROOT_ELEMENT_NAME);
+    myLaunchBrowser = !"false".equals(readSetting(element, LAUNCH_BROWSER));
+    myLaunchBrowserUrl = readSetting(element, LAUNCH_BROWSER_URL);
 
     final List<GrailsRunConfigurationExtension> configurationExtensions = 
ContainerUtil.findAll(
       GrailsCommandExecutor.EP_NAME.getExtensions(), 
GrailsRunConfigurationExtension.class
@@ -169,9 +168,9 @@ public final class GrailsRunConfiguration
   public void writeExternal(@NotNull Element element) throws 
WriteExternalException {
     super.writeExternal(element);
 
-    JDOMExternalizer.write(element, ROOT_ELEMENT_NAME, 
myGrailsApplicationRootPath);
+    writeSetting(element, ROOT_ELEMENT_NAME, myGrailsApplicationRootPath);
     JdomKt.addOptionTag(element, LAUNCH_BROWSER, 
Boolean.toString(myLaunchBrowser), "setting");
-    JDOMExternalizer.write(element, LAUNCH_BROWSER_URL, myLaunchBrowserUrl);
+    writeSetting(element, LAUNCH_BROWSER_URL, myLaunchBrowserUrl);
 
     final List<GrailsRunConfigurationExtension> configurationExtensions = 
ContainerUtil.findAll(
       GrailsCommandExecutor.EP_NAME.getExtensions(), 
GrailsRunConfigurationExtension.class
diff --git 
a/src/org/jetbrains/plugins/grails/runner/LocatableRunConfigurationWithCommonParameters.java
 
b/src/org/jetbrains/plugins/grails/runner/LocatableRunConfigurationWithCommonParameters.java
index f062a44..3cb0556 100644
--- 
a/src/org/jetbrains/plugins/grails/runner/LocatableRunConfigurationWithCommonParameters.java
+++ 
b/src/org/jetbrains/plugins/grails/runner/LocatableRunConfigurationWithCommonParameters.java
@@ -19,8 +19,8 @@ package org.jetbrains.plugins.grails.runner;
 import com.intellij.execution.configurations.ConfigurationFactory;
 import com.intellij.execution.configurations.LocatableConfigurationBase;
 import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.InvalidDataException;
-import com.intellij.openapi.util.JDOMExternalizer;
 import com.intellij.openapi.util.WriteExternalException;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.util.JdomKt;
@@ -30,6 +30,7 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @ApiStatus.Internal
@@ -82,22 +83,60 @@ public abstract class 
LocatableRunConfigurationWithCommonParameters extends Loca
   @Override
   public void readExternal(@NotNull Element element) throws 
InvalidDataException {
     super.readExternal(element);
-    myVMParameters = JDOMExternalizer.readString(element, "vmparams");
-    myProgramParameters = JDOMExternalizer.readString(element, "cmdLine");
+    myVMParameters = readSetting(element, "vmparams");
+    myProgramParameters = readSetting(element, "cmdLine");
 
-    String sPassParentEnvironment = JDOMExternalizer.readString(element, 
"passParentEnv");
+    String sPassParentEnvironment = readSetting(element, "passParentEnv");
     myPassParentEnv = StringUtil.isEmpty(sPassParentEnvironment) || 
Boolean.parseBoolean(sPassParentEnvironment);
 
     myEnvs.clear();
-    JDOMExternalizer.readMap(element, myEnvs, null, "env");
+    for (Element env : element.getChildren("env")) {
+      String name = env.getAttributeValue("name");
+      if (name != null) {
+        myEnvs.put(name, env.getAttributeValue("value"));
+      }
+    }
   }
 
   @Override
   public void writeExternal(@NotNull Element element) throws 
WriteExternalException {
     super.writeExternal(element);
-    JDOMExternalizer.write(element, "vmparams", myVMParameters);
-    JDOMExternalizer.write(element, "cmdLine", myProgramParameters);
-    JDOMExternalizer.writeMap(element, myEnvs, null, "env");
+    writeSetting(element, "vmparams", myVMParameters);
+    writeSetting(element, "cmdLine", myProgramParameters);
+    myEnvs.keySet().stream().sorted().forEach(name -> {
+      Element env = new Element("env");
+      env.setAttribute("name", name);
+      String value = myEnvs.get(name);
+      if (value != null) {
+        env.setAttribute("value", value);
+      }
+      element.addContent(env);
+    });
     JdomKt.addOptionTag(element, "passParentEnv", 
Boolean.toString(myPassParentEnv), "setting");
   }
+
+  /**
+   * Writes a {@code <setting name=".." value=".."/>} child element, matching 
the legacy
+   * {@code JDOMExternalizer.write} XML format so persisted run configurations 
stay compatible.
+   */
+  protected static void writeSetting(@NotNull Element root, @NotNull String 
name, @Nullable String value) {
+    Element setting = new Element("setting");
+    setting.setAttribute("name", name);
+    setting.setAttribute("value", value == null ? "" : value);
+    root.addContent(setting);
+  }
+
+  /**
+   * Reads the value of a {@code <setting name=".."/>} child element, matching 
the legacy
+   * {@code JDOMExternalizer.readString} XML format.
+   */
+  protected static @Nullable String readSetting(@NotNull Element root, 
@NotNull String name) {
+    List<Element> settings = root.getChildren("setting");
+    for (Element setting : settings) {
+      if (Comparing.strEqual(setting.getAttributeValue("name"), name)) {
+        return setting.getAttributeValue("value");
+      }
+    }
+    return null;
+  }
 }
diff --git 
a/src/org/jetbrains/plugins/grails/runner/impl/GrailsInstallationCommandExecutor.java
 
b/src/org/jetbrains/plugins/grails/runner/impl/GrailsInstallationCommandExecutor.java
index 7b58556..9cd9e81 100644
--- 
a/src/org/jetbrains/plugins/grails/runner/impl/GrailsInstallationCommandExecutor.java
+++ 
b/src/org/jetbrains/plugins/grails/runner/impl/GrailsInstallationCommandExecutor.java
@@ -28,7 +28,7 @@ import com.intellij.openapi.projectRoots.JavaSdkVersion;
 import com.intellij.openapi.projectRoots.Sdk;
 import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.ModuleRootManager;
-import com.intellij.openapi.util.JDOMExternalizer;
+import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Key;
 import com.intellij.openapi.util.io.FileUtil;
 import com.intellij.openapi.util.text.StringUtil;
@@ -179,7 +179,12 @@ public final class GrailsInstallationCommandExecutor
 
   @Override
   public @Nullable Boolean readAdditionalConfiguration(@NotNull Element 
element) {
-    return Boolean.parseBoolean(JDOMExternalizer.readString(element, 
DEPS_CLASSPATH));
+    for (Element setting : element.getChildren("setting")) {
+      if (Comparing.strEqual(setting.getAttributeValue("name"), 
DEPS_CLASSPATH)) {
+        return Boolean.parseBoolean(setting.getAttributeValue("value"));
+      }
+    }
+    return Boolean.FALSE;
   }
 
   @Override
diff --git 
a/src/org/jetbrains/plugins/grails/spring/GrailsSpringBeanDiscoverer.java 
b/src/org/jetbrains/plugins/grails/spring/GrailsSpringBeanDiscoverer.java
index 5ba7154..5576c77 100644
--- a/src/org/jetbrains/plugins/grails/spring/GrailsSpringBeanDiscoverer.java
+++ b/src/org/jetbrains/plugins/grails/spring/GrailsSpringBeanDiscoverer.java
@@ -171,7 +171,7 @@ public final class GrailsSpringBeanDiscoverer extends 
CustomModuleComponentsDisc
         }
       }
     } else {
-      AllClassesSearch.search(scope, module.getProject(), name -> 
name.endsWith("GrailsPlugin")).asIterable().forEach((PsiElement clazz) -> {
+      AllClassesSearch.search(scope, module.getProject(), name -> 
name.endsWith("GrailsPlugin")).findAll().forEach((PsiElement clazz) -> {
         if (!(clazz instanceof GrTypeDefinition)) clazz = 
clazz.getNavigationElement();
         if (!(clazz instanceof GrTypeDefinition)) return;
         List<GrailsResourceBeanExtractor.BeanDescriptor> descriptors = 
GrailsResourceBeanExtractor.getBeanDescriptorsFromPluginClass(
diff --git a/src/org/jetbrains/plugins/grails/util/GrailsArtifact.java 
b/src/org/jetbrains/plugins/grails/util/GrailsArtifact.java
index 2843f9d..d666bba 100644
--- a/src/org/jetbrains/plugins/grails/util/GrailsArtifact.java
+++ b/src/org/jetbrains/plugins/grails/util/GrailsArtifact.java
@@ -340,9 +340,10 @@ public enum GrailsArtifact {
     Project project = module.getProject();
     JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
     GlobalSearchScope scope = 
module.getModuleWithDependenciesAndLibrariesScope(false);
-    PsiFile[] allFiles = FilenameIndex.getFilesByName(project, 
"grails-plugin.xml", scope);
+    PsiManager psiManager = PsiManager.getInstance(project);
     JavaDirectoryService directoryService = JavaDirectoryService.getInstance();
-    for (PsiFile file : allFiles) {
+    for (VirtualFile virtualFile : 
FilenameIndex.getVirtualFilesByName("grails-plugin.xml", scope)) {
+      PsiFile file = psiManager.findFile(virtualFile);
       if (!(file instanceof XmlFile)) continue;
 
       PsiDirectory directory = file.getContainingDirectory();

Reply via email to