Skip to content

Commit 8534c0f

Browse files
committed
Default ref type based on pom/gradle
With override based on filename provided in dialog.
1 parent f73454e commit 8534c0f

File tree

5 files changed

+76
-37
lines changed

5 files changed

+76
-37
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@
157157
</grid>
158158
</constraints>
159159
<properties>
160-
<text value="dto.java"/>
160+
<text value="dtos.java"/>
161161
</properties>
162162
</component>
163163
</children>

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class AddRef extends JDialog {
4343
private String errorMessage;
4444
private String selectedDirectory;
4545

46+
private INativeTypesHandler defaultNativeTypesHandler;
47+
4648
public AddRef(@NotNull Module module) {
4749
this.module = module;
4850
setContentPane(contentPane);
@@ -191,6 +193,10 @@ public void setFileName(@NotNull String fileName) {
191193
nameTextField.setText(fileName);
192194
}
193195

196+
public void setDefaultNativeTypesHandler(INativeTypesHandler nativeTypesHandler) {
197+
defaultNativeTypesHandler = nativeTypesHandler;
198+
}
199+
194200
public void setSelectedDirectory(@NotNull String selectedDirectory) {
195201
this.selectedDirectory = selectedDirectory;
196202
}
@@ -362,7 +368,7 @@ private void onOK() {
362368
label3.setText("Name");
363369
panel4.add(label3, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
364370
nameTextField = new JTextField();
365-
nameTextField.setText("dto.java");
371+
nameTextField.setText("dtos.java");
366372
panel4.add(nameTextField, new GridConstraints(2, 1, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
367373
label1.setLabelFor(addressUrlTextField);
368374
label3.setLabelFor(nameTextField);

src/ServiceStackIDEA/src/main/java/net/servicestack/idea/AddServiceStackRefHandler.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.intellij.notification.NotificationType;
55
import com.intellij.notification.Notifications;
66
import com.intellij.openapi.module.Module;
7-
import com.intellij.openapi.project.Project;
87
import com.intellij.openapi.vfs.LocalFileSystem;
98
import com.intellij.openapi.vfs.VirtualFile;
109
import com.intellij.openapi.vfs.VirtualFileManager;
@@ -30,16 +29,19 @@ public class AddServiceStackRefHandler {
3029
//Fallback version of dependencies if GitHub tags can't be checked.
3130
private static String dependencyVersion = "1.0.15";
3231
private static final String clientPackageId = "client";
32+
private static INativeTypesHandler defaultNativeTypesHandler;
3333

3434
public static void setDependencyVersion(String version) {
3535
dependencyVersion = version;
3636
}
3737

38-
public static void handleOk(String addressUrl, String qualifiedPackageName, String fileName, String selectedDirectory, Module module, StringBuilder errorMessage) {
39-
List<String> javaCodeLines = getDtoLines(addressUrl, qualifiedPackageName, fileName, errorMessage);
4038

39+
public static void handleOk(String addressUrl, String qualifiedPackageName,
40+
String fileName, String selectedDirectory,
41+
Module module, StringBuilder errorMessage) {
42+
List<String> javaCodeLines = getDtoLines(addressUrl, qualifiedPackageName, fileName, errorMessage);
4143
if (javaCodeLines == null) return;
42-
44+
defaultNativeTypesHandler = getDefaultNativeTypesHandler(module);
4345
boolean showDto = true;
4446
final MavenProjectsManager mavenProjectsManager = MavenProjectsManager.getInstance(module.getProject());
4547

@@ -112,10 +114,9 @@ private static List<String> getDtoLines(String addressUrl, String qualifiedPacka
112114
}
113115

114116
private static INativeTypesHandler getNativeTypesHandler(String fileName) {
115-
//Default Java
116-
INativeTypesHandler result = new JavaNativeTypesHandler();
117117
if(fileName.endsWith(".kt")) return new KotlinNativeTypesHandler();
118-
return result;
118+
if(fileName.endsWith(".java")) return new JavaNativeTypesHandler();
119+
return defaultNativeTypesHandler;
119120
}
120121

121122
private static boolean tryAddMavenDependency(Module module) {
@@ -130,7 +131,7 @@ private static boolean tryAddMavenDependency(Module module) {
130131
NotificationType.WARNING);
131132
try {
132133
IDEAPomFileHelper pomFileHelper = new IDEAPomFileHelper();
133-
String pomFilePath = pomFileHelper.findNearestModulePomFile(module);
134+
String pomFilePath = IDEAPomFileHelper.findNearestModulePomFile(module);
134135
if(pomFilePath == null) {
135136
Notifications.Bus.notify(notification);
136137
return false;
@@ -242,4 +243,15 @@ public static String getDtoNameWithoutExtension(String name) {
242243
return name.substring(0, p);
243244
}
244245
}
246+
247+
public static INativeTypesHandler getDefaultNativeTypesHandler(Module module) {
248+
if(GradleBuildFileHelper.isGradleModule(module) && GradleBuildFileHelper.isUsingKotlin(module)) {
249+
return new KotlinNativeTypesHandler();
250+
}
251+
252+
if(IDEAPomFileHelper.isMavenProjectWithKotlin(module)) {
253+
return new KotlinNativeTypesHandler();
254+
}
255+
return new JavaNativeTypesHandler();
256+
}
245257
}

src/ServiceStackIDEA/src/main/java/net/servicestack/idea/AddServiceStackReference.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public void actionPerformed(AnActionEvent e) {
7575
//do nothing, can't get package name.
7676
}
7777
}
78-
dialog.setVisible(true);
78+
ShowDialog(module, dialog);
7979
return;
8080
}
8181

@@ -99,14 +99,14 @@ public void actionPerformed(AnActionEvent e) {
9999
//Check for document, display without a package name if no document.
100100
Document document = FileDocumentManager.getInstance().getDocument(selectedFile);
101101
if (document == null) {
102-
dialog.setVisible(true);
102+
ShowDialog(module, dialog);
103103
return;
104104
}
105105

106106
//Check if a 'PsiFile', display without a package name if no PsiFile.
107107
PsiFile psiFile = PsiDocumentManager.getInstance(module.getProject()).getPsiFile(document);
108108
if (psiFile == null) {
109-
dialog.setVisible(true);
109+
ShowDialog(module, dialog);
110110
return;
111111
}
112112

@@ -118,11 +118,17 @@ public void actionPerformed(AnActionEvent e) {
118118
dialog.setSelectedPackage(mainPackage);
119119
}
120120
}
121+
ShowDialog(module, dialog);
122+
}
121123

124+
private void ShowDialog(Module module, AddRef dialog) {
122125
if(GradleBuildFileHelper.isGradleModule(module) && GradleBuildFileHelper.isUsingKotlin(module)) {
123-
dialog.setFileName("dto.kt");
126+
dialog.setFileName("dtos.kt");
124127
}
125128

129+
if(IDEAPomFileHelper.isMavenProjectWithKotlin(module)) {
130+
dialog.setFileName("dtos.kt");
131+
}
126132
dialog.setVisible(true);
127133
}
128134

src/ServiceStackIDEA/src/main/java/net/servicestack/idea/IDEAPomFileHelper.java

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,17 @@
11
package net.servicestack.idea;
22

33
import com.intellij.openapi.application.ApplicationManager;
4-
import com.intellij.openapi.application.Result;
5-
import com.intellij.openapi.command.WriteCommandAction;
64
import com.intellij.openapi.editor.DocumentRunnable;
75
import com.intellij.openapi.fileEditor.FileDocumentManager;
86
import com.intellij.openapi.module.Module;
97
import com.intellij.openapi.project.Project;
108
import com.intellij.openapi.vfs.LocalFileSystem;
119
import com.intellij.openapi.vfs.VirtualFile;
12-
import com.intellij.openapi.vfs.VirtualFileManager;
1310
import com.intellij.psi.PsiDocumentManager;
14-
import com.intellij.psi.PsiElement;
1511
import com.intellij.psi.PsiFile;
16-
import com.intellij.psi.codeStyle.CodeStyleManager;
17-
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
1812
import com.intellij.psi.search.FilenameIndex;
1913
import com.intellij.psi.search.GlobalSearchScope;
20-
import com.intellij.util.xml.GenericDomValue;
21-
import org.jetbrains.annotations.NotNull;
14+
import org.jetbrains.idea.maven.project.MavenProjectsManager;
2215
import org.w3c.dom.Document;
2316
import org.w3c.dom.Node;
2417
import org.w3c.dom.NodeList;
@@ -43,7 +36,7 @@ public boolean addMavenDependency(final Module module,File pomFile, String group
4336
boolean dependencyAdded = false;
4437

4538
try {
46-
if(!pomHasMavenDependency(pomFile,groupId,packageId,version)) {
39+
if(!pomHasMavenDependency(pomFile,groupId,packageId)) {
4740
PomAppendDependency(module, pomFile,groupId,packageId,version);
4841
dependencyAdded = true;
4942
}
@@ -59,7 +52,7 @@ public boolean addMavenDependency(final Module module,File pomFile, String group
5952
}
6053

6154

62-
public String findNearestModulePomFile(Module module) {
55+
public static String findNearestModulePomFile(Module module) {
6356
PsiFile[] pomLibFiles = FilenameIndex.getFilesByName(module.getProject(), "pom.xml", GlobalSearchScope.allScope(module.getProject()));
6457
String pomFilePath = null;
6558
for(PsiFile psiPom : pomLibFiles) {
@@ -104,7 +97,6 @@ private void PomAppendDependency(final Module module, final File pomFile, String
10497
final Project project = module.getProject();
10598
final VirtualFile virtualFile = LocalFileSystem.getInstance().findFileByIoFile(pomFile);
10699
final com.intellij.openapi.editor.Document document = FileDocumentManager.getInstance().getDocument(virtualFile);
107-
final PsiFile psiPomFile = PsiDocumentManager.getInstance(project).getPsiFile(document);
108100
final FileDocumentManager fileDocumentManager = FileDocumentManager.getInstance();
109101
fileDocumentManager.saveDocument(document); //when file is edited and editor is closed, it is needed to save the text
110102
PsiDocumentManager.getInstance(project).commitDocument(document);
@@ -120,11 +112,11 @@ private void PomAppendDependency(final Module module, final File pomFile, String
120112
});
121113
}
122114

123-
private boolean pomHasDependenciesNode(Document document) {
115+
private static boolean pomHasDependenciesNode(Document document) {
124116
return getMavenDependenciesNode(document) != null;
125117
}
126118

127-
private Node getMavenDependenciesNode(Document document) {
119+
private static Node getMavenDependenciesNode(Document document) {
128120
Node rootNode = document.getFirstChild();
129121
NodeList firstChildern = rootNode.getChildNodes();
130122
Node result = null;
@@ -141,7 +133,7 @@ private Node getMavenDependenciesNode(Document document) {
141133
return result;
142134
}
143135

144-
private boolean pomHasMavenDependency(File pomFile, String groupId, String packageId, String version) throws ParserConfigurationException, IOException, SAXException {
136+
public static boolean pomHasMavenDependency(File pomFile, String groupId, String packageId) throws ParserConfigurationException, IOException, SAXException {
145137
boolean hasDependency = false;
146138
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
147139
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
@@ -155,31 +147,54 @@ private boolean pomHasMavenDependency(File pomFile, String groupId, String packa
155147
NodeList depElements = dependencies.getChildNodes();
156148
for(int i = 0; i < depElements.getLength(); i++) {
157149
Node dependencyElement = depElements.item(i);
158-
if(pomDependencyElementMatch(dependencyElement, groupId,packageId,version)) {
150+
if(pomDependencyElementMatch(dependencyElement, groupId,packageId)) {
159151
hasDependency = true;
160152
break;
161153
}
162154
}
163155
return hasDependency;
164156
}
165157

166-
private boolean pomDependencyElementMatch(Node dependencyElement, String groupId, String packageId, String version) {
158+
public static boolean pomHasKotlinDependency(Module module) {
159+
String pomFilePath = findNearestModulePomFile(module);
160+
if(pomFilePath == null) {
161+
return false;
162+
}
163+
File pomFile = new File(pomFilePath);
164+
if(!pomFile.exists()) {
165+
return false;
166+
}
167+
168+
try {
169+
return pomHasMavenDependency(pomFile,"org.jetbrains.kotlin","kotlin-stdlib");
170+
} catch (ParserConfigurationException e) {
171+
e.printStackTrace();
172+
} catch (IOException e) {
173+
e.printStackTrace();
174+
} catch (SAXException e) {
175+
e.printStackTrace();
176+
}
177+
return false;
178+
}
179+
180+
private static boolean pomDependencyElementMatch(Node dependencyElement, String groupId, String packageId) {
167181
boolean groupIdMatch = false;
168182
boolean artifactIdMatch = false;
169-
boolean versionMatch = false;
170183
NodeList dependencyProperties = dependencyElement.getChildNodes();
171184
for(int j = 0; j < dependencyProperties.getLength(); j++) {
172185
Node depProp = dependencyProperties.item(j);
173-
if(depProp.getNodeName().equals("groupId") && depProp.getNodeValue() != null && depProp.getNodeValue().equals(groupId)) {
186+
if(depProp.getNodeName().equals("groupId") && depProp.getTextContent() != null && depProp.getTextContent().equals(groupId)) {
174187
groupIdMatch = true;
175188
}
176-
if(depProp.getNodeName().equals("artifactId") && depProp.getNodeValue() != null && depProp.getNodeValue().equals(packageId)) {
189+
if(depProp.getNodeName().equals("artifactId") && depProp.getTextContent() != null && depProp.getTextContent().equals(packageId)) {
177190
artifactIdMatch = true;
178191
}
179-
if(depProp.getNodeName().equals("version") && depProp.getNodeValue() != null && depProp.getNodeValue().equals(version)) {
180-
versionMatch = true;
181-
}
182192
}
183-
return groupIdMatch && artifactIdMatch && versionMatch;
193+
return groupIdMatch && artifactIdMatch;
194+
}
195+
196+
public static boolean isMavenProjectWithKotlin(Module module) {
197+
final MavenProjectsManager mavenProjectsManager = MavenProjectsManager.getInstance(module.getProject());
198+
return mavenProjectsManager.isMavenizedModule(module) && pomHasKotlinDependency(module);
184199
}
185200
}

0 commit comments

Comments
 (0)