IDEA-99741 Maven system dependencies cause error highlighting

This commit is contained in:
Sergey Evdokimov
2013-06-27 19:52:26 +04:00
parent 304fb8b228
commit 79ca8cbd70
4 changed files with 41 additions and 30 deletions
@@ -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;
}
}
@@ -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();
}
@@ -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<Object, Object> 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;
}
@@ -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();
}
}