Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8bc3079

Browse files
committed
file replace added
1 parent 8765124 commit 8bc3079

25 files changed

+634
-299
lines changed

‎resources/META-INF/plugin.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<idea-plugin>
22
<id>com.mighty16.json.kotlin.class</id>
33
<name>Generate Kotlin data classes from JSON</name>
4-
<version>0.8.2</version>
4+
<version>0.8.7</version>
55
<vendor email="mighty16.developer@gmail.com">Mighty16</vendor>
66

77
<description>Plugin generates Kotlin data classes from JSON text. It can find inner classes in nested JSON. You can disable undesirable fields in class, change field name and type and add Gson annotations.</description>

‎src/com/mighty16/json/ClassFromJSONAction.java‎

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
11
package com.mighty16.json;
22

3+
import com.intellij.notification.*;
34
import com.intellij.openapi.actionSystem.*;
5+
import com.intellij.openapi.application.ApplicationManager;
46
import com.intellij.openapi.module.Module;
57
import com.intellij.openapi.project.Project;
8+
import com.intellij.openapi.project.ProjectManager;
69
import com.intellij.openapi.roots.ModuleRootManager;
10+
import com.intellij.openapi.ui.popup.Balloon;
11+
import com.intellij.openapi.ui.popup.JBPopupFactory;
712
import com.intellij.openapi.vfs.VirtualFile;
13+
import com.intellij.openapi.wm.StatusBar;
814
import com.intellij.pom.Navigatable;
915
import com.intellij.psi.*;
10-
import com.mighty16.json.annotations.AnnotationGenerator;
11-
import com.mighty16.json.annotations.GsonAnnotations;
12-
import com.mighty16.json.kotlin.KotlinFilesGenerator;
13-
import com.mighty16.json.kotlin.KotlinTypesResolver;
16+
import com.mighty16.json.annotations.*;
17+
import com.mighty16.json.generator.SingleFileGenerator;
18+
import com.mighty16.json.generator.SourceFilesGenerator;
19+
import com.mighty16.json.generator.MultipleFilesGenerator;
20+
import com.mighty16.json.resolver.KotlinResolver;
1421
import com.mighty16.json.models.ClassModel;
22+
import com.mighty16.json.resolver.LanguageResolver;
23+
import com.mighty16.json.ui.JSONEditDialog;
24+
import com.mighty16.json.ui.ModelTableDialog;
1525

1626
import java.awt.*;
1727
import java.awt.event.ComponentAdapter;
@@ -22,7 +32,9 @@ public class ClassFromJSONAction extends AnAction implements JSONEditDialog.JSON
2232

2333
private PsiDirectory directory;
2434
private Point lastDialogLocation;
25-
private TypesResolver typesResolver;
35+
private LanguageResolver languageResolver;
36+
37+
private DataContext dataContext;
2638

