diff options
author | Tor Norbye <tnorbye@google.com> | 2013-04-03 16:27:26 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2013-04-03 16:27:26 -0700 |
commit | d1a59a0799588a226d255d9b45c4825b19651554 (patch) | |
tree | c9759b94ddad742db08b6662f52a62e0401491c1 /plugins/maven | |
parent | 2bd2b7c2623d4266384e890271869efc044aabff (diff) | |
download | idea-d1a59a0799588a226d255d9b45c4825b19651554.tar.gz |
Snapshot dc7fe9a777db5bc87a5b1ad4bfe40a547fc7d49a from master branch of git://git.jetbrains.org/idea/community.git
Change-Id: Iae1c655b8958fc7603a78c675e4a4b942a1fccd4
Diffstat (limited to 'plugins/maven')
4 files changed, 83 insertions, 29 deletions
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java index a3b3cd35e410..246897a2cb53 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java @@ -315,27 +315,25 @@ public class MavenDomProjectProcessorUtils { SearchProcessor<MavenDomDependency, MavenDomDependencies> processor = new SearchProcessor<MavenDomDependency, MavenDomDependencies>() { @Override protected MavenDomDependency find(MavenDomDependencies mavenDomDependencies) { - if (!model.equals(mavenDomDependencies.getParentOfType(MavenDomProjectModel.class, true))) { - for (MavenDomDependency domDependency : mavenDomDependencies.getDependencies()) { - if (artifactId.equals(domDependency.getArtifactId().getStringValue()) && - groupId.equals(domDependency.getGroupId().getStringValue())) { - return domDependency; - } + for (MavenDomDependency domDependency : mavenDomDependencies.getDependencies()) { + if (artifactId.equals(domDependency.getArtifactId().getStringValue()) && + groupId.equals(domDependency.getGroupId().getStringValue())) { + return domDependency; + } - if ("import".equals(domDependency.getScope().getRawText())) { - GenericDomValue<String> version = domDependency.getVersion(); - if (version.getXmlElement() != null) { - GenericDomValueReference reference = new GenericDomValueReference(version); - PsiElement resolve = reference.resolve(); - - if (resolve instanceof XmlFile) { - MavenDomProjectModel dependModel = MavenDomUtil.getMavenDomModel((PsiFile)resolve, MavenDomProjectModel.class); - if (dependModel != null) { - for (MavenDomDependency dep : dependModel.getDependencyManagement().getDependencies().getDependencies()) { - if (artifactId.equals(dep.getArtifactId().getStringValue()) && - groupId.equals(dep.getGroupId().getStringValue())) { - return domDependency; - } + if ("import".equals(domDependency.getScope().getRawText())) { + GenericDomValue<String> version = domDependency.getVersion(); + if (version.getXmlElement() != null) { + GenericDomValueReference reference = new GenericDomValueReference(version); + PsiElement resolve = reference.resolve(); + + if (resolve instanceof XmlFile) { + MavenDomProjectModel dependModel = MavenDomUtil.getMavenDomModel((PsiFile)resolve, MavenDomProjectModel.class); + if (dependModel != null) { + for (MavenDomDependency dep : dependModel.getDependencyManagement().getDependencies().getDependencies()) { + if (artifactId.equals(dep.getArtifactId().getStringValue()) && + groupId.equals(dep.getGroupId().getStringValue())) { + return domDependency; } } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/converters/MavenArtifactCoordinatesConverter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/converters/MavenArtifactCoordinatesConverter.java index 6e2b13848646..1c835789d6de 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/converters/MavenArtifactCoordinatesConverter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/converters/MavenArtifactCoordinatesConverter.java @@ -18,6 +18,8 @@ package org.jetbrains.idea.maven.dom.converters; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Computable; +import com.intellij.openapi.util.RecursionManager; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; @@ -25,15 +27,14 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.util.ArrayUtil; -import com.intellij.util.xml.ConvertContext; -import com.intellij.util.xml.DomElement; -import com.intellij.util.xml.DomUtil; -import com.intellij.util.xml.ResolvingConverter; +import com.intellij.util.xml.*; +import com.intellij.util.xml.impl.GenericDomValueReference; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.dom.MavenDomBundle; +import org.jetbrains.idea.maven.dom.MavenDomProjectProcessorUtils; import org.jetbrains.idea.maven.dom.MavenDomUtil; import org.jetbrains.idea.maven.dom.model.*; import org.jetbrains.idea.maven.indices.MavenProjectIndicesManager; @@ -79,7 +80,7 @@ public abstract class MavenArtifactCoordinatesConverter extends ResolvingConvert Project p = getProject(context); MavenId id = MavenArtifactCoordinatesHelper.getId(context); - PsiFile result = selectStrategy(context).resolve(p, id); + PsiFile result = selectStrategy(context).resolve(p, id, context); return result != null ? result : super.resolve(o, context); } @@ -178,7 +179,7 @@ public abstract class MavenArtifactCoordinatesConverter extends ResolvingConvert return doGetVariants(id, manager); } - public PsiFile resolve(Project project, MavenId id) { + public PsiFile resolve(Project project, MavenId id, ConvertContext context) { MavenProjectsManager projectsManager = MavenProjectsManager.getInstance(project); PsiManager psiManager = PsiManager.getInstance(project); @@ -224,7 +225,7 @@ public abstract class MavenArtifactCoordinatesConverter extends ResolvingConvert private class ProjectStrategy extends ConverterStrategy { @Override - public PsiFile resolve(Project project, MavenId id) { + public PsiFile resolve(Project project, MavenId id, ConvertContext context) { return null; } @@ -265,6 +266,31 @@ public abstract class MavenArtifactCoordinatesConverter extends ResolvingConvert } @Override + public PsiFile resolve(Project project, MavenId id, ConvertContext context) { + if (id.getVersion() == null && id.getGroupId() != null && id.getArtifactId() != null) { + DomElement parent = context.getInvocationElement().getParent(); + if (parent instanceof MavenDomDependency) { + MavenDomDependency managedDependency = MavenDomProjectProcessorUtils.searchManagingDependency((MavenDomDependency)parent); + if (managedDependency != null && !"import".equals(managedDependency.getScope().getStringValue())) { + final GenericDomValue<String> managedDependencyArtifactId = managedDependency.getArtifactId(); + PsiElement res = RecursionManager.doPreventingRecursion(managedDependencyArtifactId, false, new Computable<PsiElement>() { + @Override + public PsiElement compute() { + return new GenericDomValueReference(managedDependencyArtifactId).resolve(); + } + }); + + if (res instanceof PsiFile) { + return (PsiFile)res; + } + } + } + } + + return super.resolve(project, id, context); + } + + @Override public PsiFile resolveBySpecifiedPath() { return myDependency.getSystemPath().getValue(); } @@ -287,7 +313,7 @@ public abstract class MavenArtifactCoordinatesConverter extends ResolvingConvert private class ExclusionStrategy extends ConverterStrategy { @Override - public PsiFile resolve(Project project, MavenId id) { + public PsiFile resolve(Project project, MavenId id, ConvertContext context) { return null; } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java index 5fbef78c3498..4e3cf1854652 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java @@ -347,7 +347,9 @@ public class RepositoryAttachHandler { private static List<MavenRemoteRepository> convertRepositories(Collection<MavenRepositoryInfo> infos) { List<MavenRemoteRepository> result = new ArrayList<MavenRemoteRepository>(infos.size()); for (MavenRepositoryInfo each : infos) { - result.add(new MavenRemoteRepository(each.getId(), each.getName(), each.getUrl(), null, null, null)); + if (each.getUrl() != null) { + result.add(new MavenRemoteRepository(each.getId(), each.getName(), each.getUrl(), null, null, null)); + } } return result; } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDependencyCompletionAndResolutionTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDependencyCompletionAndResolutionTest.java index 48e8b72fcf83..9d7365241feb 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDependencyCompletionAndResolutionTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDependencyCompletionAndResolutionTest.java @@ -29,6 +29,7 @@ import org.jetbrains.idea.maven.dom.intentions.ChooseFileIntentionAction; import org.jetbrains.idea.maven.dom.model.MavenDomDependency; import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel; +import java.io.File; import java.util.Arrays; import java.util.List; @@ -414,6 +415,33 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi assertResolved(myProjectPom, findPsiFile(f)); } + public void testResolveManagedDependency() throws Exception { + importProject("<groupId>test</groupId>" + + "<artifactId>project</artifactId>" + + "<version>1</version>" + + + "<dependencyManagement>" + + " <dependencies>" + + " <dependency>" + + " <groupId>junit</groupId>" + + " <artifactId>junit</artifactId>" + + " <version>4.0</version>" + + " </dependency>" + + " </dependencies>" + + "</dependencyManagement>" + + + "<dependencies>" + + " <dependency>" + + " <groupId>junit</groupId>" + + " <artifactId>junit<caret></artifactId>" + + " </dependency>" + + "</dependencies>"); + + String filePath = myIndicesFixture.getRepositoryHelper().getTestDataPath("local1/junit/junit/4.0/junit-4.0.pom"); + VirtualFile f = LocalFileSystem.getInstance().refreshAndFindFileByPath(filePath); + assertResolved(myProjectPom, findPsiFile(f)); + } + public void testResolutionIsTypeBased() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + |