From 79ca8cbd70425fed7abca271f2c641f0b2459c36 Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Thu, 27 Jun 2013 19:24:30 +0400 Subject: [PATCH] IDEA-99741 Maven system dependencies cause error highlighting --- .../idea/maven/dom/MavenPropertyResolver.java | 22 ++++++----------- .../references/MavenPropertyPsiReference.java | 16 ++----------- ...esourceCompilerConfigurationGenerator.java | 9 ++++++- .../jetbrains/idea/maven/utils/MavenUtil.java | 24 +++++++++++++++++++ 4 files changed, 41 insertions(+), 30 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenPropertyResolver.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenPropertyResolver.java index 514c243cb7c9..088d5b3b9e24 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenPropertyResolver.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenPropertyResolver.java @@ -16,8 +16,6 @@ package org.jetbrains.idea.maven.dom; import com.intellij.openapi.module.Module; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlTag; @@ -36,7 +34,10 @@ import org.jetbrains.idea.maven.utils.MavenUtil; import org.jetbrains.jps.maven.compiler.MavenEscapeWindowsCharacterUtils; import java.io.IOException; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -236,18 +237,9 @@ public class MavenPropertyResolver { } if ("java.home".equals(propName)) { - Module module = projectsManager.findModule(mavenProject); - if (module != null) { - Sdk sdk = ModuleRootManager.getInstance(module).getSdk(); - if (sdk != null) { - VirtualFile homeDirectory = sdk.getHomeDirectory(); - if (homeDirectory != null) { - VirtualFile jreDir = homeDirectory.findChild("jre"); - if (jreDir != null) { - return jreDir.getPath(); - } - } - } + String jreDir = MavenUtil.getModuleJre(projectsManager, mavenProject); + if (jreDir != null) { + return jreDir; } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java index a11cad1f83c8..fbfe294fa737 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java @@ -20,9 +20,6 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.lang.properties.IProperty; import com.intellij.lang.properties.PropertiesLanguage; import com.intellij.lang.properties.psi.PropertiesFile; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.Navigatable; @@ -237,20 +234,11 @@ public class MavenPropertyPsiReference extends MavenPsiReference { @Nullable private PsiElement resolveToJavaHome(@NotNull MavenProject mavenProject) { - Module module = myProjectsManager.findModule(mavenProject); - if (module == null) return null; - - Sdk sdk = ModuleRootManager.getInstance(module).getSdk(); - if (sdk == null) return null; - - VirtualFile homeDirectory = sdk.getHomeDirectory(); - if (homeDirectory == null) return null; - - VirtualFile jreDir = homeDirectory.findChild("jre"); + String jreDir = MavenUtil.getModuleJre(myProjectsManager, mavenProject); if (jreDir == null) return null; PsiFile propFile = PsiFileFactory.getInstance(myProject).createFileFromText("SystemProperties.properties", PropertiesLanguage.INSTANCE, - "java.home=" + jreDir.getPath()); + "java.home=" + jreDir); return ((PropertiesFile)propFile).getProperties().get(0).getPsiElement(); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenResourceCompilerConfigurationGenerator.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenResourceCompilerConfigurationGenerator.java index ff4aab87c5c2..0662a608ca31 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenResourceCompilerConfigurationGenerator.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenResourceCompilerConfigurationGenerator.java @@ -20,6 +20,7 @@ import org.jetbrains.idea.maven.dom.references.MavenFilteredPropertyPsiReference import org.jetbrains.idea.maven.model.MavenId; import org.jetbrains.idea.maven.model.MavenResource; import org.jetbrains.idea.maven.utils.MavenJDOMUtil; +import org.jetbrains.idea.maven.utils.MavenUtil; import org.jetbrains.jps.maven.model.impl.MavenIdBean; import org.jetbrains.jps.maven.model.impl.MavenModuleResourceConfiguration; import org.jetbrains.jps.maven.model.impl.MavenProjectConfiguration; @@ -116,6 +117,7 @@ public class MavenResourceCompilerConfigurationGenerator { addResources(resourceConfig.resources, mavenProject.getResources()); addResources(resourceConfig.testResources, mavenProject.getTestResources()); resourceConfig.filteringExclusions.addAll(MavenProjectsTree.getFilterExclusions(mavenProject)); + final Properties properties = getFilteringProperties(mavenProject); for (Map.Entry propEntry : properties.entrySet()) { resourceConfig.properties.put((String)propEntry.getKey(), (String)propEntry.getValue()); @@ -158,7 +160,7 @@ public class MavenResourceCompilerConfigurationGenerator { }); } - private static Properties getFilteringProperties(MavenProject mavenProject) { + private Properties getFilteringProperties(MavenProject mavenProject) { final Properties properties = new Properties(); for (String each : mavenProject.getFilters()) { @@ -179,6 +181,11 @@ public class MavenResourceCompilerConfigurationGenerator { properties.put("settings.localRepository", mavenProject.getLocalRepository().getAbsolutePath()); + String jreDir = MavenUtil.getModuleJre(myMavenProjectsManager, mavenProject); + if (jreDir != null) { + properties.put("java.home", jreDir); + } + return properties; } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java index 3f44d950ccbd..7b70213a3eab 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java @@ -33,12 +33,15 @@ import com.intellij.openapi.application.impl.LaterInvocator; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.OpenFileDescriptor; +import com.intellij.openapi.module.Module; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Pair; @@ -787,4 +790,25 @@ public class MavenUtil { return (int)crc.getValue(); } + + @Nullable + public static String getModuleJre(@NotNull MavenProjectsManager mavenProjectsManager, @NotNull MavenProject mavenProject) { + Module module = mavenProjectsManager.findModule(mavenProject); + if (module == null) return null; + + Sdk sdk = ModuleRootManager.getInstance(module).getSdk(); + if (sdk == null) return null; + + VirtualFile homeDirectory = sdk.getHomeDirectory(); + if (homeDirectory == null) return null; + + if (!"jre".equals(homeDirectory.getName())) { + VirtualFile jreDir = homeDirectory.findChild("jre"); + if (jreDir != null) { + homeDirectory = jreDir; + } + } + + return homeDirectory.getPath(); + } }