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 b19e81b Fix toolbar resolution
b19e81b is described below
commit b19e81bac9756131f29ac1488a5c8f4b967c772a
Author: James Daugherty <[email protected]>
AuthorDate: Mon Jul 20 14:07:48 2026 -0500
Fix toolbar resolution
---
.../builder/GrailsModuleModelBuilderImpl.java | 14 +++++++++++--
.../plugins/grails/actions/GrailsActionUtil.kt | 22 ++++++++++++---------
.../grails/structure/GrailsApplicationManager.java | 1 +
.../structure/impl/Grails3ApplicationProvider.kt | 23 ++++++++++++++++++----
4 files changed, 45 insertions(+), 15 deletions(-)
diff --git
a/gradle-tooling/src/org/jetbrains/plugins/grails/gradle/tooling/builder/GrailsModuleModelBuilderImpl.java
b/gradle-tooling/src/org/jetbrains/plugins/grails/gradle/tooling/builder/GrailsModuleModelBuilderImpl.java
index a2ba3c9..e397813 100644
---
a/gradle-tooling/src/org/jetbrains/plugins/grails/gradle/tooling/builder/GrailsModuleModelBuilderImpl.java
+++
b/gradle-tooling/src/org/jetbrains/plugins/grails/gradle/tooling/builder/GrailsModuleModelBuilderImpl.java
@@ -45,11 +45,20 @@ public class GrailsModuleModelBuilderImpl implements
ModelBuilderService {
if (context == null) return null;
GrailsVersionInfo grailsVersionInfo = context.myGrailsVersionInfo;
- DefaultExternalModuleDependency dependency = new
DefaultExternalModuleDependency(grailsVersionInfo.gradleDependencyGroup,
grailsVersionInfo.shellArtifactId, null);
+
+ // Prefer the explicit grailsVersion project property. This must be known
before adding the shell
+ // dependency: the shell artifact is not always version-managed by the
platform/BOM (e.g. Grails 7's
+ // org.apache.grails:grails-shell-cli), so adding it without a version
fails to resolve and the whole
+ // model build throws, leaving the module untagged as a Grails module.
+ String version = (String) project.getProperties().get("grailsVersion");
+
Configuration configuration = getConfiguration(project);
+ DefaultExternalModuleDependency dependency = new
DefaultExternalModuleDependency(
+ grailsVersionInfo.gradleDependencyGroup,
+ grailsVersionInfo.shellArtifactId,
+ (version == null || version.isEmpty()) ? null : version);
configuration.getDependencies().add(dependency);
- String version = (String) project.getProperties().get("grailsVersion");
if (version == null || version.isEmpty()) {
version =
configuration.getResolvedConfiguration().getFirstLevelModuleDependencies()
.stream()
@@ -97,6 +106,7 @@ public class GrailsModuleModelBuilderImpl implements
ModelBuilderService {
*
*/
private static final String[] GRAILS_PLUGIN_NAME_ARRAY = {
+ "grails-app",
"grails-core",
"grails-plugin",
"grails-web",
diff --git a/src/org/jetbrains/plugins/grails/actions/GrailsActionUtil.kt
b/src/org/jetbrains/plugins/grails/actions/GrailsActionUtil.kt
index f8e5e2f..70dd0c1 100644
--- a/src/org/jetbrains/plugins/grails/actions/GrailsActionUtil.kt
+++ b/src/org/jetbrains/plugins/grails/actions/GrailsActionUtil.kt
@@ -48,13 +48,16 @@ class ArtefactData(
val isView: Boolean = false
)
+private val LOG = com.intellij.openapi.diagnostic.logger<ArtefactData>()
+
fun getArtefactData(context: DataContext?): ArtefactData? {
- if (context == null) return null
- val project = context.getData(LangDataKeys.PROJECT) ?: return null
- if (DumbService.isDumb(project)) return null
- val module = context.getData(PlatformCoreDataKeys.MODULE) ?: return null
- val file = context.getData(LangDataKeys.VIRTUAL_FILE) ?: return null
- val application =
GrailsApplicationManager.getInstance(project).findApplication(file) ?: return
null
+ if (context == null) { LOG.warn("GRAILS-DBG getArtefactData: context is
null"); return null }
+ val project = context.getData(LangDataKeys.PROJECT) ?: run {
LOG.warn("GRAILS-DBG getArtefactData: PROJECT null"); return null }
+ if (DumbService.isDumb(project)) { LOG.warn("GRAILS-DBG getArtefactData:
dumb mode"); return null }
+ val module = context.getData(PlatformCoreDataKeys.MODULE) ?: run {
LOG.warn("GRAILS-DBG getArtefactData: MODULE null"); return null }
+ val file = context.getData(LangDataKeys.VIRTUAL_FILE) ?: run {
LOG.warn("GRAILS-DBG getArtefactData: VIRTUAL_FILE null"); return null }
+ val application =
GrailsApplicationManager.getInstance(project).findApplication(file) ?: run {
LOG.warn("GRAILS-DBG getArtefactData: findApplication null for ${file.name}");
return null }
+ LOG.warn("GRAILS-DBG getArtefactData: passed gates for ${file.name},
module=${module.name}")
val publicClass = GroovyUtils.getPublicClass(project, file)
val isView: Boolean
@@ -76,11 +79,12 @@ fun getArtefactData(context: DataContext?): ArtefactData? {
else {
publicClass
}
- artefactClass ?: return null
+ artefactClass ?: run { LOG.warn("GRAILS-DBG getArtefactData: artefactClass
null"); return null }
isView = false
- packageName = StringUtil.getPackageName(artefactClass.qualifiedName ?:
return null)
- artefactName =
GrailsArtifact.getType(artefactClass)?.getArtifactName(artefactClass) ?: return
null
+ packageName = StringUtil.getPackageName(artefactClass.qualifiedName ?: run
{ LOG.warn("GRAILS-DBG getArtefactData: qualifiedName null"); return null })
+ artefactName =
GrailsArtifact.getType(artefactClass)?.getArtifactName(artefactClass) ?: run {
LOG.warn("GRAILS-DBG getArtefactData: artifact type/name null for
${artefactClass.qualifiedName}"); return null }
}
+ LOG.warn("GRAILS-DBG getArtefactData: SUCCESS name=$artefactName
isView=$isView")
return ArtefactData(project, module, file, packageName, artefactName,
application, isView)
}
diff --git
a/src/org/jetbrains/plugins/grails/structure/GrailsApplicationManager.java
b/src/org/jetbrains/plugins/grails/structure/GrailsApplicationManager.java
index c78c949..1c3d30b 100644
--- a/src/org/jetbrains/plugins/grails/structure/GrailsApplicationManager.java
+++ b/src/org/jetbrains/plugins/grails/structure/GrailsApplicationManager.java
@@ -152,6 +152,7 @@ public final class GrailsApplicationManager implements
ModificationTracker, Disp
ProgressManager.checkCanceled();
final Collection<VirtualFile> appRoots = FilenameIndex
.getVirtualFilesByName("grails-app",
GlobalSearchScope.allScope(myProject));
+ LOG.warn("GRAILS-DBG doGetApplications: found " + appRoots.size() + "
grails-app roots: " + ContainerUtil.map(appRoots, VirtualFile::getPath));
if (appRoots.isEmpty()) return Collections.emptyMap();
final Map<VirtualFile, GrailsApplication> result = new HashMap<>();
diff --git
a/src/org/jetbrains/plugins/grails/structure/impl/Grails3ApplicationProvider.kt
b/src/org/jetbrains/plugins/grails/structure/impl/Grails3ApplicationProvider.kt
index 7a490d5..9b65942 100644
---
a/src/org/jetbrains/plugins/grails/structure/impl/Grails3ApplicationProvider.kt
+++
b/src/org/jetbrains/plugins/grails/structure/impl/Grails3ApplicationProvider.kt
@@ -28,19 +28,34 @@ import org.jetbrains.plugins.grails.gradle.GrailsModuleData
import org.jetbrains.plugins.grails.structure.GrailsApplication
import org.jetbrains.plugins.grails.structure.GrailsApplicationProvider
+private val LOG =
com.intellij.openapi.diagnostic.logger<Grails3ApplicationProvider>()
+
class Grails3ApplicationProvider : GrailsApplicationProvider() {
override fun createApplication(project: Project, root: VirtualFile):
GrailsApplication? {
val path = root.path
val settings = ExternalSystemApiUtil.getSettings(project, SYSTEM_ID)
- val linkedProjectSettings = settings.getLinkedProjectSettings(path) as?
GradleProjectSettings ?: return null
+ val linkedProjectSettings = settings.getLinkedProjectSettings(path) as?
GradleProjectSettings ?: run {
+ LOG.warn("GRAILS-DBG createApplication: no linkedProjectSettings for
path=$path; linked=${settings.linkedProjectsSettings.map {
it.externalProjectPath }}")
+ return null
+ }
val gradleProjectInfo =
ProjectDataManager.getInstance().getExternalProjectData(
project, SYSTEM_ID, linkedProjectSettings.externalProjectPath
- ) ?: return null
+ ) ?: run {
+ LOG.warn("GRAILS-DBG createApplication: no externalProjectData for
${linkedProjectSettings.externalProjectPath}")
+ return null
+ }
- val moduleData = findModule(gradleProjectInfo.externalProjectStructure,
path) ?: return null
- if (ExternalSystemApiUtil.find(moduleData, GrailsModuleData.KEY) == null)
return null
+ val moduleData = findModule(gradleProjectInfo.externalProjectStructure,
path) ?: run {
+ LOG.warn("GRAILS-DBG createApplication: findModule null for path=$path")
+ return null
+ }
+ if (ExternalSystemApiUtil.find(moduleData, GrailsModuleData.KEY) == null) {
+ LOG.warn("GRAILS-DBG createApplication: no GrailsModuleData for
path=$path")
+ return null
+ }
+ LOG.warn("GRAILS-DBG createApplication: SUCCESS for path=$path")
return if (linkedProjectSettings.isResolveModulePerSourceSet) {
Grails3MultiModuleApplication(project, root, moduleData)