IDEA-65935 (Groovy + Maven + GMaven: Provide Groovy language support in Maven POMs)

This commit is contained in:
Sergey Evdokimov
2012-06-14 15:12:10 +04:00
parent 1edfa0c9a8
commit 1338f6d504
3 changed files with 55 additions and 4 deletions
@@ -18,12 +18,14 @@ package org.jetbrains.idea.maven.plugins.groovy;
import org.jetbrains.idea.maven.utils.MavenPluginConfigurationLanguageInjector;
import org.jetbrains.plugins.groovy.GroovyFileType;
import java.util.Arrays;
/**
* @author Sergey Evdokimov
*/
public class MavenGroovyInjector extends MavenPluginConfigurationLanguageInjector {
public MavenGroovyInjector() {
super("source", "org.codehaus.groovy.maven", "gmaven-plugin", GroovyFileType.GROOVY_LANGUAGE);
super("source", Arrays.asList("org.codehaus.groovy.maven", "org.codehaus.gmaven"), "gmaven-plugin", GroovyFileType.GROOVY_LANGUAGE);
}
}
@@ -26,13 +26,16 @@ import com.intellij.psi.xml.XmlText;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Collections;
/**
* @author Sergey Evdokimov
*/
public class MavenPluginConfigurationLanguageInjector implements LanguageInjector {
private final String myParameterName;
private final String myPluginGroupId;
private final Collection<String> myPluginGroupIds;
private final String myPluginArtifactId;
private final Language myLanguage;
@@ -40,8 +43,15 @@ public class MavenPluginConfigurationLanguageInjector implements LanguageInjecto
@NotNull String pluginGroupId,
@NotNull String pluginArtifactId,
@Nullable Language language) {
this(parameterName, Collections.singleton(pluginGroupId), pluginArtifactId, language);
}
protected MavenPluginConfigurationLanguageInjector(@NotNull String parameterName,
@NotNull Collection<String> pluginGroupIds,
@NotNull String pluginArtifactId,
@Nullable Language language) {
myParameterName = parameterName;
myPluginGroupId = pluginGroupId;
myPluginGroupIds = pluginGroupIds;
myPluginArtifactId = pluginArtifactId;
myLanguage = language;
}
@@ -68,7 +78,7 @@ public class MavenPluginConfigurationLanguageInjector implements LanguageInjecto
XmlTag plugin = (XmlTag)pluginTag;
XmlTag groupId = plugin.findFirstSubTag("groupId");
if (groupId == null || !groupId.getValue().getText().trim().equals(myPluginGroupId)) return;
if (groupId == null || !myPluginGroupIds.contains(groupId.getValue().getText().trim())) return;
XmlTag artifactId = plugin.findFirstSubTag("artifactId");
if (artifactId == null || !artifactId.getValue().getText().trim().equals(myPluginArtifactId)) return;
@@ -67,6 +67,45 @@ class MavenGroovyInjectionTest extends LightCodeInsightFixtureTestCase {
</plugins>
</build>
</project>
""")
myFixture.completeBasic()
def lookups = myFixture.lookupElementStrings
assert lookups.containsAll(["String", "StringBuffer", "StringBuilder"])
}
public void testCompletion2() {
myFixture.configureByText("pom.xml", """
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>simpleMaven</groupId>
<artifactId>simpleMaven</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.3</version>
<configuration>
<!-- http://groovy.codehaus.org/The+groovydoc+Ant+task -->
<source>
String<caret>
</source>
</configuration>
</plugin>
</plugins>
</build>
</project>
""")