diff --git a/CHANGELOG.md b/CHANGELOG.md index 128dad9330f897b3dbfb01f35f2a230f959052bb..b767c0c0d9f7997284e1a66029ecda00cddb0dc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ # Solon Changelog -## [Unreleased] -### Added -- Initial scaffold created from [IntelliJ Platform Plugin Template](https://github.com/JetBrains/intellij-platform-plugin-template) +## [0.0.1-M2] - 2023-03-30 + +### [Fixed] + +1. 修复sdk一直加载为空的bug +2. 修复无法获取远程版本和依赖的问题 +3. 修复勾选git没有git init的问题 diff --git a/README.md b/README.md index 22e2bdba6fab60cf6bbc7f480b5055b71d9a8be0..12ad425bf4efc155362073376170527d7a3c0cc9 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,23 @@ -# Solon - -[![Version](https://img.shields.io/jetbrains/plugin/v/PLUGIN_ID.svg)](https://plugins.jetbrains.com/plugin/PLUGIN_ID) -[![Downloads](https://img.shields.io/jetbrains/plugin/d/PLUGIN_ID.svg)](https://plugins.jetbrains.com/plugin/PLUGIN_ID) - -## Template ToDo list -- [x] Create a new [IntelliJ Platform Plugin Template][template] project. -- [ ] Get familiar with the [template documentation][template]. -- [ ] Verify the [pluginGroup](./gradle.properties), [plugin ID](./src/main/resources/META-INF/plugin.xml) and [sources package](./src/main/kotlin). -- [ ] Review the [Legal Agreements](https://plugins.jetbrains.com/docs/marketplace/legal-agreements.html?from=IJPluginTemplate). -- [ ] [Publish a plugin manually](https://plugins.jetbrains.com/docs/intellij/publishing-plugin.html?from=IJPluginTemplate) for the first time. -- [ ] Set the Plugin ID in the above README badges. -- [ ] Set the [Plugin Signing](https://plugins.jetbrains.com/docs/intellij/plugin-signing.html?from=IJPluginTemplate) related [secrets](https://github.com/JetBrains/intellij-platform-plugin-template#environment-variables). -- [ ] Set the [Deployment Token](https://plugins.jetbrains.com/docs/marketplace/plugin-upload.html?from=IJPluginTemplate). -- [ ] Click the Watch button on the top of the [IntelliJ Platform Plugin Template][template] to be notified about releases containing new features and fixes. +# Solon Intellij Plugin + +[中文文档](README_ZH.md) + -This Fancy IntelliJ Platform Plugin is going to be your implementation of the brilliant ideas that you have. +![](https://pic.imgdb.cn/item/64250e16a682492fccc0e71e.png "preview") +future: -This specific section is a source for the [plugin.xml](/src/main/resources/META-INF/plugin.xml) file which will be extracted by the [Gradle](/build.gradle.kts) during the build process. +1. solon initializr : create solon project +2. solon completion : yml .. completion -To keep everything working, do not remove `` sections. ## Installation - Using IDE built-in plugin system: - + Settings/Preferences > Plugins > Marketplace > Search for "Solon" > Install Plugin - -- Manually: - - Download the [latest release](https://gitee.com/noear/solon-idea-plugin/releases) and install it manually using - Settings/Preferences > Plugins > ⚙️ > Install plugin from disk... - --- Plugin based on the [IntelliJ Platform Plugin Template][template]. diff --git a/README_ZH.md b/README_ZH.md new file mode 100644 index 0000000000000000000000000000000000000000..46ed382c234a384c651bb139693bfa2a0e9f0207 --- /dev/null +++ b/README_ZH.md @@ -0,0 +1,21 @@ +# Solon Intellij Plugin + +[Enginsh Document](README.md) + + + +![](https://pic.imgdb.cn/item/64250e16a682492fccc0e71e.png "preview") +功能: + +1. solon项目创建向导 : 用于创建solon项目 +2. solon代码补全 :各种补全 + + + +## 安装方式 + +在intellij idea的plugin marketplace里搜索solon点击install安装重启idea即可享用 + + +--- +感谢Intellij \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index cc4aa2778bb001ac79b5e940c09f68399d9bd545..ec847d7de52ce8c38445096d562218bcf87448af 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,11 +7,12 @@ plugins { // Java support id("java") // Kotlin support - id("org.jetbrains.kotlin.jvm") version "1.8.0" + id("org.jetbrains.kotlin.jvm") version "1.8.10" // Gradle IntelliJ Plugin - id("org.jetbrains.intellij") version "1.12.0" + id("org.jetbrains.intellij") version "1.13.3" // Gradle Changelog Plugin id("org.jetbrains.changelog") version "2.0.0" + id("idea") } group = properties("pluginGroup") @@ -20,18 +21,18 @@ version = properties("pluginVersion") // Configure project's dependencies repositories { mavenCentral() + maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") } } -dependencies{ - // https://github.com/alibaba/fastjson2 +dependencies { + implementation("org.noear:snack3:3.2.61") implementation("com.alibaba.fastjson2:fastjson2:2.0.23") - // https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 +// implementation("org.projectlombok:lombok:1.18.26") +// annotationProcessor("org.projectlombok:lombok:1.18.26") + implementation("com.squareup.okhttp3:okhttp:5.0.0-alpha.11") implementation("org.apache.commons:commons-collections4:4.4") + implementation("cn.hutool:hutool-core:5.8.16") } -// Set the JVM language level used to build the project. Use Java 11 for 2020.3+, and Java 17 for 2022.2+. -kotlin { - jvmToolchain(11) -} // Configure Gradle IntelliJ Plugin - read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html intellij { @@ -55,6 +56,16 @@ tasks { gradleVersion = properties("gradleVersion") } + withType { + sourceCompatibility = "11" + targetCompatibility = "11" + } + + + runIde { + jvmArgs = listOf("-Dfile.encoding=UTF-8") + } + patchPluginXml { version.set(properties("pluginVersion")) sinceBuild.set(properties("pluginSinceBuild")) diff --git a/gradle.properties b/gradle.properties index 55cde7790ff6d49297d0709905a6b4b62f292345..132a7b27ba711fddfd2f7814354f03ae7250536f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,22 +1,18 @@ # IntelliJ Platform Artifacts Repositories -> https://plugins.jetbrains.com/docs/intellij/intellij-artifacts.html - -pluginGroup = org.noear.solon.idea.plugin -pluginName = Solon -pluginRepositoryUrl = https://gitee.com/noear/solon-idea-plugin +pluginGroup=org.noear.solon.idea.plugin +pluginName=Solon +pluginRepositoryUrl=https://gitee.com/noear/solon-idea-plugin # SemVer format -> https://semver.org -pluginVersion = 0.0.1-M1 - +pluginVersion=0.0.1-M2 # Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html -pluginSinceBuild = 213 -pluginUntilBuild = 223.* - +pluginSinceBuild=213.7172.25 +pluginUntilBuild=231.* # IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension -platformType = IC -platformVersion = 2021.3.3 - +platformType=IC +platformVersion=2021.3.3 # Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html # Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22 -platformPlugins = com.intellij.java, properties, yaml +platformPlugins = com.intellij.java, properties, yaml, com.intellij.uiDesigner # Gradle Releases -> https://github.com/gradle/gradle/releases gradleVersion = 7.6 @@ -28,3 +24,4 @@ kotlin.stdlib.default.dependency = false # Enable Gradle Configuration Cache -> https://docs.gradle.org/current/userguide/configuration_cache.html # suppress inspection "UnusedProperty" org.gradle.unsafe.configuration-cache = false + diff --git a/screenshots/img.png b/screenshots/img.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae14bbe7bf3b393bdfe7c908c6fcfdf4735f5ef Binary files /dev/null and b/screenshots/img.png differ diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/InitializerDownloader.java b/src/main/java/org/noear/solon/idea/plugin/initializr/InitializerDownloader.java new file mode 100644 index 0000000000000000000000000000000000000000..e13d44f81f98a0a2cc4480ad5b0128633b24a1c0 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/InitializerDownloader.java @@ -0,0 +1,84 @@ +package org.noear.solon.idea.plugin.initializr; + +import com.intellij.openapi.application.ApplicationInfo; +import com.intellij.openapi.application.ApplicationNamesInfo; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.progress.ProgressIndicator; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VirtualFile; +import okhttp3.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import static cn.hutool.core.util.ZipUtil.unzip; +import static com.intellij.openapi.util.text.StringUtil.isEmpty; +import static com.intellij.openapi.vfs.newvfs.RefreshQueue.getInstance; +import static java.util.Objects.requireNonNull; + +class InitializerDownloader { + private static final Logger log = Logger.getInstance(InitializerDownloader.class); + + private final SolonInitializrBuilder builder; + + InitializerDownloader(SolonInitializrBuilder builder) { + this.builder = builder; + } + + @NotNull + private String extractFilenameFromContentDisposition(@Nullable String contentDispositionHeader) { + String fileName = null; + if (contentDispositionHeader != null) { + fileName = contentDispositionHeader + .replaceFirst(".*filename=\"?(?[^;\"]+);?\"?.*", "${fileName}"); + } + return !isEmpty(fileName) ? fileName : "unknown"; + } + + void execute(ProgressIndicator indicator) throws IOException { + String downloadUrl = builder.getMetadata().getServerUrl(); + File targetExtractionDir = new File(requireNonNull(builder.getContentEntryPath())); + if (!targetExtractionDir.exists()) { + targetExtractionDir.mkdirs(); + } + System.out.println("Downloading project from: " + downloadUrl); + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("multipart/form-data; boundary=--------------------------232777208425725075004432"); + RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("project", builder.getMetadata().getProject()) + .addFormDataPart("language", builder.getMetadata().getLanguage()) + .addFormDataPart("solonVer", builder.getMetadata().getSolonVer()) + .addFormDataPart("group", builder.getMetadata().getGroupId()) + .addFormDataPart("artifact", builder.getMetadata().getArtifactId()) + .addFormDataPart("packageName", builder.getMetadata().getPackageName()) + .addFormDataPart("packaging", builder.getMetadata().getPackaging()) + .addFormDataPart("javaVer", builder.getMetadata().getJavaVersion()) + .addFormDataPart("dependencies", builder.getMetadata().getDependencies()) + .build(); + Request request = new Request.Builder() + .url(downloadUrl) + .method("POST", body) + .addHeader("User-Agent", ApplicationNamesInfo.getInstance().getFullProductName() + "/" + ApplicationInfo.getInstance().getBuild().asStringWithoutProductCode()) + .addHeader("Accept", "*/*") + .addHeader("Host", "solon.noear.org") + .addHeader("Connection", "keep-alive") + .addHeader("Content-Type", mediaType.toString()) + .build(); + Response response = client.newCall(request).execute(); + File file = new File(targetExtractionDir + File.separator + extractFilenameFromContentDisposition(response.header("Content-Disposition").toString())); + FileOutputStream fos = new FileOutputStream(file); + fos.write(response.body().bytes()); + fos.close(); +// extract(file, targetExtractionDir, null); + unzip(file, targetExtractionDir); + file.delete(); + VirtualFile targetFile = + LocalFileSystem.getInstance().refreshAndFindFileByIoFile(targetExtractionDir); + getInstance().refresh(false, true, null, targetFile); + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/SolonCreationMetadata.java b/src/main/java/org/noear/solon/idea/plugin/initializr/SolonCreationMetadata.java index 9f9094ef5b36f715971eca8d6200c1df162fdfa2..38cb0bf073f95e820b2d2a6be5b00a4e43fa5502 100644 --- a/src/main/java/org/noear/solon/idea/plugin/initializr/SolonCreationMetadata.java +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/SolonCreationMetadata.java @@ -1,14 +1,10 @@ package org.noear.solon.idea.plugin.initializr; -import com.intellij.ide.util.projectWizard.ModuleBuilder; -import com.intellij.ide.util.projectWizard.WizardContext; import com.intellij.openapi.projectRoots.JavaSdk; import com.intellij.openapi.projectRoots.JavaSdkVersion; import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.SdkModel; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.java.LanguageLevel; -import org.noear.solon.idea.plugin.initializr.util.SolonInitializrUtil; import javax.swing.filechooser.FileSystemView; import java.io.File; @@ -36,7 +32,18 @@ public class SolonCreationMetadata { private Sdk sdk; - private String javaVersion = "8"; + private String javaVersion = "1.8"; + + + private String packaging = "jar"; + + private String dependencies = ""; + private String project = "maven"; + private String language = "java"; + private String solonVer = "2.2.6"; + + private String ServerUrl; + private static String sanitize(String input) { return sanitizeFileName(input, false).replace(' ', '-').toLowerCase(); @@ -64,7 +71,7 @@ public class SolonCreationMetadata { } public boolean hasCompatibleJavaVersion() { - if (this.sdk != null){ + if (this.sdk != null) { JavaSdkVersion wizardSdkVersion = JavaSdk.getInstance().getVersion(this.sdk); if (wizardSdkVersion != null) { LanguageLevel selectedLanguageLevel = LanguageLevel.parse(javaVersion); @@ -141,5 +148,51 @@ public class SolonCreationMetadata { this.javaVersion = javaVersion; } + public String getDependencies() { + return dependencies; + } + + public void setDependencies(String dependencies) { + this.dependencies = dependencies; + } + + public String getPackaging() { + return packaging; + } + + public void setPackaging(String packaging) { + this.packaging = packaging; + } + + public String getProject() { + return project; + } + public void setProject(String project) { + this.project = project; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + public String getSolonVer() { + return solonVer; + } + + public void setSolonVer(String solonVer) { + this.solonVer = solonVer; + } + + public String getServerUrl() { + return "https://solon.noear.org/start/build.do"; + } + + public void setServerUrl(String serverUrl) { + ServerUrl = serverUrl; + } } diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/SolonInitializrBuilder.java b/src/main/java/org/noear/solon/idea/plugin/initializr/SolonInitializrBuilder.java index 0db9e7e62706b7302f9a7c01188a24511001be3f..480e7f34d20ff6a4a63f77386c591974cd5ba0f7 100644 --- a/src/main/java/org/noear/solon/idea/plugin/initializr/SolonInitializrBuilder.java +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/SolonInitializrBuilder.java @@ -1,18 +1,19 @@ package org.noear.solon.idea.plugin.initializr; import com.intellij.ide.projectWizard.ProjectSettingsStep; -import com.intellij.ide.util.projectWizard.ModuleBuilder; -import com.intellij.ide.util.projectWizard.ModuleWizardStep; -import com.intellij.ide.util.projectWizard.WizardContext; +import com.intellij.ide.util.projectWizard.*; import com.intellij.openapi.Disposable; +import com.intellij.openapi.GitRepositoryInitializer; import com.intellij.openapi.module.ModifiableModuleModel; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.module.ModuleWithNameAlreadyExists; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.NlsContexts; +import com.intellij.openapi.vfs.LocalFileSystem; import org.jdom.JDOMException; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NonNls; @@ -20,27 +21,48 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.noear.solon.idea.plugin.SolonIcons; import org.noear.solon.idea.plugin.initializr.step.ProjectDetailsStep; +import org.noear.solon.idea.plugin.initializr.util.pojo.MetaDataBean; import javax.swing.*; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Objects; + +import static com.intellij.openapi.application.ApplicationManager.getApplication; +import static com.intellij.openapi.application.ModalityState.current; +import static com.intellij.openapi.module.StdModuleTypes.JAVA; +import static com.intellij.util.net.IOExceptionDialog.showErrorDialog; +import static org.noear.solon.idea.plugin.initializr.util.SolonInitializrUtil.getRemoteMetaData; public class SolonInitializrBuilder extends ModuleBuilder { private SolonCreationMetadata metadata; - @Override - public void setupRootModel(@NotNull ModifiableRootModel modifiableRootModel) throws ConfigurationException { + public void setupRootModel(@NotNull ModifiableRootModel modifiableRootModel) { doAddContentEntry(modifiableRootModel); } @Override public @NotNull Module createModule(@NotNull ModifiableModuleModel moduleModel) throws InvalidDataException, IOException, ModuleWithNameAlreadyExists, ConfigurationException, JDOMException { - // Create Maven Project Module module = super.createModule(moduleModel); + getApplication().invokeLater(() -> { + ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> { + try { + InitializerDownloader downloader = new InitializerDownloader(this); + downloader.execute(ProgressManager.getInstance().getProgressIndicator()); + } catch (IOException e) { + getApplication().invokeLater(() -> showErrorDialog("Error: " + e.getMessage(), "Creation Failed")); + } + if (metadata.isInitGit()) { + Objects.requireNonNull(GitRepositoryInitializer.getInstance()).initRepository(moduleModel.getProject(), Objects.requireNonNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(new File(Objects.requireNonNull(getContentEntryPath()))))); + } + }, "Downloading Required Files...", true, null); + }, current()); + return module; } @@ -82,21 +104,31 @@ public class SolonInitializrBuilder extends ModuleBuilder { return "Build Tools"; } - @Override - public boolean isAvailable() { - return true; - } - @Override public ModuleType getModuleType() { - return ModuleType.EMPTY; + return JAVA; } public SolonCreationMetadata getMetadata() { - if (metadata == null){ + if (metadata == null) { metadata = new SolonCreationMetadata(); } return metadata; } + public MetaDataBean getRemoteMeta() { + return getRemoteMetaData(); + } + + @Override + public @Nullable String getContentEntryPath() { + return metadata.getLocation() + File.separator + metadata.getName(); + } + + @Override + public @Nullable ModuleWizardStep modifySettingsStep(@NotNull SettingsStep settingsStep) { + return new SdkSettingsStep(settingsStep, this, this::isSuitableSdkType); + } + + } diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetails.form b/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetails.form index 190cfe4828777988b3b6bc7f1471e921b3191312..54607632652ac9b5d027914066c8b5639cdcfc89 100644 --- a/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetails.form +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetails.form @@ -1,9 +1,9 @@
- + - + @@ -18,13 +18,17 @@ - + - + + + + + @@ -36,13 +40,13 @@ - + - + @@ -50,7 +54,7 @@ - + @@ -60,7 +64,7 @@ - + @@ -68,7 +72,7 @@ - + @@ -78,7 +82,7 @@ - + @@ -86,7 +90,7 @@ - + @@ -94,17 +98,9 @@ - - - - - - - - - + @@ -112,7 +108,7 @@ - + @@ -120,22 +116,17 @@ - - - - - - + - + - + @@ -153,24 +144,221 @@ - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetails.java b/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetails.java index 620242eae09691dcea7defc40b22e8a9cf776cac..1eecb2193ab737fbd83666d82b13f8c3e4e3d776 100644 --- a/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetails.java +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetails.java @@ -1,12 +1,15 @@ package org.noear.solon.idea.plugin.initializr.step; + import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.ide.util.projectWizard.WizardContext; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.projectRoots.*; +import com.intellij.openapi.projectRoots.JavaSdk; +import com.intellij.openapi.projectRoots.JavaSdkType; +import com.intellij.openapi.projectRoots.JavaSdkVersion; import com.intellij.openapi.roots.ui.configuration.JdkComboBox; import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable; import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; @@ -18,11 +21,13 @@ import com.intellij.ui.components.JBTextField; import org.jetbrains.annotations.NotNull; import org.noear.solon.idea.plugin.initializr.SolonCreationMetadata; import org.noear.solon.idea.plugin.initializr.SolonInitializrBuilder; -import org.noear.solon.idea.plugin.initializr.util.SolonInitializrUtil; +import org.noear.solon.idea.plugin.initializr.util.pojo.MetaDataBean; +import org.noear.solon.idea.plugin.initializr.util.pojo.Options; import javax.swing.*; - -import java.io.File; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.util.*; import static java.util.Objects.requireNonNull; @@ -41,22 +46,88 @@ public class ProjectDetails { private JBTextField TextField_Group; private JBTextField TextField_Artifact; private JBTextField TextField_PackageName; - private ComboBox ComboBox_JavaVersion; + private ComboBox ComboBox_JavaVersion; private JCheckBox CheckBox_InitGit; - private JdkComboBox ComboBox_JDK; + // private JdkComboBox ComboBox_JDK; + private JRadioButton mavenButton; + private JRadioButton gradleKotlinButton; + private JRadioButton gradleGroovyButton; + private JRadioButton javaButton; + private JRadioButton kotlinButton; + private JRadioButton groovyButton; + private JRadioButton snapshotVersionButton; + private JRadioButton defaultVersionButton; + private JList list; + private JRadioButton jarRadioButton; + private JRadioButton warRadioButton; + + + private MetaDataBean remoteMetaData; + + public ProjectDetails(SolonInitializrBuilder moduleBuilder, WizardContext context) { + - public ProjectDetails(SolonInitializrBuilder moduleBuilder, WizardContext context){ - this.moduleBuilder = moduleBuilder; this.wizardContext = context; this.metadata = this.moduleBuilder.getMetadata(); + this.remoteMetaData = this.moduleBuilder.getRemoteMeta(); + DocumentListener dl = new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + updateFieldState(); + } - ComboBox_JDK.addActionListener(e -> { - this.metadata.setSdk(ComboBox_JDK.getSelectedJdk()); - }); + @Override + public void removeUpdate(DocumentEvent e) { + updateFieldState(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + updateFieldState(); + } + + protected void updateFieldState() { + TextField_Artifact.setText(TextField_Name.getText()); + TextField_PackageName.setText(TextField_Group.getText() + "." + TextField_Artifact.getText()); + } + }; + DocumentListener dl2 = new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + updateFieldState(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + updateFieldState(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + updateFieldState(); + } + + protected void updateFieldState() { + TextField_PackageName.setText(TextField_Group.getText() + "." + TextField_Artifact.getText()); + } + }; + TextField_Name.getDocument().addDocumentListener(dl); + TextField_Artifact.getDocument().addDocumentListener(dl2); + TextField_Group.getDocument().addDocumentListener(dl2); + TextField_PackageName.setEditable(false); +// ComboBox_JDK.addActionListener(e -> { +// this.metadata.setSdk(ComboBox_JDK.getSelectedJdk()); +// }); TextField_Name.setText(this.metadata.getName()); TextField_Name.addCaretListener(e -> { +// String text = TextField_Name.getText(); +// String text1 = TextField_Location.getText(); +// File file = new File(text1 + File.separatorChar + text); +// if (file.exists()) { +// +// } this.metadata.setName(TextField_Name.getText()); }); @@ -75,9 +146,13 @@ public class ProjectDetails { this.metadata.setPackageName(TextField_PackageName.getText()); }); + List options1 = remoteMetaData.getJavaVer().getOptions(); + for (Options options : options1) { + ComboBox_JavaVersion.addItem(options.getValue()); + } ComboBox_JavaVersion.setSelectedItem(this.metadata.getJavaVersion()); ComboBox_JavaVersion.addActionListener(e -> { - this.metadata.setJavaVersion(ComboBox_JavaVersion.getSelectedItem().toString()); + this.metadata.setJavaVersion(requireNonNull(ComboBox_JavaVersion.getSelectedItem()).toString()); }); CheckBox_InitGit.setSelected(this.metadata.isInitGit()); @@ -98,21 +173,55 @@ public class ProjectDetails { jTextField.setText(s); metadata.setLocation(jTextField.getText()); } + }); + mavenButton.addActionListener(e -> this.metadata.setProject("maven")); + gradleKotlinButton.addActionListener(e -> this.metadata.setProject("gradle-kotlin")); + gradleGroovyButton.addActionListener(e -> this.metadata.setProject("gradle-groovy")); + javaButton.addActionListener(e -> this.metadata.setLanguage("java")); + kotlinButton.addActionListener(e -> this.metadata.setLanguage("kotlin")); + groovyButton.addActionListener(e -> this.metadata.setLanguage("groovy")); + List options = remoteMetaData.getSolonVer().getOptions(); + for (Options option : options) { + if (Objects.equals(option.getValue(), remoteMetaData.getSolonVer().getDefaultValue())) { + defaultVersionButton.setText(option.getValue()); + } + snapshotVersionButton.setText(option.getValue()); + } + snapshotVersionButton.addActionListener(e -> this.metadata.setSolonVer(snapshotVersionButton.getText())); + defaultVersionButton.addActionListener(e -> this.metadata.setSolonVer(defaultVersionButton.getText())); + jarRadioButton.addActionListener(e -> this.metadata.setPackaging("jar")); + warRadioButton.addActionListener(e -> this.metadata.setPackaging("war")); + + List options2 = remoteMetaData.getDependencies().getOptions(); + HashMap hashMap = new HashMap<>(); + for (Options options3 : options2) { + hashMap.put(options3.getTitle() + " - " + options3.getDescription(), options3.getValue()); + } + Set> entries = hashMap.entrySet(); + DefaultListModel model = new DefaultListModel(); + for (Map.Entry stringStringEntry : entries) { + model.addElement(stringStringEntry.getKey()); + } + list.setModel(model); + list.addListSelectionListener(e -> { + this.metadata.setDependencies(hashMap.get(list.getSelectedValue())); + System.out.println(hashMap.get(list.getSelectedValue())); }); } - public JPanel getRoot(){ + public JPanel getRoot() { return Panel_Root; } - public void createUIComponents(){ - Project project = this.wizardContext.getProject() != null ? wizardContext.getProject() : ProjectManager.getInstance().getDefaultProject(); - - ProjectStructureConfigurable projectConfig = ProjectStructureConfigurable.getInstance(project); - ProjectSdksModel jdksModel = projectConfig.getProjectJdksModel(); - ComboBox_JDK = new JdkComboBox(project, jdksModel, (sdk) -> sdk instanceof JavaSdkType, null, null, null); - } +// public void createUIComponents() { +// Project project = this.wizardContext.getProject() != null ? wizardContext.getProject() : ProjectManager.getInstance().getDefaultProject(); +// +// ProjectStructureConfigurable projectConfig = ProjectStructureConfigurable.getInstance(project); +// ProjectSdksModel jdksModel = projectConfig.getProjectJdksModel(); +// System.out.println(jdksModel.getProjectSdks()); +// ComboBox_JDK = new JdkComboBox(project, jdksModel, (sdk) -> sdk instanceof JavaSdkType, null, null, null); +// } public boolean validate(ModuleBuilder moduleBuilder, WizardContext wizardContext) throws ConfigurationException { @@ -139,5 +248,9 @@ public class ProjectDetails { } + public void setModuleBuilder(SolonInitializrBuilder moduleBuilder) { + + } + } diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetailsStep.java b/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetailsStep.java index 0ee388d7782b1016977c9b64bef6db235a0af35f..b663d162a56fd461d7259a6d62ecd5dc01adc125 100644 --- a/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetailsStep.java +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/step/ProjectDetailsStep.java @@ -4,6 +4,7 @@ import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.ide.util.projectWizard.WizardContext; import com.intellij.openapi.Disposable; import com.intellij.openapi.options.ConfigurationException; +import org.jetbrains.annotations.NonNls; import org.noear.solon.idea.plugin.initializr.SolonCreationMetadata; import org.noear.solon.idea.plugin.initializr.SolonInitializrBuilder; @@ -15,7 +16,6 @@ public class ProjectDetailsStep extends ModuleWizardStep implements Disposable { private final SolonInitializrBuilder moduleBuilder; private final WizardContext wizardContext; private final SolonCreationMetadata metadata; - private ProjectDetails detailsForm; public ProjectDetailsStep(SolonInitializrBuilder moduleBuilder, WizardContext wizardContext) { @@ -32,7 +32,7 @@ public class ProjectDetailsStep extends ModuleWizardStep implements Disposable { @Override public boolean validate() throws ConfigurationException { - if (this.metadata == null){ + if (this.metadata == null) { throw new ConfigurationException( "Could not fetch metadata. Please go back and try again.", "Error"); @@ -50,4 +50,11 @@ public class ProjectDetailsStep extends ModuleWizardStep implements Disposable { @Override public void dispose() { } + + @Override + public @NonNls String getHelpId() { + return "https://solon.noear.org/"; + } + + } diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/SolonInitializrUtil.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/SolonInitializrUtil.java index b372a38affc88527a8707fa18e2cd97c88db212a..4e7b82171350209895cf06c5d5587e28659bd0f7 100644 --- a/src/main/java/org/noear/solon/idea/plugin/initializr/util/SolonInitializrUtil.java +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/SolonInitializrUtil.java @@ -6,7 +6,14 @@ import com.intellij.openapi.projectRoots.JavaSdk; import com.intellij.openapi.projectRoots.JavaSdkVersion; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.util.ObjectUtils; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; import org.jetbrains.annotations.Nullable; +import org.noear.snack.ONode; +import org.noear.solon.idea.plugin.initializr.util.pojo.MetaDataBean; + +import java.io.IOException; /** * @author liupeiqiang @@ -22,4 +29,21 @@ public class SolonInitializrUtil { return wizardSdk == null ? null : JavaSdk.getInstance().getVersion(wizardSdk); } + + public static MetaDataBean getRemoteMetaData() { + MetaDataBean metaDataBean; + String metaDataUrl = "https://solon.noear.org/start/matedata.json"; + OkHttpClient okHttpClient = new OkHttpClient(); + Request request = new Request.Builder().url(metaDataUrl).build(); + try { + Response response = okHttpClient.newCall(request).execute(); + String metajson = response.body().string(); + ONode o = ONode.loadStr(metajson); + metaDataBean = o.toObject(MetaDataBean.class); + } catch (IOException e) { + throw new RuntimeException(e); + } + return metaDataBean; + } + } diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Artifact.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Artifact.java new file mode 100644 index 0000000000000000000000000000000000000000..3404b21cb0fe318eb09646769eb1f9de7b099b73 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Artifact.java @@ -0,0 +1,18 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + +public class Artifact { + + private String defaultValue; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Dependencies.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Dependencies.java new file mode 100644 index 0000000000000000000000000000000000000000..7bfda176213648ca08cc59007b38706e6453bff6 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Dependencies.java @@ -0,0 +1,29 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + +import java.util.List; + +public class Dependencies { + + private String defaultValue; + private List options; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public List getOptions() { + return options; + } + + public void setOptions(List options) { + this.options = options; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Description.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Description.java new file mode 100644 index 0000000000000000000000000000000000000000..35521ba65f96783a0b2ef692b846e672098a28e4 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Description.java @@ -0,0 +1,19 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + + +public class Description { + + private String defaultValue; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Group.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Group.java new file mode 100644 index 0000000000000000000000000000000000000000..00d1634c0bb5abd6143be0ef44a1c5365565c8b7 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Group.java @@ -0,0 +1,19 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + + +public class Group { + + private String defaultValue; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/JavaVer.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/JavaVer.java new file mode 100644 index 0000000000000000000000000000000000000000..ba1759f6e74be5c659183394fa819843a0201194 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/JavaVer.java @@ -0,0 +1,30 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + +import java.util.List; + + +public class JavaVer { + + private String defaultValue; + private List options; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public List getOptions() { + return options; + } + + public void setOptions(List options) { + this.options = options; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Language.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Language.java new file mode 100644 index 0000000000000000000000000000000000000000..fcab6bbd87adfecc593f67f373595c71516c5eaf --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Language.java @@ -0,0 +1,30 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + +import java.util.List; + + +public class Language { + + private String defaultValue; + private List options; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public List getOptions() { + return options; + } + + public void setOptions(List options) { + this.options = options; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/MetaDataBean.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/MetaDataBean.java new file mode 100644 index 0000000000000000000000000000000000000000..71af7ddce3f8eb682a5c5de43dd17ffedfcdbd04 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/MetaDataBean.java @@ -0,0 +1,100 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + + +public class MetaDataBean { + + private Project project; + private Language language; + private SolonVer solonVer; + private Group group; + private Artifact artifact; + private Description description; + private PackageName packageName; + private Packaging packaging; + private JavaVer javaVer; + private Dependencies dependencies; + + public Project getProject() { + return project; + } + + public void setProject(Project project) { + this.project = project; + } + + public Language getLanguage() { + return language; + } + + public void setLanguage(Language language) { + this.language = language; + } + + public SolonVer getSolonVer() { + return solonVer; + } + + public void setSolonVer(SolonVer solonVer) { + this.solonVer = solonVer; + } + + public Group getGroup() { + return group; + } + + public void setGroup(Group group) { + this.group = group; + } + + public Artifact getArtifact() { + return artifact; + } + + public void setArtifact(Artifact artifact) { + this.artifact = artifact; + } + + public Description getDescription() { + return description; + } + + public void setDescription(Description description) { + this.description = description; + } + + public PackageName getPackageName() { + return packageName; + } + + public void setPackageName(PackageName packageName) { + this.packageName = packageName; + } + + public Packaging getPackaging() { + return packaging; + } + + public void setPackaging(Packaging packaging) { + this.packaging = packaging; + } + + public JavaVer getJavaVer() { + return javaVer; + } + + public void setJavaVer(JavaVer javaVer) { + this.javaVer = javaVer; + } + + public Dependencies getDependencies() { + return dependencies; + } + + public void setDependencies(Dependencies dependencies) { + this.dependencies = dependencies; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Options.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Options.java new file mode 100644 index 0000000000000000000000000000000000000000..f45769f047da481ab3490b3a95144934d7320db5 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Options.java @@ -0,0 +1,37 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + + +public class Options { + + private String value; + private String title; + private String description; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/PackageName.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/PackageName.java new file mode 100644 index 0000000000000000000000000000000000000000..fd6157525a241e7909efc7ef8b3d84e10ff28bd6 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/PackageName.java @@ -0,0 +1,19 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + + +public class PackageName { + + private String defaultValue; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Packaging.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Packaging.java new file mode 100644 index 0000000000000000000000000000000000000000..bb1c215917f6469535565ff487343e59ca6308e0 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Packaging.java @@ -0,0 +1,30 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + +import java.util.List; + + +public class Packaging { + + private String defaultValue; + private List options; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public List getOptions() { + return options; + } + + public void setOptions(List options) { + this.options = options; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Project.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Project.java new file mode 100644 index 0000000000000000000000000000000000000000..a815cdddb4b8e2d8e9c363f1a21c6359f4ab3b30 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/Project.java @@ -0,0 +1,30 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + +import java.util.List; + + +public class Project { + + private String defaultValue; + private List options; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public List getOptions() { + return options; + } + + public void setOptions(List options) { + this.options = options; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/SolonVer.java b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/SolonVer.java new file mode 100644 index 0000000000000000000000000000000000000000..4880925a209cabdfb82efd02a7c972f9d5f98639 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/SolonVer.java @@ -0,0 +1,30 @@ +/** + * Copyright 2023 json.cn + */ +package org.noear.solon.idea.plugin.initializr.util.pojo; + +import java.util.Date; +import java.util.List; + +public class SolonVer { + + private String defaultValue; + private List options; + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public List getOptions() { + return options; + } + + public void setOptions(List options) { + this.options = options; + } + +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/metadata.json b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..d7f4615b86b4b42b8dd11fc467efb49373e7a946 --- /dev/null +++ b/src/main/java/org/noear/solon/idea/plugin/initializr/util/pojo/metadata.json @@ -0,0 +1,140 @@ +{ + "project": { + "defaultValue": "maven", + "options": [ + { + "value": "maven", + "title": "Maven" + }, + { + "value": "gradle_groovy", + "title": "Gradle - Groovy" + }, + { + "value": "gradle_kotlin", + "title": "Gradle - Kotlin" + } + ] + }, + "language": { + "defaultValue": "java", + "options": [ + { + "value": "java", + "title": "Java" + }, + { + "value": "kotlin", + "title": "Kotlin" + }, + { + "value": "groovy", + "title": "Groovy" + } + ] + }, + "solonVer": { + "defaultValue": "2.2.7", + "options": [ + { + "value": "2.2.7", + "title": "2.2.7" + }, + { + "value": "2.2.8-SNAPSHOT", + "title": "2.2.8-SNAPSHOT" + } + ] + }, + "group": { + "defaultValue": "com.example" + }, + "artifact": { + "defaultValue": "demo" + }, + "description": { + "defaultValue": "Demo project for Solon" + }, + "packageName": { + "defaultValue": "com.example.demo" + }, + "packaging": { + "defaultValue": "jar", + "options": [ + { + "value": "jar", + "title": "Jar" + }, + { + "value": "war", + "title": "War" + } + ] + }, + "javaVer": { + "defaultValue": "1.8", + "options": [ + { + "value": "19", + "title": "19" + }, + { + "value": "17", + "title": "17" + }, + { + "value": "11", + "title": "11" + }, + { + "value": "1.8", + "title": "1.8" + } + ] + }, + "dependencies": { + "defaultValue": "solon-api", + "options": [ + { + "value": "solon-lib", + "title": "Solon Lib", + "description": "Solon base shortcut package" + }, + { + "value": "solon-job", + "title": "Solon Job", + "description": "Solon Lib + Scheduling Simple" + }, + { + "value": "solon-api", + "title": "Solon Api", + "description": "Solon Lib + Jlhttp + StaticFiles + Cors" + }, + { + "value": "solon-web", + "title": "Solon Web", + "description": "Solon Api + Freemarker + SessionState" + }, + { + "value": "solon-rpc", + "title": "Solon Rpc", + "description": "Solon Api + Nami + Json + Hessian" + }, + { + "value": "solon-cloud", + "title": "Solon Cloud", + "description": "Solon Rpc + Consul" + }, + { + "value": "solon-cloud-alibaba", + "title": "Solon Cloud Alibaba", + "description": "Solon Rpc + Nacos + Rocketmq + Sentinel" + }, + { + "value": "solon-cloud-water", + "title": "Solon Cloud Water", + "description": "Solon Rpc + Water" + } + ] + } +} \ No newline at end of file diff --git a/src/main/java/org/noear/solon/idea/plugin/suggestion/service/SuggestionServiceImpl.java b/src/main/java/org/noear/solon/idea/plugin/suggestion/service/SuggestionServiceImpl.java index 7288192419414546bf1cf42e4d55f3f3c1e43661..7cb679b917363d8abf4de0fae840bc4faacb65fd 100644 --- a/src/main/java/org/noear/solon/idea/plugin/suggestion/service/SuggestionServiceImpl.java +++ b/src/main/java/org/noear/solon/idea/plugin/suggestion/service/SuggestionServiceImpl.java @@ -2,7 +2,6 @@ package org.noear.solon.idea.plugin.suggestion.service; import com.alibaba.fastjson2.JSON; import com.intellij.codeInsight.lookup.LookupElementBuilder; -import com.intellij.icons.AllIcons; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; @@ -13,7 +12,6 @@ import org.apache.commons.collections4.Trie; import org.apache.commons.collections4.trie.PatriciaTrie; import org.apache.commons.lang.time.StopWatch; import org.jetbrains.annotations.Nullable; -import org.noear.solon.idea.plugin.SolonIcons; import org.noear.solon.idea.plugin.common.util.LoggerUtil; import org.noear.solon.idea.plugin.suggestion.metadata.MetadataContainer; import org.noear.solon.idea.plugin.suggestion.metadata.json.SolonConfigurationMetadata; @@ -118,10 +116,10 @@ public class SuggestionServiceImpl implements SuggestionService{ private void processContainers(Module module, List containersToProcess) { for (MetadataContainer metadataContainer : containersToProcess) { String metadataFilePath = metadataContainer.getFileUrl(); - try (InputStream inputStream = metadataContainer.getMetadataFile().getInputStream()){ + try (InputStream inputStream = metadataContainer.getMetadataFile().getInputStream()) { SolonConfigurationMetadata solonConfigurationMetadata = JSON.parseObject(new BufferedReader(new InputStreamReader(inputStream)), SolonConfigurationMetadata.class); buildMetadataHierarchy(module, solonConfigurationMetadata); - }catch (IOException e){ + } catch (IOException e) { LoggerUtil.getLogger(this.getClass()).error("Exception encountered while processing metadata file: " + metadataFilePath, e); } } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index c97f70d403413f292f5bf693a56592b5f871de0b..2e320ebc523e3a8c4af05be7594e0f1652982ff8 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -7,6 +7,7 @@ com.intellij.modules.platform com.intellij.modules.java com.intellij.properties + com.intellij.uiDesigner @@ -26,7 +27,7 @@ + order="first"/>