2739
public ClassFromJSONAction() {
2840
super("JSON Kotlin Models");
@@ -31,11 +43,11 @@ public ClassFromJSONAction() {
3143
@Override
3244
public void actionPerformed(AnActionEvent event) {
3345

34-
typesResolver = new KotlinTypesResolver();
46+
languageResolver = new KotlinResolver();
3547

3648
Project project = event.getProject();
3749
if (project == null) return;
38-
DataContextdataContext = event.getDataContext();
50+
dataContext = event.getDataContext();
3951
final Module module = DataKeys.MODULE.getData(dataContext);
4052
if (module == null) return;
4153
final Navigatable navigatable = DataKeys.NAVIGATABLE.getData(dataContext);
@@ -71,7 +83,7 @@ public void componentMoved(ComponentEvent e) {
7183

7284
@Override
7385
public void onJsonParsed(List<ClassModel> classDataList) {
74-
ModelTableDialog tableDialog = new ModelTableDialog(classDataList,typesResolver, this);
86+
ModelTableDialog tableDialog = new ModelTableDialog(classDataList,languageResolver, this);
7587
if (lastDialogLocation != null) {
7688
tableDialog.setLocation(lastDialogLocation);
7789
}
@@ -86,14 +98,49 @@ public void componentMoved(ComponentEvent e) {
8698
}
8799

88100
@Override
89-
public void onModelsReady(List<ClassModel> data, int annotationsType) {
101+
public void onModelsReady(List<ClassModel> data, StringsingleFileName, int annotationsType) {
90102
AnnotationGenerator annotations = null;
91103
switch (annotationsType) {
92104
case 1:
93105
annotations = new GsonAnnotations();
94106
break;
107+
case 2:
108+
annotations = new FastJsonAnnotation();
109+
break;
110+
case 3:
111+
annotations = new MoshiAnnotations();
112+
break;
113+
case 4:
114+
annotations = new JacksonAnnotations();
115+
break;
116+
}
117+
SourceFilesGenerator generator;
118+
if (singleFileName == null) {
119+
generator = new MultipleFilesGenerator(languageResolver, annotations);
120+
} else {
121+
generator = new SingleFileGenerator(languageResolver, annotations, singleFileName);
95122
}
96-
SourceFilesGenerator generator = new KotlinFilesGenerator(typesResolver, annotations);
123+
124+
generator.setListener(new SourceFilesGenerator.Listener() {
125+
@Override
126+
public void onFilesGenerated(int filesCount) {
127+
128+
String message = filesCount + " data "+ ((filesCount==1)?"class":"classes")+ " generated from JSON";
129+
130+
final NotificationGroup GROUP_DISPLAY_ID_INFO =
131+
new NotificationGroup("JSON to data class",
132+
NotificationDisplayType.BALLOON, true);
133+
134+
ApplicationManager.getApplication().invokeLater(new Runnable() {
135+
@Override
136+
public void run() {
137+
Notification notification = GROUP_DISPLAY_ID_INFO.createNotification(message, NotificationType.INFORMATION);
138+
Notifications.Bus.notify(notification, directory.getProject());
139+
}
140+
});
141+
}
142+
});
143+
97144
generator.generateFiles(directory, data);
98145
}
99146
}

‎src/com/mighty16/json/SourceFilesGenerator.java‎

Lines changed: 0 additions & 51 deletions
This file was deleted.

‎src/com/mighty16/json/annotations/AnnotationGenerator.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
public interface AnnotationGenerator {
55

66
String getSerializeName(String jsonKey);
7+
String getImportString();
78

89
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.mighty16.json.annotations;
2+
3+
4+
public class FastJsonAnnotation implements AnnotationGenerator {
5+
6+
7+
@Override
8+
public String getSerializeName(String jsonKey) {
9+
return "@JSONField(name=\"" + jsonKey + "\")";
10+
}
11+
12+
@Override
13+
public String getImportString() {
14+
return "com.alibaba.fastjson.JSON";
15+
}
16+
}

‎src/com/mighty16/json/annotations/GsonAnnotations.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,9 @@ public class GsonAnnotations implements AnnotationGenerator {
88
public String getSerializeName(String jsonKey) {
99
return "@SerializedName(\"" + jsonKey + "\")";
1010
}
11+
12+
@Override
13+
public String getImportString() {
14+
return "com.google.gson.annotations.SerializedName";
15+
}
1116
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.mighty16.json.annotations;
2+
3+
4+
public class JacksonAnnotations implements AnnotationGenerator {
5+
@Override
6+
public String getSerializeName(String jsonKey) {
7+
return "@JsonProperty(\"" + jsonKey + "\")";
8+
}
9+
10+
@Override
11+
public String getImportString() {
12+
return "com.fasterxml.jackson.annotation.JsonProperty";
13+
}
14+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.mighty16.json.annotations;
2+
3+
4+
public class MoshiAnnotations implements AnnotationGenerator {
5+
6+
7+
@Override
8+
public String getSerializeName(String jsonKey) {
9+
return "@Json(name = \"" + jsonKey + "\")";
10+
}
11+
12+
@Override
13+
public String getImportString() {
14+
return "com.squareup.moshi.Json";
15+
}
16+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.mighty16.json.generator;
2+
3+
4+
import com.intellij.openapi.command.WriteCommandAction;
5+
import com.intellij.openapi.project.Project;
6+
import com.intellij.openapi.wm.StatusBar;
7+
import com.intellij.psi.*;
8+
import com.intellij.psi.impl.file.PsiDirectoryFactory;
9+
import com.mighty16.json.annotations.AnnotationGenerator;
10+
import com.mighty16.json.resolver.LanguageResolver;
11+
import com.mighty16.json.models.ClassModel;
12+
13+
import java.util.List;
14+
15+
public class MultipleFilesGenerator extends SourceFilesGenerator {
16+
17+
public MultipleFilesGenerator(LanguageResolver resolver, AnnotationGenerator annotations) {
18+
super(resolver, annotations);
19+
}
20+
21+
@Override
22+
public void generateFiles(PsiDirectory directory, List<ClassModel> classDataList) {
23+
Project project = directory.getProject();
24+
PsiFileFactory factory = PsiFileFactory.getInstance(project);
25+
PsiDirectoryFactory directoryFactory = PsiDirectoryFactory.getInstance(directory.getProject());
26+
27+
for (ClassModel classData : classDataList) {
28+
classData.packageName = directoryFactory.getQualifiedName(directory, true);
29+
30+
StringBuilder builder = new StringBuilder();
31+
32+
builder.append(String.format(PACKAGE_BLOCK, classData.packageName));
33+
if (annotations != null) {
34+
builder.append("import " + annotations.getImportString() + "\n\n");
35+
}
36+
37+
String sourceText = builder.toString() + generateFileContentForClass(classData);
38+
saveFile(factory, directory, resolver.getFileName(classData.name), sourceText);
39+
}
40+
41+
if (listener != null) {
42+
listener.onFilesGenerated(classDataList.size());
43+
}
44+
}
45+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.mighty16.json.generator;
2+
3+
import com.intellij.openapi.project.Project;
4+
import com.intellij.psi.PsiDirectory;
5+
import com.intellij.psi.PsiFileFactory;
6+
import com.intellij.psi.impl.file.PsiDirectoryFactory;
7+
import com.mighty16.json.resolver.LanguageResolver;
8+
import com.mighty16.json.annotations.AnnotationGenerator;
9+
import com.mighty16.json.models.ClassModel;
10+
import java.util.List;
11+
12+
public class SingleFileGenerator extends SourceFilesGenerator {
13+
14+
15+
private String fileName;
16+
17+
public SingleFileGenerator(LanguageResolver resolver, AnnotationGenerator annotations, String fileName) {
18+
super(resolver, annotations);
19+
this.fileName = fileName;
20+
}
21+
22+
@Override
23+
public void generateFiles(PsiDirectory directory, List<ClassModel> classDataList) {
24+
Project project = directory.getProject();
25+
PsiFileFactory factory = PsiFileFactory.getInstance(project);
26+
PsiDirectoryFactory directoryFactory = PsiDirectoryFactory.getInstance(directory.getProject());
27+
28+
String packageName = directoryFactory.getQualifiedName(directory, true);
29+
30+
final StringBuilder resultFileContent = new StringBuilder();
31+
32+
resultFileContent.append(String.format(SourceFilesGenerator.PACKAGE_BLOCK, packageName));
33+
34+
int initialLength = resultFileContent.length();
35+
36+
if (annotations != null) {
37+
resultFileContent.insert(initialLength, "\n" + "import " + annotations.getImportString() + "\n\n");
38+
}
39+
40+
for (ClassModel classData : classDataList) {
41+
resultFileContent.append(generateFileContentForClass(classData) + "\n\n\n");
42+
}
43+
44+
saveFile(factory,directory,resolver.getFileName(fileName),resultFileContent.toString());
45+
46+
if (listener != null) {
47+
listener.onFilesGenerated(1);
48+
}
49+
}
50+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /