Skip to content

Commit ca6d6e5

Browse files
committed
Update to detect maven modules and update POM instead of build.gradle.
net.servicestack:client is used instead of android. Still need to publish net.servicestack:client on official maven repository, signed etc to work automatically. Updated plugin version to 1.0.3
1 parent d2286e4 commit ca6d6e5

File tree

11 files changed

+272
-113
lines changed

11 files changed

+272
-113
lines changed

src/ServiceStackIDEA/.idea/libraries/maven_model_3_3_1.xml

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ServiceStackIDEA/.idea/libraries/plexus_utils_3_0_20.xml

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ServiceStackIDEA/.idea/workspace.xml

Lines changed: 177 additions & 102 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ServiceStackIDEA/META-INF/plugin.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
<idea-plugin version="2">
2-
<id>net.servicestack.ideaplugin</id>
2+
<id>net.servicestack.idea.plugin</id>
33
<name>ServiceStack</name>
4-
<version>1.0.2</version>
4+
<version>1.0.3</version>
55
<vendor email="team@servicestack.net" url="https://servicestack.net/">ServiceStack</vendor>
66

77
<description><![CDATA[
88
Integration with ServiceStack Web Services, includes support for Java Add ServiceStack Reference.
99
]]></description>
1010

1111
<change-notes><![CDATA[
12+
1.0.3 - Added support to detect Maven pom.xml and inject net.servicestack:client dependency for IntelliJ + Maven modules.
1213
1.0.2 - Fix plugin.xml template bug to enable search from IDE.<br>
1314
1.0 - Initial release.<br>
1415
]]>
@@ -20,6 +21,7 @@
2021
<!-- please see http://confluence.jetbrains.com/display/IDEADEV/Plugin+Compatibility+with+IntelliJ+Platform+Products
2122
on how to target different products -->
2223
<depends>com.intellij.modules.lang</depends>
24+
<depends>org.jetbrains.idea.maven</depends>
2325

2426
<extensions defaultExtensionNs="com.intellij">
2527
<!-- Add your extensions here -->

src/ServiceStackIDEA/ServiceStackIDEA.iml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@
1010
<orderEntry type="sourceFolder" forTests="false" />
1111
<orderEntry type="library" exported="" name="com.google.code.gson:gson:2.3.1" level="project" />
1212
<orderEntry type="library" exported="" name="org.apache.httpcomponents:com.springsource.org.apache.httpcomponents.httpclient:4.2" level="project" />
13+
<orderEntry type="library" exported="" name="plexus-utils-3.0.20" level="project" />
14+
<orderEntry type="library" exported="" name="maven-model-3.3.1" level="project" />
1315
</component>
1416
</module>
375 KB
Binary file not shown.
157 KB
Binary file not shown.

src/ServiceStackIDEA/lib/maven.jar

3.69 MB
Binary file not shown.
237 KB
Binary file not shown.

src/ServiceStackIDEA/src/net/servicestack/idea/AddRef.java

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,21 @@
1111
import com.intellij.openapi.vfs.LocalFileSystem;
1212
import com.intellij.openapi.vfs.VirtualFile;
1313
import com.intellij.openapi.vfs.VirtualFileManager;
14-
import com.intellij.psi.JavaPsiFacade;
15-
import com.intellij.psi.PsiDirectory;
16-
import com.intellij.psi.PsiManager;
17-
import com.intellij.psi.PsiPackage;
14+
import com.intellij.psi.*;
15+
import com.intellij.psi.search.FilenameIndex;
16+
import com.intellij.psi.search.GlobalSearchScope;
17+
import com.intellij.psi.xml.XmlFile;
1818
import com.intellij.ui.JBColor;
19+
import com.intellij.util.PlatformUtils;
1920
import org.apache.http.client.utils.URIBuilder;
21+
import org.apache.maven.model.Dependency;
22+
import org.apache.maven.model.Model;
23+
import org.apache.maven.model.Profile;
24+
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
25+
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
26+
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
2027
import org.jetbrains.annotations.NotNull;
28+
import org.jetbrains.idea.maven.project.MavenProjectsManager;
2129

2230
import javax.swing.*;
2331
import javax.swing.event.DocumentEvent;
@@ -281,12 +289,54 @@ private void onOK() {
281289

282290
GradleBuildFileHelper gradleBuildFileHelper = new GradleBuildFileHelper(this.module);
283291
boolean showDto = false;
284-
if(gradleBuildFileHelper.addDependency(dependencyGroupId, dependencyPackageId, dependencyVersion)) {
285-
refreshBuildFile();
292+
final MavenProjectsManager mavenProjectsManager = MavenProjectsManager.getInstance(module.getProject());
293+
294+
boolean isMavenModule = mavenProjectsManager != null && mavenProjectsManager.isMavenizedModule(module);
295+
if(isMavenModule) {
296+
PsiFile[] pomLibFiles = FilenameIndex.getFilesByName(module.getProject(), "pom.xml", GlobalSearchScope.allScope(module.getProject()));
297+
File pomLibFile = new File(pomLibFiles[0].getVirtualFile().getPath());
298+
MavenXpp3Reader reader = new MavenXpp3Reader();
299+
Model pomModel;
300+
try {
301+
pomModel = reader.read(new FileReader(pomLibFile));
302+
final List<Dependency> dependencies= pomModel.getDependencies();
303+
boolean requiresPomDependency = true;
304+
for (Dependency dep : dependencies) {
305+
if(Objects.equals(dep.getGroupId(), dependencyGroupId) && Objects.equals(dep.getArtifactId(), "client")) {
306+
requiresPomDependency = false;
307+
}
308+
}
309+
310+
if(requiresPomDependency) {
311+
Dependency dependency = new Dependency();
312+
dependency.setGroupId(dependencyGroupId);
313+
dependency.setArtifactId("client");
314+
dependency.setVersion(dependencyVersion);
315+
FileWriter writer = new FileWriter(pomLibFile.getAbsolutePath());
316+
pomModel.addDependency(dependency);
317+
new MavenXpp3Writer().write(writer, pomModel);
318+
}
319+
320+
} catch (IOException e) {
321+
e.printStackTrace();
322+
errorMessage = "Unable to process pom.xml to add " + dependencyGroupId + ":" + "client" + ":" + dependencyVersion;
323+
} catch (XmlPullParserException e) {
324+
errorMessage = "Unable to process pom.xml to add " + dependencyGroupId + ":" + "client" + ":" + dependencyVersion;
325+
e.printStackTrace();
326+
}
327+
328+
286329
} else {
287-
showDto = true;
330+
//Android studio
331+
if(gradleBuildFileHelper.addDependency(dependencyGroupId, dependencyPackageId, dependencyVersion)) {
332+
refreshBuildFile();
333+
} else {
334+
showDto = true;
335+
}
288336
}
289337

338+
339+
290340
String dtoPath;
291341
try {
292342
dtoPath = getDtoPath();

0 commit comments

Comments
 (0)