├── PSI程序结构接口 ├── demo │ ├── src │ │ ├── main │ │ │ ├── resources │ │ │ │ └── application.properties │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── demo │ │ │ │ ├── DemoApplication.java │ │ │ │ ├── dto │ │ │ │ ├── User.java │ │ │ │ └── Order.java │ │ │ │ └── cotroller │ │ │ │ └── HelloWorldController.java │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── demo │ │ │ └── DemoApplicationTests.java │ └── .mvn │ │ └── wrapper │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── PsiDemo │ ├── settings.gradle │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── example │ │ └── action │ │ ├── RenameElementAction.java │ │ ├── GetLocalVariableMethod.java │ │ └── PsiFileDemoAction.java └── APIDocPlugin │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── src │ └── main │ │ ├── java │ │ └── org │ │ │ └── example │ │ │ └── dto │ │ │ ├── ApiHeaderDTO.java │ │ │ ├── ApiRequestParamDTO.java │ │ │ └── ApiBodyDTO.java │ │ └── resources │ │ └── META-INF │ │ └── plugin.xml │ └── build.gradle ├── 数据持久化 └── Translator │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── build.gradle │ └── src │ └── main │ └── java │ └── org │ └── example │ └── extension │ ├── TranslatorSetting.java │ └── TranslatorCache.java ├── 监听器 └── Translator │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── src │ └── main │ │ └── java │ │ └── org │ │ └── example │ │ ├── listener │ │ ├── TranslateListener.java │ │ ├── TranslatorActionListenerA.java │ │ ├── TranslatorActionListenerB.java │ │ ├── InitTranslatorWindowListener.java │ │ └── GlobalProblemListener.java │ │ └── extension │ │ ├── TranslatorSetting.java │ │ └── TranslatorCache.java │ └── build.gradle ├── 丰富的拓展点 └── Translator │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── build.gradle │ └── src │ └── main │ ├── resources │ └── META-INF │ │ └── plugin.xml │ └── java │ └── org │ └── example │ └── action │ └── TranslatorAction.java ├── 丰富的消息通知方式 ├── Translator │ ├── settings.gradle │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ └── icons │ │ │ │ ├── translator.png │ │ │ │ ├── translator@2x.png │ │ │ │ ├── translator_dark.png │ │ │ │ └── translator@2x_dark.png │ │ │ └── java │ │ │ ├── icons │ │ │ └── TranslatorIcons.java │ │ │ └── org │ │ │ └── example │ │ │ ├── listener │ │ │ ├── TranslateListener.java │ │ │ ├── TranslatorActionListenerA.java │ │ │ ├── TranslatorActionListenerB.java │ │ │ ├── InitTranslatorWindowListener.java │ │ │ └── GlobalProblemListener.java │ │ │ ├── util │ │ │ └── TranslatorTextProvider.java │ │ │ └── extension │ │ │ ├── TranslatorSetting.java │ │ │ └── TranslatorCache.java │ └── build.gradle └── Notifications │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── build.gradle │ └── src │ └── main │ ├── java │ └── org │ │ └── example │ │ └── action │ │ ├── HintNotification.java │ │ ├── DialogNotification.java │ │ └── TopLevelNotification.java │ └── resources │ └── META-INF │ └── plugin.xml ├── 主题插件开发流程 └── ThemeDemo │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── build.gradle │ └── src │ └── main │ └── resources │ ├── META-INF │ └── plugin.xml │ └── icons │ ├── build.svg │ └── run.svg ├── 插件UI上篇 └── Translator │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── src │ └── main │ │ └── java │ │ └── org │ │ └── example │ │ ├── listener │ │ ├── TranslateListener.java │ │ ├── TranslatorActionListenerA.java │ │ ├── TranslatorActionListenerB.java │ │ ├── InitTranslatorWindowListener.java │ │ ├── GlobalProblemListener.java │ │ └── TranslatorButtonActionListener.java │ │ └── extension │ │ ├── TranslatorSetting.java │ │ └── TranslatorCache.java │ └── build.gradle ├── 插件UI下篇 └── Translator │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── src │ └── main │ │ ├── resources │ │ └── icons │ │ │ ├── translator.png │ │ │ ├── translator@2x.png │ │ │ ├── translator_dark.png │ │ │ └── translator@2x_dark.png │ │ └── java │ │ ├── icons │ │ └── TranslatorIcons.java │ │ └── org │ │ └── example │ │ ├── listener │ │ ├── TranslateListener.java │ │ ├── TranslatorActionListenerA.java │ │ ├── TranslatorActionListenerB.java │ │ ├── InitTranslatorWindowListener.java │ │ └── GlobalProblemListener.java │ │ ├── util │ │ └── TranslatorTextProvider.java │ │ └── extension │ │ ├── TranslatorSetting.java │ │ └── TranslatorCache.java │ └── build.gradle ├── 虚拟文件与文本编辑 ├── JsonToJava │ ├── settings.gradle │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ └── META-INF │ │ │ │ └── plugin.xml │ │ │ └── java │ │ │ └── org │ │ │ └── example │ │ │ └── listener │ │ │ └── ProjectInitListener.java │ └── build.gradle └── TextEditorDemo │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── build.gradle │ └── src │ └── main │ └── resources │ └── META-INF │ └── plugin.xml ├── 插件国际化与其他小技巧介绍 ├── PluginI18N │ ├── settings.gradle │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── i18n │ │ │ │ ├── plugin_en.properties │ │ │ │ └── plugin_zh.properties │ │ │ └── META-INF │ │ │ │ └── plugin.xml │ │ │ └── java │ │ │ └── org │ │ │ └── example │ │ │ ├── config │ │ │ └── PluginConfig.java │ │ │ ├── util │ │ │ └── I18nUtils.java │ │ │ └── action │ │ │ └── NotifyAction.java │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ └── build.gradle └── ConsoleViewDemo │ ├── settings.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── src │ └── main │ │ ├── java │ │ └── org │ │ │ └── example │ │ │ └── action │ │ │ └── TestConsoleAction.java │ │ └── resources │ │ └── META-INF │ │ └── plugin.xml │ └── build.gradle ├── 自定义语言2 └── HTTPRequester │ ├── settings.gradle │ ├── lib │ └── jflex-1.7.0-2.jar │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── src │ └── main │ │ ├── java │ │ └── org │ │ │ └── example │ │ │ └── language │ │ │ ├── CURLLexerAdapter.java │ │ │ ├── HTTPIcons.java │ │ │ ├── CURLElementType.java │ │ │ ├── psi │ │ │ ├── CURLKv.java │ │ │ ├── CURLOption1.java │ │ │ ├── CURLOption2.java │ │ │ ├── CURLOption3.java │ │ │ ├── CURLOption4.java │ │ │ ├── CURLOption5.java │ │ │ ├── CURLOption6.java │ │ │ ├── CURLOption7.java │ │ │ ├── CURLOption4Statement.java │ │ │ ├── CURLCommand.java │ │ │ ├── CURLOption3Statement.java │ │ │ ├── CURLOption5Statement.java │ │ │ ├── CURLOption1Statement.java │ │ │ ├── CURLOption2Statement.java │ │ │ ├── CURLOption6Statement.java │ │ │ ├── CURLOption7Statement.java │ │ │ ├── CURLOptions.java │ │ │ └── impl │ │ │ │ ├── CURLKvImpl.java │ │ │ │ ├── CURLOption1Impl.java │ │ │ │ ├── CURLOption2Impl.java │ │ │ │ ├── CURLOption3Impl.java │ │ │ │ ├── CURLOption4Impl.java │ │ │ │ ├── CURLOption5Impl.java │ │ │ │ ├── CURLOption6Impl.java │ │ │ │ ├── CURLOption7Impl.java │ │ │ │ ├── CURLOption4StatementImpl.java │ │ │ │ ├── CURLCommandImpl.java │ │ │ │ ├── CURLOption3StatementImpl.java │ │ │ │ ├── CURLOption5StatementImpl.java │ │ │ │ └── CURLOption1StatementImpl.java │ │ │ ├── HTTPLanguage.java │ │ │ ├── CURLTokenType.java │ │ │ ├── HTTPFile.java │ │ │ └── HTTPFileType.java │ │ └── resources │ │ └── META-INF │ │ └── plugin.xml │ └── build.gradle ├── 自定义语言3 └── HTTPRequester │ ├── settings.gradle │ ├── lib │ └── jflex-1.7.0-2.jar │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── src │ └── main │ │ └── java │ │ └── org │ │ └── example │ │ └── language │ │ ├── CURLLexerAdapter.java │ │ ├── HTTPIcons.java │ │ ├── CURLElementType.java │ │ ├── psi │ │ ├── CURLKv.java │ │ ├── CURLOption1.java │ │ ├── CURLOption2.java │ │ ├── CURLOption3.java │ │ ├── CURLOption4.java │ │ ├── CURLOption5.java │ │ ├── CURLOption6.java │ │ ├── CURLOption7.java │ │ ├── CURLOption4Statement.java │ │ ├── CURLOption3Statement.java │ │ ├── CURLOption5Statement.java │ │ ├── CURLOption1Statement.java │ │ ├── CURLOption2Statement.java │ │ ├── CURLOption6Statement.java │ │ ├── CURLOption7Statement.java │ │ ├── CURLCommand.java │ │ ├── CURLOptions.java │ │ └── impl │ │ │ ├── CURLKvImpl.java │ │ │ ├── CURLOption1Impl.java │ │ │ ├── CURLOption2Impl.java │ │ │ ├── CURLOption3Impl.java │ │ │ ├── CURLOption4Impl.java │ │ │ ├── CURLOption5Impl.java │ │ │ ├── CURLOption6Impl.java │ │ │ ├── CURLOption7Impl.java │ │ │ ├── CURLOption4StatementImpl.java │ │ │ ├── CURLOption3StatementImpl.java │ │ │ └── CURLOption5StatementImpl.java │ │ ├── HTTPLanguage.java │ │ ├── CURLTokenType.java │ │ ├── HTTPFile.java │ │ ├── feature │ │ └── CURLSyntaxHighlighterFactory.java │ │ └── HTTPFileType.java │ └── build.gradle ├── 自定义语言4 └── HTTPRequester │ ├── settings.gradle │ ├── lib │ └── jflex-1.7.0-2.jar │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── src │ └── main │ │ ├── java │ │ └── org │ │ │ └── example │ │ │ └── language │ │ │ ├── CURLParserUtil.java │ │ │ ├── CURLLexerAdapter.java │ │ │ ├── HTTPIcons.java │ │ │ ├── CURLElementType.java │ │ │ ├── psi │ │ │ ├── CURLKv.java │ │ │ ├── CURLOption1.java │ │ │ ├── CURLOption2.java │ │ │ ├── CURLOption3.java │ │ │ ├── CURLOption4.java │ │ │ ├── CURLOption5.java │ │ │ ├── CURLOption6.java │ │ │ ├── CURLOption7.java │ │ │ ├── CURLOption4Statement.java │ │ │ ├── CURLOption3Statement.java │ │ │ ├── CURLOption5Statement.java │ │ │ ├── CURLOption1Statement.java │ │ │ ├── CURLOption2Statement.java │ │ │ ├── CURLOption6Statement.java │ │ │ ├── CURLOption7Statement.java │ │ │ ├── CURLCommand.java │ │ │ ├── CURLOptions.java │ │ │ └── impl │ │ │ │ ├── CURLKvImpl.java │ │ │ │ ├── CURLOption1Impl.java │ │ │ │ ├── CURLOption2Impl.java │ │ │ │ ├── CURLOption3Impl.java │ │ │ │ ├── CURLOption4Impl.java │ │ │ │ ├── CURLOption5Impl.java │ │ │ │ ├── CURLOption6Impl.java │ │ │ │ ├── CURLOption7Impl.java │ │ │ │ ├── CURLOption4StatementImpl.java │ │ │ │ ├── CURLOption3StatementImpl.java │ │ │ │ └── CURLOption5StatementImpl.java │ │ │ ├── HTTPLanguage.java │ │ │ ├── CURLTokenType.java │ │ │ ├── HTTPFile.java │ │ │ ├── feature │ │ │ ├── CURLSyntaxHighlighterFactory.java │ │ │ ├── CURLCommenter.java │ │ │ └── CURLCommandInsertHandler.java │ │ │ └── HTTPFileType.java │ │ └── gen │ │ └── org │ │ └── example │ │ └── language │ │ └── psi │ │ ├── CURLKv.java │ │ ├── CURLOption1.java │ │ ├── CURLOption2.java │ │ ├── CURLOption3.java │ │ ├── CURLOption4.java │ │ ├── CURLOption5.java │ │ ├── CURLOption6.java │ │ ├── CURLOption7.java │ │ ├── CURLOption4Statement.java │ │ ├── CURLOption3Statement.java │ │ ├── CURLOption5Statement.java │ │ ├── CURLOption1Statement.java │ │ ├── CURLOption2Statement.java │ │ ├── CURLOption6Statement.java │ │ ├── CURLOption7Statement.java │ │ ├── CURLCommand.java │ │ ├── CURLOptions.java │ │ └── impl │ │ ├── CURLKvImpl.java │ │ ├── CURLOption1Impl.java │ │ ├── CURLOption2Impl.java │ │ ├── CURLOption3Impl.java │ │ ├── CURLOption4Impl.java │ │ ├── CURLOption5Impl.java │ │ ├── CURLOption6Impl.java │ │ ├── CURLOption7Impl.java │ │ ├── CURLOption4StatementImpl.java │ │ ├── CURLOption3StatementImpl.java │ │ └── CURLOption5StatementImpl.java │ └── build.gradle ├── 搭建插件项目 ├── HelloWorldPlugin │ ├── settings.gradle │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── build.gradle │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── example │ │ │ └── action │ │ │ └── HelloWorldAction.java │ │ └── resources │ │ └── META-INF │ │ └── plugin.xml └── HelloWorldPlugin2 │ ├── HelloWorldPlugin2.jar │ ├── src │ └── main │ │ └── org │ │ └── example │ │ └── action │ │ └── HelloWorldAction.java │ └── resources │ └── META-INF │ └── plugin.xml ├── .gitignore ├── README.md └── 自定义语言1 └── ParserDemo └── pom.xml /PSI程序结构接口/demo/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /PSI程序结构接口/PsiDemo/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'PsiDemo' 2 | 3 | -------------------------------------------------------------------------------- /数据持久化/Translator/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Translator' 2 | 3 | -------------------------------------------------------------------------------- /监听器/Translator/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Translator' 2 | 3 | -------------------------------------------------------------------------------- /丰富的拓展点/Translator/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Translator' 2 | 3 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Translator' 2 | 3 | -------------------------------------------------------------------------------- /主题插件开发流程/ThemeDemo/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'ThemeDemo' 2 | 3 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Translator' 2 | 3 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Translator' 2 | 3 | -------------------------------------------------------------------------------- /虚拟文件与文本编辑/JsonToJava/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'JsonToJava' 2 | 3 | -------------------------------------------------------------------------------- /PSI程序结构接口/APIDocPlugin/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'APIDocPlugin' 2 | 3 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'PluginI18N' 2 | 3 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'HTTPRequester' 2 | 3 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'HTTPRequester' 2 | 3 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'HTTPRequester' 2 | 3 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Notifications/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Notifications' 2 | 3 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/src/main/resources/i18n/plugin_en.properties: -------------------------------------------------------------------------------- 1 | translate=Translate -------------------------------------------------------------------------------- /搭建插件项目/HelloWorldPlugin/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'HelloWorldPlugin' 2 | 3 | -------------------------------------------------------------------------------- /虚拟文件与文本编辑/TextEditorDemo/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'TextEditorDemo' 2 | 3 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/ConsoleViewDemo/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'ConsoleViewDemo' 2 | 3 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/src/main/resources/i18n/plugin_zh.properties: -------------------------------------------------------------------------------- 1 | translate=\u7ffb\u8bd1 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | output 3 | \#* 4 | .DS_Store 5 | log 6 | out 7 | .gradle 8 | build 9 | *.iml 10 | *.cmd 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## PluginDevelopmentTutorial 2 | 3 | 本项目为掘金小册《IntelliJ IDE 插件开发指南》的配套学习课程项目。 4 | 课程购买链接:https://juejin.cn/book/7146874802144280611 5 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/lib/jflex-1.7.0-2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/自定义语言2/HTTPRequester/lib/jflex-1.7.0-2.jar -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/lib/jflex-1.7.0-2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/自定义语言3/HTTPRequester/lib/jflex-1.7.0-2.jar -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/lib/jflex-1.7.0-2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/自定义语言4/HTTPRequester/lib/jflex-1.7.0-2.jar -------------------------------------------------------------------------------- /PSI程序结构接口/demo/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/PSI程序结构接口/demo/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /搭建插件项目/HelloWorldPlugin2/HelloWorldPlugin2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/搭建插件项目/HelloWorldPlugin2/HelloWorldPlugin2.jar -------------------------------------------------------------------------------- /数据持久化/Translator/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/数据持久化/Translator/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /监听器/Translator/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/监听器/Translator/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /PSI程序结构接口/PsiDemo/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/PSI程序结构接口/PsiDemo/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /丰富的拓展点/Translator/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/丰富的拓展点/Translator/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /主题插件开发流程/ThemeDemo/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/主题插件开发流程/ThemeDemo/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /插件UI上篇/Translator/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/插件UI上篇/Translator/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /插件UI下篇/Translator/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/插件UI下篇/Translator/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/丰富的消息通知方式/Translator/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/自定义语言2/HTTPRequester/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/自定义语言3/HTTPRequester/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/自定义语言4/HTTPRequester/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /虚拟文件与文本编辑/JsonToJava/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/虚拟文件与文本编辑/JsonToJava/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /PSI程序结构接口/APIDocPlugin/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/PSI程序结构接口/APIDocPlugin/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/resources/icons/translator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/插件UI下篇/Translator/src/main/resources/icons/translator.png -------------------------------------------------------------------------------- /搭建插件项目/HelloWorldPlugin/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/搭建插件项目/HelloWorldPlugin/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /丰富的消息通知方式/Notifications/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/丰富的消息通知方式/Notifications/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/resources/icons/translator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/丰富的消息通知方式/Translator/src/main/resources/icons/translator.png -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/resources/icons/translator@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/插件UI下篇/Translator/src/main/resources/icons/translator@2x.png -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/插件国际化与其他小技巧介绍/PluginI18N/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /虚拟文件与文本编辑/TextEditorDemo/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/虚拟文件与文本编辑/TextEditorDemo/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/resources/icons/translator_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/插件UI下篇/Translator/src/main/resources/icons/translator_dark.png -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/resources/icons/translator@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/丰富的消息通知方式/Translator/src/main/resources/icons/translator@2x.png -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/resources/icons/translator_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/丰富的消息通知方式/Translator/src/main/resources/icons/translator_dark.png -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/resources/icons/translator@2x_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/插件UI下篇/Translator/src/main/resources/icons/translator@2x_dark.png -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/ConsoleViewDemo/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/插件国际化与其他小技巧介绍/ConsoleViewDemo/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/resources/icons/translator@2x_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HongJinFeng/PluginDevelopmentTutorial/HEAD/丰富的消息通知方式/Translator/src/main/resources/icons/translator@2x_dark.png -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/src/main/java/org/example/config/PluginConfig.java: -------------------------------------------------------------------------------- 1 | package org.example.config; 2 | 3 | // 配置类,可结合持久化配置知识创建,此处我们只做配置举例 4 | public class PluginConfig { 5 | 6 | public static String langConfig = "en"; 7 | 8 | } 9 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/CURLParserUtil.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.lang.parser.GeneratedParserUtilBase; 4 | 5 | public class CURLParserUtil extends GeneratedParserUtilBase { 6 | } 7 | -------------------------------------------------------------------------------- /PSI程序结构接口/PsiDemo/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /丰富的拓展点/Translator/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /数据持久化/Translator/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /监听器/Translator/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /PSI程序结构接口/APIDocPlugin/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /主题插件开发流程/ThemeDemo/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /虚拟文件与文本编辑/JsonToJava/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Notifications/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /搭建插件项目/HelloWorldPlugin/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /虚拟文件与文本编辑/TextEditorDemo/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /PSI程序结构接口/demo/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar 3 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/ConsoleViewDemo/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/java/icons/TranslatorIcons.java: -------------------------------------------------------------------------------- 1 | package icons; 2 | 3 | import com.intellij.openapi.util.IconLoader; 4 | 5 | import javax.swing.*; 6 | 7 | public interface TranslatorIcons { 8 | Icon TRANS = IconLoader.getIcon("/icons/translator.png", TranslatorIcons.class); 9 | } 10 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/java/icons/TranslatorIcons.java: -------------------------------------------------------------------------------- 1 | package icons; 2 | 3 | import com.intellij.openapi.util.IconLoader; 4 | 5 | import javax.swing.*; 6 | 7 | public interface TranslatorIcons { 8 | Icon TRANS = IconLoader.getIcon("/icons/translator.png", TranslatorIcons.class); 9 | } 10 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/CURLLexerAdapter.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.lexer.FlexAdapter; 4 | 5 | public class CURLLexerAdapter extends FlexAdapter { 6 | 7 | public CURLLexerAdapter() { 8 | super(new _CURLLexer(null)); 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/CURLLexerAdapter.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.lexer.FlexAdapter; 4 | 5 | public class CURLLexerAdapter extends FlexAdapter { 6 | 7 | public CURLLexerAdapter() { 8 | super(new _CURLLexer(null)); 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/CURLLexerAdapter.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.lexer.FlexAdapter; 4 | 5 | public class CURLLexerAdapter extends FlexAdapter { 6 | 7 | public CURLLexerAdapter() { 8 | super(new _CURLLexer(null)); 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/HTTPIcons.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.openapi.util.IconLoader; 4 | 5 | import javax.swing.*; 6 | 7 | public class HTTPIcons { 8 | public static final Icon FILE = IconLoader.getIcon("/icons/http.svg", HTTPIcons.class); 9 | } 10 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/HTTPIcons.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.openapi.util.IconLoader; 4 | 5 | import javax.swing.*; 6 | 7 | public class HTTPIcons { 8 | public static final Icon FILE = IconLoader.getIcon("/icons/http.svg", HTTPIcons.class); 9 | } 10 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/HTTPIcons.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.openapi.util.IconLoader; 4 | 5 | import javax.swing.*; 6 | 7 | public class HTTPIcons { 8 | public static final Icon FILE = IconLoader.getIcon("/icons/http.svg", HTTPIcons.class); 9 | } 10 | -------------------------------------------------------------------------------- /PSI程序结构接口/demo/src/test/java/com/example/demo/DemoApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.example.demo; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class DemoApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/CURLElementType.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.psi.tree.IElementType; 4 | 5 | class CURLElementType extends IElementType { 6 | 7 | public CURLElementType(String debugName) { 8 | super(debugName, HTTPLanguage.INSTANCE); 9 | } 10 | } -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/CURLElementType.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.psi.tree.IElementType; 4 | 5 | class CURLElementType extends IElementType { 6 | 7 | public CURLElementType(String debugName) { 8 | super(debugName, HTTPLanguage.INSTANCE); 9 | } 10 | } -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/CURLElementType.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.psi.tree.IElementType; 4 | 5 | class CURLElementType extends IElementType { 6 | 7 | public CURLElementType(String debugName) { 8 | super(debugName, HTTPLanguage.INSTANCE); 9 | } 10 | } -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLKv.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLKv extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLKv.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLKv extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLKv.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLKv extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLKv.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLKv extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption1.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption1 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption2.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption2 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption3.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption3 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption4.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption4 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption5.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption5 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption6.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption6 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption7.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption7 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption1.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption1 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption2.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption2 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption3.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption3 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption4.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption4 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption5.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption5 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption6.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption6 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption7.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption7 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption1.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption1 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption2.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption2 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption3.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption3 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption4.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption4 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption5.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption5 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption6.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption6 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption7.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption7 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption1.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption1 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption2.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption2 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption3.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption3 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption4.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption4 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption5.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption5 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption6.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption6 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption7.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption7 extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/HTTPLanguage.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.lang.Language; 4 | 5 | public class HTTPLanguage extends Language { 6 | 7 | public static final HTTPLanguage INSTANCE = new HTTPLanguage(); 8 | 9 | private HTTPLanguage() { 10 | super("HTTP"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/HTTPLanguage.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.lang.Language; 4 | 5 | public class HTTPLanguage extends Language { 6 | 7 | public static final HTTPLanguage INSTANCE = new HTTPLanguage(); 8 | 9 | private HTTPLanguage() { 10 | super("HTTP"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/HTTPLanguage.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.lang.Language; 4 | 5 | public class HTTPLanguage extends Language { 6 | 7 | public static final HTTPLanguage INSTANCE = new HTTPLanguage(); 8 | 9 | private HTTPLanguage() { 10 | super("HTTP"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/src/main/java/org/example/util/I18nUtils.java: -------------------------------------------------------------------------------- 1 | package org.example.util; 2 | 3 | 4 | import java.util.Locale; 5 | import java.util.ResourceBundle; 6 | 7 | public class I18nUtils { 8 | 9 | public static String getLocalMessage(String langCode, String key) { 10 | return ResourceBundle.getBundle("i18n.plugin", Locale.forLanguageTag(langCode)).getString(key); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /PSI程序结构接口/demo/src/main/java/com/example/demo/DemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.example.demo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class DemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(DemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption4Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption4Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption4 getOption4(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption4Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption4Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption4 getOption4(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption4Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption4Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption4 getOption4(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption4Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption4Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption4 getOption4(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /搭建插件项目/HelloWorldPlugin/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.5.3' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | 15 | } 16 | 17 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 18 | intellij { 19 | version = '2021.2' 20 | } 21 | 22 | test { 23 | useJUnitPlatform() 24 | } -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/CURLTokenType.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.psi.tree.IElementType; 4 | 5 | public class CURLTokenType extends IElementType { 6 | 7 | public CURLTokenType(String debugName) { 8 | super(debugName, HTTPLanguage.INSTANCE); 9 | } 10 | 11 | public String toString() { 12 | return "CURLTokenType." + super.toString(); 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/CURLTokenType.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.psi.tree.IElementType; 4 | 5 | public class CURLTokenType extends IElementType { 6 | 7 | public CURLTokenType(String debugName) { 8 | super(debugName, HTTPLanguage.INSTANCE); 9 | } 10 | 11 | public String toString() { 12 | return "CURLTokenType." + super.toString(); 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/CURLTokenType.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.psi.tree.IElementType; 4 | 5 | public class CURLTokenType extends IElementType { 6 | 7 | public CURLTokenType(String debugName) { 8 | super(debugName, HTTPLanguage.INSTANCE); 9 | } 10 | 11 | public String toString() { 12 | return "CURLTokenType." + super.toString(); 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLCommand.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLCommand extends PsiElement { 9 | 10 | @NotNull 11 | List getOptionsList(); 12 | 13 | @NotNull 14 | PsiElement getUrl(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption3Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption3Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLKv getKv(); 12 | 13 | @NotNull 14 | CURLOption3 getOption3(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption3Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption3Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLKv getKv(); 12 | 13 | @NotNull 14 | CURLOption3 getOption3(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption3Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption3Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLKv getKv(); 12 | 13 | @NotNull 14 | CURLOption3 getOption3(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption3Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption3Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLKv getKv(); 12 | 13 | @NotNull 14 | CURLOption3 getOption3(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption5Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption5Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption5 getOption5(); 12 | 13 | @NotNull 14 | PsiElement getMethod(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption5Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption5Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption5 getOption5(); 12 | 13 | @NotNull 14 | PsiElement getMethod(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption5Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption5Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption5 getOption5(); 12 | 13 | @NotNull 14 | PsiElement getMethod(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption5Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption5Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption5 getOption5(); 12 | 13 | @NotNull 14 | PsiElement getMethod(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption1Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption1Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption1 getOption1(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption2Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption2Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption2 getOption2(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption6Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption6Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption6 getOption6(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOption7Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption7Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption7 getOption7(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption1Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption1Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption1 getOption1(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption2Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption2Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption2 getOption2(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption6Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption6Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption6 getOption6(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOption7Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption7Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption7 getOption7(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption1Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption1Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption1 getOption1(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption2Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption2Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption2 getOption2(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption6Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption6Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption6 getOption6(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOption7Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption7Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption7 getOption7(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption1Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption1Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption1 getOption1(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption2Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption2Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption2 getOption2(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption6Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption6Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption6 getOption6(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOption7Statement.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOption7Statement extends PsiElement { 9 | 10 | @NotNull 11 | CURLOption7 getOption7(); 12 | 13 | @NotNull 14 | PsiElement getQuotedString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /监听器/Translator/src/main/java/org/example/listener/TranslateListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.openapi.project.Project; 4 | import com.intellij.util.messages.Topic; 5 | 6 | public interface TranslateListener { 7 | Topic TRANSLATE_TOPIC = Topic.create("translate", TranslateListener.class); 8 | 9 | default void beforeTranslated(Project project) { 10 | } 11 | 12 | default void afterTranslated(Project project) { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/src/main/java/org/example/listener/TranslateListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.openapi.project.Project; 4 | import com.intellij.util.messages.Topic; 5 | 6 | public interface TranslateListener { 7 | Topic TRANSLATE_TOPIC = Topic.create("translate", TranslateListener.class); 8 | 9 | default void beforeTranslated(Project project) { 10 | } 11 | 12 | default void afterTranslated(Project project) { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/java/org/example/listener/TranslateListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.openapi.project.Project; 4 | import com.intellij.util.messages.Topic; 5 | 6 | public interface TranslateListener { 7 | Topic TRANSLATE_TOPIC = Topic.create("translate", TranslateListener.class); 8 | 9 | default void beforeTranslated(Project project) { 10 | } 11 | 12 | default void afterTranslated(Project project) { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/java/org/example/listener/TranslateListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.openapi.project.Project; 4 | import com.intellij.util.messages.Topic; 5 | 6 | public interface TranslateListener { 7 | Topic TRANSLATE_TOPIC = Topic.create("translate", TranslateListener.class); 8 | 9 | default void beforeTranslated(Project project) { 10 | } 11 | 12 | default void afterTranslated(Project project) { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLCommand.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLCommand extends PsiElement { 9 | 10 | @NotNull 11 | List getOptionsList(); 12 | 13 | @NotNull 14 | PsiElement getCurl(); 15 | 16 | @NotNull 17 | PsiElement getUrl(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLCommand.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLCommand extends PsiElement { 9 | 10 | @NotNull 11 | List getOptionsList(); 12 | 13 | @NotNull 14 | PsiElement getCurl(); 15 | 16 | @NotNull 17 | PsiElement getUrl(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLCommand.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLCommand extends PsiElement { 9 | 10 | @NotNull 11 | List getOptionsList(); 12 | 13 | @NotNull 14 | PsiElement getCurl(); 15 | 16 | @NotNull 17 | PsiElement getUrl(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/HTTPFile.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.extapi.psi.PsiFileBase; 4 | import com.intellij.openapi.fileTypes.FileType; 5 | import com.intellij.psi.FileViewProvider; 6 | import org.jetbrains.annotations.NotNull; 7 | 8 | public class HTTPFile extends PsiFileBase { 9 | 10 | protected HTTPFile(@NotNull FileViewProvider viewProvider) { 11 | super(viewProvider, HTTPLanguage.INSTANCE); 12 | } 13 | 14 | @Override 15 | public @NotNull FileType getFileType() { 16 | return HTTPFileType.INSTANCE; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/HTTPFile.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.extapi.psi.PsiFileBase; 4 | import com.intellij.openapi.fileTypes.FileType; 5 | import com.intellij.psi.FileViewProvider; 6 | import org.jetbrains.annotations.NotNull; 7 | 8 | public class HTTPFile extends PsiFileBase { 9 | 10 | protected HTTPFile(@NotNull FileViewProvider viewProvider) { 11 | super(viewProvider, HTTPLanguage.INSTANCE); 12 | } 13 | 14 | @Override 15 | public @NotNull FileType getFileType() { 16 | return HTTPFileType.INSTANCE; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/HTTPFile.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.extapi.psi.PsiFileBase; 4 | import com.intellij.openapi.fileTypes.FileType; 5 | import com.intellij.psi.FileViewProvider; 6 | import org.jetbrains.annotations.NotNull; 7 | 8 | public class HTTPFile extends PsiFileBase { 9 | 10 | 11 | protected HTTPFile(@NotNull FileViewProvider viewProvider) { 12 | super(viewProvider, HTTPLanguage.INSTANCE); 13 | } 14 | 15 | @Override 16 | public @NotNull FileType getFileType() { 17 | return HTTPFileType.INSTANCE; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /PSI程序结构接口/APIDocPlugin/src/main/java/org/example/dto/ApiHeaderDTO.java: -------------------------------------------------------------------------------- 1 | package org.example.dto; 2 | 3 | public class ApiHeaderDTO { 4 | 5 | /** 6 | * 请求头 key 7 | */ 8 | private String name = ""; 9 | 10 | /** 11 | * 注释 12 | */ 13 | private String desc = ""; 14 | 15 | public String getName() { 16 | return name; 17 | } 18 | 19 | public void setName(String name) { 20 | this.name = name; 21 | } 22 | 23 | public String getDesc() { 24 | return desc; 25 | } 26 | 27 | public void setDesc(String desc) { 28 | this.desc = desc; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /丰富的拓展点/Translator/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.6.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.4' 17 | } 18 | 19 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 20 | intellij { 21 | version = '2021.2' 22 | } 23 | 24 | test { 25 | useJUnitPlatform() 26 | } -------------------------------------------------------------------------------- /自定义语言1/ParserDemo/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.example 8 | ParserDemo 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 11 13 | 11 14 | 15 | 16 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/ConsoleViewDemo/src/main/java/org/example/action/TestConsoleAction.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.execution.ui.ConsoleViewContentType; 4 | import com.intellij.openapi.actionSystem.AnAction; 5 | import com.intellij.openapi.actionSystem.AnActionEvent; 6 | import org.example.toolwindow.ConsoleOutputToolWindow; 7 | import org.jetbrains.annotations.NotNull; 8 | 9 | public class TestConsoleAction extends AnAction { 10 | 11 | @Override 12 | public void actionPerformed(@NotNull AnActionEvent e) { 13 | ConsoleOutputToolWindow.getConsoleView(e.getProject()).print("测试控制台输出", ConsoleViewContentType.NORMAL_OUTPUT); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /主题插件开发流程/ThemeDemo/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.7.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 19 | intellij { 20 | version = '2021.2' 21 | } 22 | patchPluginXml { 23 | changeNotes = """ 24 | Add change notes here.
25 | most HTML tags may be used""" 26 | } 27 | test { 28 | useJUnitPlatform() 29 | } -------------------------------------------------------------------------------- /丰富的消息通知方式/Notifications/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.6.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 19 | intellij { 20 | version = '2021.2' 21 | } 22 | patchPluginXml { 23 | changeNotes = """ 24 | Add change notes here.
25 | most HTML tags may be used""" 26 | } 27 | test { 28 | useJUnitPlatform() 29 | } -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/java/org/example/util/TranslatorTextProvider.java: -------------------------------------------------------------------------------- 1 | package org.example.util; 2 | 3 | import com.intellij.ui.TextFieldWithAutoCompletionListProvider; 4 | import org.jetbrains.annotations.NotNull; 5 | 6 | import java.util.HashSet; 7 | import java.util.Set; 8 | 9 | public class TranslatorTextProvider extends TextFieldWithAutoCompletionListProvider { 10 | 11 | public static Set items = new HashSet<>(); 12 | 13 | public TranslatorTextProvider() { 14 | super(items); 15 | } 16 | 17 | @Override 18 | protected @NotNull String getLookupString(@NotNull String item) { 19 | return item.substring(item.lastIndexOf(" ") + 1); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.9.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 19 | intellij { 20 | version = '2021.2' 21 | } 22 | patchPluginXml { 23 | changeNotes = """ 24 | Add change notes here.
25 | most HTML tags may be used""" 26 | } 27 | test { 28 | useJUnitPlatform() 29 | } -------------------------------------------------------------------------------- /虚拟文件与文本编辑/TextEditorDemo/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.8.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 19 | intellij { 20 | version = '2021.2' 21 | } 22 | patchPluginXml { 23 | changeNotes = """ 24 | Add change notes here.
25 | most HTML tags may be used""" 26 | } 27 | test { 28 | useJUnitPlatform() 29 | } -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/java/org/example/util/TranslatorTextProvider.java: -------------------------------------------------------------------------------- 1 | package org.example.util; 2 | 3 | import com.intellij.ui.TextFieldWithAutoCompletionListProvider; 4 | import org.jetbrains.annotations.NotNull; 5 | 6 | import java.util.HashSet; 7 | import java.util.Set; 8 | 9 | public class TranslatorTextProvider extends TextFieldWithAutoCompletionListProvider { 10 | 11 | public static Set items = new HashSet<>(); 12 | 13 | public TranslatorTextProvider() { 14 | super(items); 15 | } 16 | 17 | @Override 18 | protected @NotNull String getLookupString(@NotNull String item) { 19 | return item.substring(item.lastIndexOf(" ") + 1); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/ConsoleViewDemo/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.9.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 19 | intellij { 20 | version = '2021.2' 21 | } 22 | patchPluginXml { 23 | changeNotes = """ 24 | Add change notes here.
25 | most HTML tags may be used""" 26 | } 27 | test { 28 | useJUnitPlatform() 29 | } -------------------------------------------------------------------------------- /丰富的消息通知方式/Notifications/src/main/java/org/example/action/HintNotification.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.codeInsight.hint.HintManager; 4 | import com.intellij.openapi.actionSystem.AnAction; 5 | import com.intellij.openapi.actionSystem.AnActionEvent; 6 | import com.intellij.openapi.actionSystem.PlatformDataKeys; 7 | import com.intellij.openapi.editor.Editor; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class HintNotification extends AnAction { 11 | @Override 12 | public void actionPerformed(@NotNull AnActionEvent e) { 13 | Editor editor = e.getData(PlatformDataKeys.EDITOR); 14 | HintManager.getInstance().showInformationHint(editor, "编辑器提示"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.9.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | intellij { 19 | version = '2021.2' 20 | plugins = ['com.intellij.java'] 21 | } 22 | 23 | sourceSets.main.java.srcDirs 'src/main/java' 24 | 25 | patchPluginXml { 26 | changeNotes = """ 27 | Add change notes here.
28 | most HTML tags may be used""" 29 | } 30 | test { 31 | useJUnitPlatform() 32 | } -------------------------------------------------------------------------------- /PSI程序结构接口/PsiDemo/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.8.1' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 19 | intellij { 20 | version = '2021.2' 21 | plugins = ['com.intellij.java'] 22 | } 23 | patchPluginXml { 24 | changeNotes = """ 25 | Add change notes here.
26 | most HTML tags may be used""" 27 | } 28 | test { 29 | useJUnitPlatform() 30 | } -------------------------------------------------------------------------------- /PSI程序结构接口/demo/src/main/java/com/example/demo/dto/User.java: -------------------------------------------------------------------------------- 1 | package com.example.demo.dto; 2 | 3 | public class User { 4 | 5 | private String name; 6 | 7 | private String age; 8 | 9 | private String address; 10 | 11 | public String getName() { 12 | return name; 13 | } 14 | 15 | public void setName(String name) { 16 | this.name = name; 17 | } 18 | 19 | public String getAge() { 20 | return age; 21 | } 22 | 23 | public void setAge(String age) { 24 | this.age = age; 25 | } 26 | 27 | public String getAddress() { 28 | return address; 29 | } 30 | 31 | public void setAddress(String address) { 32 | this.address = address; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.9.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | intellij { 19 | version = '2021.2' 20 | plugins = ['com.intellij.java'] 21 | } 22 | 23 | sourceSets.main.java.srcDirs 'src/main/java' 24 | 25 | patchPluginXml { 26 | changeNotes = """ 27 | Add change notes here.
28 | most HTML tags may be used""" 29 | } 30 | test { 31 | useJUnitPlatform() 32 | } -------------------------------------------------------------------------------- /PSI程序结构接口/APIDocPlugin/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.9.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 19 | intellij { 20 | version = '2021.2' 21 | plugins = ['com.intellij.java'] 22 | } 23 | patchPluginXml { 24 | changeNotes = """ 25 | Add change notes here.
26 | most HTML tags may be used""" 27 | } 28 | test { 29 | useJUnitPlatform() 30 | } -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/feature/CURLSyntaxHighlighterFactory.java: -------------------------------------------------------------------------------- 1 | package org.example.language.feature; 2 | 3 | import com.intellij.openapi.fileTypes.SyntaxHighlighter; 4 | import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory; 5 | import com.intellij.openapi.project.Project; 6 | import com.intellij.openapi.vfs.VirtualFile; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | public class CURLSyntaxHighlighterFactory extends SyntaxHighlighterFactory { 11 | 12 | @Override 13 | public @NotNull SyntaxHighlighter getSyntaxHighlighter(@Nullable Project project, @Nullable VirtualFile virtualFile) { 14 | return new CURLSyntaxHighlighter(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/feature/CURLSyntaxHighlighterFactory.java: -------------------------------------------------------------------------------- 1 | package org.example.language.feature; 2 | 3 | import com.intellij.openapi.fileTypes.SyntaxHighlighter; 4 | import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory; 5 | import com.intellij.openapi.project.Project; 6 | import com.intellij.openapi.vfs.VirtualFile; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | public class CURLSyntaxHighlighterFactory extends SyntaxHighlighterFactory { 11 | 12 | @Override 13 | public @NotNull SyntaxHighlighter getSyntaxHighlighter(@Nullable Project project, @Nullable VirtualFile virtualFile) { 14 | return new CURLSyntaxHighlighter(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.9.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | } 17 | 18 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 19 | intellij { 20 | version = '2021.2' 21 | } 22 | 23 | sourceSets.main.java.srcDirs 'src/main/java' 24 | 25 | patchPluginXml { 26 | changeNotes = """ 27 | Add change notes here.
28 | most HTML tags may be used""" 29 | } 30 | test { 31 | useJUnitPlatform() 32 | } -------------------------------------------------------------------------------- /PSI程序结构接口/PsiDemo/src/main/java/org/example/action/RenameElementAction.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.openapi.actionSystem.AnAction; 4 | import com.intellij.openapi.actionSystem.AnActionEvent; 5 | import com.intellij.openapi.actionSystem.CommonDataKeys; 6 | import com.intellij.psi.PsiElement; 7 | import com.intellij.refactoring.RefactoringFactory; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class RenameElementAction extends AnAction { 11 | 12 | @Override 13 | public void actionPerformed(@NotNull AnActionEvent e) { 14 | PsiElement psiElement = e.getData(CommonDataKeys.PSI_ELEMENT); 15 | RefactoringFactory.getInstance(e.getProject()).createRename(psiElement, "newName", false, false).run(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /监听器/Translator/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.6.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.4' 17 | } 18 | 19 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 20 | intellij { 21 | version = '2021.2' 22 | } 23 | patchPluginXml { 24 | changeNotes = """ 25 | Add change notes here.
26 | most HTML tags may be used""" 27 | } 28 | test { 29 | useJUnitPlatform() 30 | } -------------------------------------------------------------------------------- /插件UI上篇/Translator/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.6.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.4' 17 | } 18 | 19 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 20 | intellij { 21 | version = '2021.2' 22 | } 23 | patchPluginXml { 24 | changeNotes = """ 25 | Add change notes here.
26 | most HTML tags may be used""" 27 | } 28 | test { 29 | useJUnitPlatform() 30 | } -------------------------------------------------------------------------------- /插件UI下篇/Translator/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.6.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.4' 17 | } 18 | 19 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 20 | intellij { 21 | version = '2021.2' 22 | } 23 | patchPluginXml { 24 | changeNotes = """ 25 | Add change notes here.
26 | most HTML tags may be used""" 27 | } 28 | test { 29 | useJUnitPlatform() 30 | } -------------------------------------------------------------------------------- /数据持久化/Translator/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.6.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.4' 17 | } 18 | 19 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 20 | intellij { 21 | version = '2021.2' 22 | } 23 | patchPluginXml { 24 | changeNotes = """ 25 | Add change notes here.
26 | most HTML tags may be used""" 27 | } 28 | test { 29 | useJUnitPlatform() 30 | } -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.6.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.4' 17 | } 18 | 19 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 20 | intellij { 21 | version = '2021.2' 22 | } 23 | patchPluginXml { 24 | changeNotes = """ 25 | Add change notes here.
26 | most HTML tags may be used""" 27 | } 28 | test { 29 | useJUnitPlatform() 30 | } -------------------------------------------------------------------------------- /主题插件开发流程/ThemeDemo/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.ThemeDemo 3 | Plugin display name here 4 | YourCompany 5 | 6 | 8 | most HTML tags may be used 9 | ]]> 10 | 11 | com.intellij.modules.platform 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /PSI程序结构接口/demo/src/main/java/com/example/demo/dto/Order.java: -------------------------------------------------------------------------------- 1 | package com.example.demo.dto; 2 | 3 | import java.util.Date; 4 | 5 | import com.example.demo.dto.User; 6 | 7 | public class Order { 8 | 9 | private String orderID; 10 | 11 | private Date orderTime; 12 | 13 | private User user; 14 | 15 | public String getOrderID() { 16 | return orderID; 17 | } 18 | 19 | public void setOrderID(String orderID) { 20 | this.orderID = orderID; 21 | } 22 | 23 | public Date getOrderTime() { 24 | return orderTime; 25 | } 26 | 27 | public void setOrderTime(Date orderTime) { 28 | this.orderTime = orderTime; 29 | } 30 | 31 | public User getUser() { 32 | return user; 33 | } 34 | 35 | public void setUser(User user) { 36 | this.user = user; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/src/main/java/org/example/listener/TranslatorActionListenerA.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.project.Project; 7 | 8 | public class TranslatorActionListenerA implements TranslateListener { 9 | 10 | @Override 11 | public void beforeTranslated(Project project) { 12 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第一个监听器:beforeTranslated", NotificationType.INFORMATION), project); 13 | } 14 | 15 | @Override 16 | public void afterTranslated(Project project) { 17 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第一个监听器:afterTranslated", NotificationType.INFORMATION), project); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/src/main/java/org/example/listener/TranslatorActionListenerB.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.project.Project; 7 | 8 | public class TranslatorActionListenerB implements TranslateListener { 9 | 10 | @Override 11 | public void beforeTranslated(Project project) { 12 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第二个监听器:beforeTranslated", NotificationType.INFORMATION), project); 13 | } 14 | 15 | @Override 16 | public void afterTranslated(Project project) { 17 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第二个监听器:afterTranslated", NotificationType.INFORMATION), project); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/java/org/example/listener/TranslatorActionListenerA.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.project.Project; 7 | 8 | public class TranslatorActionListenerA implements TranslateListener { 9 | 10 | @Override 11 | public void beforeTranslated(Project project) { 12 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第一个监听器:beforeTranslated", NotificationType.INFORMATION), project); 13 | } 14 | 15 | @Override 16 | public void afterTranslated(Project project) { 17 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第一个监听器:afterTranslated", NotificationType.INFORMATION), project); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/java/org/example/listener/TranslatorActionListenerB.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.project.Project; 7 | 8 | public class TranslatorActionListenerB implements TranslateListener { 9 | 10 | @Override 11 | public void beforeTranslated(Project project) { 12 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第二个监听器:beforeTranslated", NotificationType.INFORMATION), project); 13 | } 14 | 15 | @Override 16 | public void afterTranslated(Project project) { 17 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第二个监听器:afterTranslated", NotificationType.INFORMATION), project); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /监听器/Translator/src/main/java/org/example/listener/TranslatorActionListenerA.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.project.Project; 7 | 8 | public class TranslatorActionListenerA implements TranslateListener { 9 | 10 | @Override 11 | public void beforeTranslated(Project project) { 12 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第一个监听器:beforeTranslated", NotificationType.INFORMATION), project); 13 | } 14 | 15 | @Override 16 | public void afterTranslated(Project project) { 17 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第一个监听器:afterTranslated", NotificationType.INFORMATION), project); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /监听器/Translator/src/main/java/org/example/listener/TranslatorActionListenerB.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.project.Project; 7 | 8 | public class TranslatorActionListenerB implements TranslateListener { 9 | 10 | @Override 11 | public void beforeTranslated(Project project) { 12 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第二个监听器:beforeTranslated", NotificationType.INFORMATION), project); 13 | } 14 | 15 | @Override 16 | public void afterTranslated(Project project) { 17 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第二个监听器:afterTranslated", NotificationType.INFORMATION), project); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/CURLOptions.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOptions extends PsiElement { 9 | 10 | @Nullable 11 | CURLOption1Statement getOption1Statement(); 12 | 13 | @Nullable 14 | CURLOption2Statement getOption2Statement(); 15 | 16 | @Nullable 17 | CURLOption3Statement getOption3Statement(); 18 | 19 | @Nullable 20 | CURLOption4Statement getOption4Statement(); 21 | 22 | @Nullable 23 | CURLOption5Statement getOption5Statement(); 24 | 25 | @Nullable 26 | CURLOption6Statement getOption6Statement(); 27 | 28 | @Nullable 29 | CURLOption7Statement getOption7Statement(); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/CURLOptions.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOptions extends PsiElement { 9 | 10 | @Nullable 11 | CURLOption1Statement getOption1Statement(); 12 | 13 | @Nullable 14 | CURLOption2Statement getOption2Statement(); 15 | 16 | @Nullable 17 | CURLOption3Statement getOption3Statement(); 18 | 19 | @Nullable 20 | CURLOption4Statement getOption4Statement(); 21 | 22 | @Nullable 23 | CURLOption5Statement getOption5Statement(); 24 | 25 | @Nullable 26 | CURLOption6Statement getOption6Statement(); 27 | 28 | @Nullable 29 | CURLOption7Statement getOption7Statement(); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/CURLOptions.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOptions extends PsiElement { 9 | 10 | @Nullable 11 | CURLOption1Statement getOption1Statement(); 12 | 13 | @Nullable 14 | CURLOption2Statement getOption2Statement(); 15 | 16 | @Nullable 17 | CURLOption3Statement getOption3Statement(); 18 | 19 | @Nullable 20 | CURLOption4Statement getOption4Statement(); 21 | 22 | @Nullable 23 | CURLOption5Statement getOption5Statement(); 24 | 25 | @Nullable 26 | CURLOption6Statement getOption6Statement(); 27 | 28 | @Nullable 29 | CURLOption7Statement getOption7Statement(); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/CURLOptions.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface CURLOptions extends PsiElement { 9 | 10 | @Nullable 11 | CURLOption1Statement getOption1Statement(); 12 | 13 | @Nullable 14 | CURLOption2Statement getOption2Statement(); 15 | 16 | @Nullable 17 | CURLOption3Statement getOption3Statement(); 18 | 19 | @Nullable 20 | CURLOption4Statement getOption4Statement(); 21 | 22 | @Nullable 23 | CURLOption5Statement getOption5Statement(); 24 | 25 | @Nullable 26 | CURLOption6Statement getOption6Statement(); 27 | 28 | @Nullable 29 | CURLOption7Statement getOption7Statement(); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/java/org/example/listener/TranslatorActionListenerA.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.project.Project; 7 | 8 | public class TranslatorActionListenerA implements TranslateListener { 9 | 10 | @Override 11 | public void beforeTranslated(Project project) { 12 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第一个监听器:beforeTranslated", NotificationType.INFORMATION), project); 13 | } 14 | 15 | @Override 16 | public void afterTranslated(Project project) { 17 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第一个监听器:afterTranslated", NotificationType.INFORMATION), project); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/java/org/example/listener/TranslatorActionListenerB.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.project.Project; 7 | 8 | public class TranslatorActionListenerB implements TranslateListener { 9 | 10 | @Override 11 | public void beforeTranslated(Project project) { 12 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第二个监听器:beforeTranslated", NotificationType.INFORMATION), project); 13 | } 14 | 15 | @Override 16 | public void afterTranslated(Project project) { 17 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "第二个监听器:afterTranslated", NotificationType.INFORMATION), project); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /虚拟文件与文本编辑/JsonToJava/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.JsonToJava 3 | JsonToJava 4 | YourCompany 5 | 6 | 8 | most HTML tags may be used 9 | ]]> 10 | 11 | com.intellij.modules.platform 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/feature/CURLCommenter.java: -------------------------------------------------------------------------------- 1 | package org.example.language.feature; 2 | 3 | import com.intellij.lang.Commenter; 4 | import org.jetbrains.annotations.Nullable; 5 | 6 | public class CURLCommenter implements Commenter { 7 | @Override 8 | public @Nullable String getLineCommentPrefix() { 9 | return "//"; 10 | } 11 | 12 | @Override 13 | public @Nullable String getBlockCommentPrefix() { 14 | return null; 15 | } 16 | 17 | @Override 18 | public @Nullable String getBlockCommentSuffix() { 19 | return null; 20 | } 21 | 22 | @Override 23 | public @Nullable String getCommentedBlockCommentPrefix() { 24 | return null; 25 | } 26 | 27 | @Override 28 | public @Nullable String getCommentedBlockCommentSuffix() { 29 | return null; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /虚拟文件与文本编辑/JsonToJava/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'org.jetbrains.intellij' version '1.8.0' 3 | id 'java' 4 | } 5 | 6 | group 'org.example' 7 | version '1.0-SNAPSHOT' 8 | 9 | repositories { 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' 15 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' 16 | implementation group: 'io.github.sharelison', name: 'jsontojava', version: '1.0.1' 17 | implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.83' 18 | 19 | } 20 | 21 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 22 | intellij { 23 | version = '2021.2' 24 | } 25 | patchPluginXml { 26 | changeNotes = """ 27 | Add change notes here.
28 | most HTML tags may be used""" 29 | } 30 | test { 31 | useJUnitPlatform() 32 | } -------------------------------------------------------------------------------- /PSI程序结构接口/APIDocPlugin/src/main/java/org/example/dto/ApiRequestParamDTO.java: -------------------------------------------------------------------------------- 1 | package org.example.dto; 2 | 3 | public class ApiRequestParamDTO { 4 | 5 | /** 6 | * 参数名字 7 | */ 8 | private String name = ""; 9 | 10 | /** 11 | * 参数类型 12 | */ 13 | private String type = ""; 14 | 15 | /** 16 | * 参数注释 17 | */ 18 | private String desc = ""; 19 | 20 | 21 | public String getName() { 22 | return name; 23 | } 24 | 25 | public void setName(String name) { 26 | this.name = name; 27 | } 28 | 29 | public String getType() { 30 | return type; 31 | } 32 | 33 | public void setType(String type) { 34 | this.type = type; 35 | } 36 | 37 | public String getDesc() { 38 | return desc; 39 | } 40 | 41 | public void setDesc(String desc) { 42 | this.desc = desc; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/src/main/java/org/example/listener/InitTranslatorWindowListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.openapi.project.Project; 4 | import com.intellij.openapi.wm.ex.ToolWindowManagerListener; 5 | import org.example.extension.TranslatorCache; 6 | import org.example.extension.TranslatorToolsWindow; 7 | import org.jetbrains.annotations.NotNull; 8 | 9 | public class InitTranslatorWindowListener implements ToolWindowManagerListener { 10 | 11 | private final Project project; 12 | 13 | public InitTranslatorWindowListener(Project project) { 14 | this.project = project; 15 | } 16 | 17 | @Override 18 | public void toolWindowRegistered(@NotNull String id) { 19 | if (!id.equals("Translator")) { 20 | return; 21 | } 22 | TranslatorCache.getInstance(project).transCache.forEach(TranslatorToolsWindow::addNote); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/java/org/example/listener/InitTranslatorWindowListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.openapi.project.Project; 4 | import com.intellij.openapi.wm.ex.ToolWindowManagerListener; 5 | import org.example.extension.TranslatorCache; 6 | import org.example.extension.TranslatorToolsWindow; 7 | import org.jetbrains.annotations.NotNull; 8 | 9 | public class InitTranslatorWindowListener implements ToolWindowManagerListener { 10 | 11 | private final Project project; 12 | 13 | public InitTranslatorWindowListener(Project project) { 14 | this.project = project; 15 | } 16 | 17 | @Override 18 | public void toolWindowRegistered(@NotNull String id) { 19 | if (!id.equals("Translator")) { 20 | return; 21 | } 22 | TranslatorCache.getInstance(project).transCache.forEach(TranslatorToolsWindow::addNote); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /虚拟文件与文本编辑/TextEditorDemo/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.TextEditorDemo 3 | Plugin display name here 4 | YourCompany 5 | 6 | 8 | most HTML tags may be used 9 | ]]> 10 | 11 | com.intellij.modules.platform 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/java/org/example/listener/InitTranslatorWindowListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.openapi.project.Project; 4 | import com.intellij.openapi.wm.ex.ToolWindowManagerListener; 5 | import org.example.extension.TranslatorCache; 6 | import org.example.extension.TranslatorToolsWindow; 7 | import org.jetbrains.annotations.NotNull; 8 | 9 | 10 | public class InitTranslatorWindowListener implements ToolWindowManagerListener { 11 | 12 | private final Project project; 13 | 14 | public InitTranslatorWindowListener(Project project) { 15 | this.project = project; 16 | } 17 | 18 | @Override 19 | public void toolWindowRegistered(@NotNull String id) { 20 | if (!id.equals("Translator")) { 21 | return; 22 | } 23 | TranslatorCache.getInstance(project).transCache.forEach(TranslatorToolsWindow::addNote); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /PSI程序结构接口/demo/src/main/java/com/example/demo/cotroller/HelloWorldController.java: -------------------------------------------------------------------------------- 1 | package com.example.demo.cotroller; 2 | 3 | import com.example.demo.dto.User; 4 | import com.example.demo.dto.Order; 5 | import org.springframework.web.bind.annotation.*; 6 | 7 | @RequestMapping(value = "/demo/test/gen_doc") 8 | public class HelloWorldController { 9 | 10 | /** 11 | * hello 接口 12 | * 13 | * @param user 14 | * @return 15 | */ 16 | @GetMapping(value = "/test_get") 17 | public String helloWorld(@RequestParam User user) { 18 | return getHelloWorld(); 19 | } 20 | 21 | /** 22 | * hello 接口 23 | * 24 | * @param user 25 | * @return 26 | */ 27 | @PostMapping(value = "/test_post") 28 | public Order testPost(@RequestBody User user) { 29 | return new Order(); 30 | } 31 | 32 | private String getHelloWorld() { 33 | return "Hello World"; 34 | } 35 | } -------------------------------------------------------------------------------- /虚拟文件与文本编辑/JsonToJava/src/main/java/org/example/listener/ProjectInitListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.openapi.actionSystem.IdeActions; 4 | import com.intellij.openapi.editor.actionSystem.EditorActionManager; 5 | import com.intellij.openapi.project.Project; 6 | import com.intellij.openapi.project.ProjectManagerListener; 7 | import com.intellij.openapi.vfs.LocalFileSystem; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class ProjectInitListener implements ProjectManagerListener { 11 | @Override 12 | public void projectOpened(@NotNull Project project) { 13 | // 虚拟文件监听器临时注释,防止于编辑器监听器冲突 14 | //LocalFileSystem.getInstance().addVirtualFileListener(new VirtualFileListenerImpl()); 15 | EditorActionManager actionManager = EditorActionManager.getInstance(); 16 | actionManager.setActionHandler(IdeActions.ACTION_EDITOR_PASTE, new EditorPasteListener()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /PSI程序结构接口/APIDocPlugin/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.APIDocPlugin 3 | Plugin display name here 4 | YourCompany 5 | 6 | 8 | most HTML tags may be used 9 | ]]> 10 | 11 | 12 | com.intellij.modules.platform 13 | com.intellij.modules.java 14 | 15 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/feature/CURLCommandInsertHandler.java: -------------------------------------------------------------------------------- 1 | package org.example.language.feature; 2 | 3 | import com.intellij.codeInsight.completion.InsertHandler; 4 | import com.intellij.codeInsight.completion.InsertionContext; 5 | import com.intellij.codeInsight.lookup.LookupElement; 6 | import com.intellij.psi.PsiElement; 7 | import org.jetbrains.annotations.NotNull; 8 | 9 | public class CURLCommandInsertHandler implements InsertHandler { 10 | 11 | @Override 12 | public void handleInsert(@NotNull InsertionContext context, @NotNull LookupElement item) { 13 | PsiElement element = context.getFile().findElementAt(context.getStartOffset()); 14 | context.getDocument().replaceString(element.getTextOffset(), context.getTailOffset(), item.getLookupString()); 15 | context.getEditor().getCaretModel().moveToOffset(context.getStartOffset() + context.getTailOffset() + 1); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/HTTPFileType.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.openapi.fileTypes.LanguageFileType; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.jetbrains.annotations.Nullable; 6 | 7 | import javax.swing.*; 8 | 9 | public class HTTPFileType extends LanguageFileType { 10 | 11 | public static final HTTPFileType INSTANCE = new HTTPFileType(); 12 | 13 | public HTTPFileType() { 14 | super(HTTPLanguage.INSTANCE); 15 | } 16 | 17 | @Override 18 | public @NotNull String getName() { 19 | return "HTTP"; 20 | } 21 | 22 | @Override 23 | public @NotNull String getDescription() { 24 | return "HTTP language file"; 25 | } 26 | 27 | @Override 28 | public @NotNull String getDefaultExtension() { 29 | return "http"; 30 | } 31 | 32 | @Override 33 | public @Nullable Icon getIcon() { 34 | return HTTPIcons.FILE; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/HTTPFileType.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.openapi.fileTypes.LanguageFileType; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.jetbrains.annotations.Nullable; 6 | 7 | import javax.swing.*; 8 | 9 | public class HTTPFileType extends LanguageFileType { 10 | 11 | public static final HTTPFileType INSTANCE = new HTTPFileType(); 12 | 13 | public HTTPFileType() { 14 | super(HTTPLanguage.INSTANCE); 15 | } 16 | 17 | @Override 18 | public @NotNull String getName() { 19 | return "HTTP"; 20 | } 21 | 22 | @Override 23 | public @NotNull String getDescription() { 24 | return "HTTP language file"; 25 | } 26 | 27 | @Override 28 | public @NotNull String getDefaultExtension() { 29 | return "http"; 30 | } 31 | 32 | @Override 33 | public @Nullable Icon getIcon() { 34 | return HTTPIcons.FILE; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/HTTPFileType.java: -------------------------------------------------------------------------------- 1 | package org.example.language; 2 | 3 | import com.intellij.openapi.fileTypes.LanguageFileType; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.jetbrains.annotations.Nullable; 6 | 7 | import javax.swing.*; 8 | 9 | public class HTTPFileType extends LanguageFileType { 10 | 11 | public static final HTTPFileType INSTANCE = new HTTPFileType(); 12 | 13 | public HTTPFileType() { 14 | super(HTTPLanguage.INSTANCE); 15 | } 16 | 17 | @Override 18 | public @NotNull String getName() { 19 | return "HTTP"; 20 | } 21 | 22 | @Override 23 | public @NotNull String getDescription() { 24 | return "HTTP language file"; 25 | } 26 | 27 | @Override 28 | public @NotNull String getDefaultExtension() { 29 | return "http"; 30 | } 31 | 32 | @Override 33 | public @Nullable Icon getIcon() { 34 | return HTTPIcons.FILE; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /主题插件开发流程/ThemeDemo/src/main/resources/icons/build.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.PluginI18N 3 | Plugin display name here 4 | YourCompany 5 | 6 | 8 | most HTML tags may be used 9 | ]]> 10 | 11 | 13 | com.intellij.modules.platform 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /监听器/Translator/src/main/java/org/example/listener/InitTranslatorWindowListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.openapi.project.Project; 4 | import com.intellij.openapi.wm.ex.ToolWindowManagerListener; 5 | import org.example.extension.TranslatorCache; 6 | import org.example.extension.TranslatorToolsWindow; 7 | import org.jetbrains.annotations.NotNull; 8 | 9 | public class InitTranslatorWindowListener implements ToolWindowManagerListener { 10 | 11 | private final Project project; 12 | 13 | public InitTranslatorWindowListener(Project project) { 14 | this.project = project; 15 | } 16 | 17 | // 打开插件的窗口时,加载缓存的翻译结果到表格中,这里每次打开一次翻译窗口就会加载一次,大家可以思考一下,如何解决(例如内存中维护一个静态变量记录一下)。 18 | @Override 19 | public void toolWindowShown(@NotNull ToolWindow toolWindow) { 20 | if (!toolWindow.getId().equals("Translator")) { 21 | return; 22 | } 23 | TranslatorCache.getInstance(project).transCache.forEach(TranslatorToolsWindow::addNote); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Notifications/src/main/java/org/example/action/DialogNotification.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.openapi.actionSystem.AnAction; 4 | import com.intellij.openapi.actionSystem.AnActionEvent; 5 | import com.intellij.openapi.project.Project; 6 | import com.intellij.openapi.ui.DialogWrapper; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | import javax.swing.*; 11 | 12 | public class DialogNotification extends AnAction { 13 | 14 | @Override 15 | public void actionPerformed(@NotNull AnActionEvent e) { 16 | new MyDialog(e.getProject()).show(); 17 | } 18 | 19 | static class MyDialog extends DialogWrapper { 20 | 21 | protected MyDialog(@Nullable Project project) { 22 | super(project); 23 | init(); 24 | } 25 | 26 | @Override 27 | protected @Nullable JComponent createCenterPanel() { 28 | return new JLabel("对话框提示"); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /监听器/Translator/src/main/java/org/example/extension/TranslatorSetting.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.application.ApplicationManager; 4 | import com.intellij.openapi.components.*; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | @State(name = "translator", storages = {@Storage(value = "translator.xml")}) 9 | public class TranslatorSetting implements PersistentStateComponent { 10 | 11 | public String appID; 12 | 13 | public String securityKey; 14 | 15 | public static TranslatorSetting getInstance() { 16 | return ApplicationManager.getApplication().getService(TranslatorSetting.class); 17 | } 18 | 19 | @Override 20 | public @Nullable TranslatorSetting getState() { 21 | return this; 22 | } 23 | 24 | @Override 25 | public void loadState(@NotNull TranslatorSetting state) { 26 | this.appID = state.appID; 27 | this.securityKey = state.securityKey; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/src/main/java/org/example/extension/TranslatorSetting.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.application.ApplicationManager; 4 | import com.intellij.openapi.components.*; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | @State(name = "translator", storages = {@Storage(value = "translator.xml")}) 9 | public class TranslatorSetting implements PersistentStateComponent { 10 | 11 | public String appID; 12 | 13 | public String securityKey; 14 | 15 | public static TranslatorSetting getInstance() { 16 | return ApplicationManager.getApplication().getService(TranslatorSetting.class); 17 | } 18 | 19 | @Override 20 | public @Nullable TranslatorSetting getState() { 21 | return this; 22 | } 23 | 24 | @Override 25 | public void loadState(@NotNull TranslatorSetting state) { 26 | this.appID = state.appID; 27 | this.securityKey = state.securityKey; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/java/org/example/extension/TranslatorSetting.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.application.ApplicationManager; 4 | import com.intellij.openapi.components.*; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | @State(name = "translator", storages = {@Storage(value = "translator.xml")}) 9 | public class TranslatorSetting implements PersistentStateComponent { 10 | 11 | public String appID; 12 | 13 | public String securityKey; 14 | 15 | public static TranslatorSetting getInstance() { 16 | return ApplicationManager.getApplication().getService(TranslatorSetting.class); 17 | } 18 | 19 | @Override 20 | public @Nullable TranslatorSetting getState() { 21 | return this; 22 | } 23 | 24 | @Override 25 | public void loadState(@NotNull TranslatorSetting state) { 26 | this.appID = state.appID; 27 | this.securityKey = state.securityKey; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/PluginI18N/src/main/java/org/example/action/NotifyAction.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.actionSystem.AnAction; 7 | import com.intellij.openapi.actionSystem.AnActionEvent; 8 | import org.example.config.PluginConfig; 9 | import org.jetbrains.annotations.NotNull; 10 | 11 | import java.util.Locale; 12 | import java.util.ResourceBundle; 13 | 14 | public class NotifyAction extends AnAction { 15 | 16 | @Override 17 | public void actionPerformed(@NotNull AnActionEvent e) { 18 | Notifications.Bus.notify(new Notification("Print", getLocalMessage(PluginConfig.langConfig, "translate"), NotificationType.INFORMATION)); 19 | } 20 | 21 | public static String getLocalMessage(String langCode, String key) { 22 | return ResourceBundle.getBundle("i18n.plugin", Locale.forLanguageTag("zh")).getString(key); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /数据持久化/Translator/src/main/java/org/example/extension/TranslatorSetting.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.application.ApplicationManager; 4 | import com.intellij.openapi.components.*; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | @State(name = "translator", storages = {@Storage(value = "translator.xml")}) 9 | public class TranslatorSetting implements PersistentStateComponent { 10 | 11 | public String appID; 12 | 13 | public String securityKey; 14 | 15 | public static TranslatorSetting getInstance() { 16 | return ApplicationManager.getApplication().getService(TranslatorSetting.class); 17 | } 18 | 19 | @Override 20 | public @Nullable TranslatorSetting getState() { 21 | return this; 22 | } 23 | 24 | @Override 25 | public void loadState(@NotNull TranslatorSetting state) { 26 | this.appID = state.appID; 27 | this.securityKey = state.securityKey; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/java/org/example/extension/TranslatorSetting.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.application.ApplicationManager; 4 | import com.intellij.openapi.components.*; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | @State(name = "translator", storages = {@Storage(value = "translator.xml")}) 9 | public class TranslatorSetting implements PersistentStateComponent { 10 | 11 | public String appID; 12 | 13 | public String securityKey; 14 | 15 | public static TranslatorSetting getInstance() { 16 | return ApplicationManager.getApplication().getService(TranslatorSetting.class); 17 | } 18 | 19 | @Override 20 | public @Nullable TranslatorSetting getState() { 21 | return this; 22 | } 23 | 24 | @Override 25 | public void loadState(@NotNull TranslatorSetting state) { 26 | this.appID = state.appID; 27 | this.securityKey = state.securityKey; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLKvImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLKvImpl extends ASTWrapperPsiElement implements CURLKv { 15 | 16 | public CURLKvImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitKv(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLKvImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLKvImpl extends ASTWrapperPsiElement implements CURLKv { 15 | 16 | public CURLKvImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitKv(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLKvImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLKvImpl extends ASTWrapperPsiElement implements CURLKv { 15 | 16 | public CURLKvImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitKv(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLKvImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLKvImpl extends ASTWrapperPsiElement implements CURLKv { 15 | 16 | public CURLKvImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitKv(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.HTTPRequester 3 | HTTP Requester 4 | 5 | 6 | com.intellij.modules.platform 7 | 8 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption1Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption1Impl extends ASTWrapperPsiElement implements CURLOption1 { 15 | 16 | public CURLOption1Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption1(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption2Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption2Impl extends ASTWrapperPsiElement implements CURLOption2 { 15 | 16 | public CURLOption2Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption2(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption3Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption3Impl extends ASTWrapperPsiElement implements CURLOption3 { 15 | 16 | public CURLOption3Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption3(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption4Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption4Impl extends ASTWrapperPsiElement implements CURLOption4 { 15 | 16 | public CURLOption4Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption4(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption5Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption5Impl extends ASTWrapperPsiElement implements CURLOption5 { 15 | 16 | public CURLOption5Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption5(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption6Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption6Impl extends ASTWrapperPsiElement implements CURLOption6 { 15 | 16 | public CURLOption6Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption6(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption7Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption7Impl extends ASTWrapperPsiElement implements CURLOption7 { 15 | 16 | public CURLOption7Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption7(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption1Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption1Impl extends ASTWrapperPsiElement implements CURLOption1 { 15 | 16 | public CURLOption1Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption1(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption2Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption2Impl extends ASTWrapperPsiElement implements CURLOption2 { 15 | 16 | public CURLOption2Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption2(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption3Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption3Impl extends ASTWrapperPsiElement implements CURLOption3 { 15 | 16 | public CURLOption3Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption3(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption4Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption4Impl extends ASTWrapperPsiElement implements CURLOption4 { 15 | 16 | public CURLOption4Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption4(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption5Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption5Impl extends ASTWrapperPsiElement implements CURLOption5 { 15 | 16 | public CURLOption5Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption5(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption6Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption6Impl extends ASTWrapperPsiElement implements CURLOption6 { 15 | 16 | public CURLOption6Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption6(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption7Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption7Impl extends ASTWrapperPsiElement implements CURLOption7 { 15 | 16 | public CURLOption7Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption7(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption1Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption1Impl extends ASTWrapperPsiElement implements CURLOption1 { 15 | 16 | public CURLOption1Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption1(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption2Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption2Impl extends ASTWrapperPsiElement implements CURLOption2 { 15 | 16 | public CURLOption2Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption2(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption3Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption3Impl extends ASTWrapperPsiElement implements CURLOption3 { 15 | 16 | public CURLOption3Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption3(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption4Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption4Impl extends ASTWrapperPsiElement implements CURLOption4 { 15 | 16 | public CURLOption4Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption4(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption5Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption5Impl extends ASTWrapperPsiElement implements CURLOption5 { 15 | 16 | public CURLOption5Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption5(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption6Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption6Impl extends ASTWrapperPsiElement implements CURLOption6 { 15 | 16 | public CURLOption6Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption6(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption7Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption7Impl extends ASTWrapperPsiElement implements CURLOption7 { 15 | 16 | public CURLOption7Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption7(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption1Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption1Impl extends ASTWrapperPsiElement implements CURLOption1 { 15 | 16 | public CURLOption1Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption1(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption2Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption2Impl extends ASTWrapperPsiElement implements CURLOption2 { 15 | 16 | public CURLOption2Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption2(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption3Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption3Impl extends ASTWrapperPsiElement implements CURLOption3 { 15 | 16 | public CURLOption3Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption3(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption4Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption4Impl extends ASTWrapperPsiElement implements CURLOption4 { 15 | 16 | public CURLOption4Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption4(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption5Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption5Impl extends ASTWrapperPsiElement implements CURLOption5 { 15 | 16 | public CURLOption5Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption5(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption6Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption6Impl extends ASTWrapperPsiElement implements CURLOption6 { 15 | 16 | public CURLOption6Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption6(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption7Impl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption7Impl extends ASTWrapperPsiElement implements CURLOption7 { 15 | 16 | public CURLOption7Impl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption7(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /插件国际化与其他小技巧介绍/ConsoleViewDemo/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.ConsoleViewDemo 3 | Plugin display name here 4 | YourCompany 5 | 6 | 8 | most HTML tags may be used 9 | ]]> 10 | 11 | 13 | com.intellij.modules.platform 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /丰富的拓展点/Translator/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.Translator 3 | Translator 4 | 5 | 6 | Translator


8 |

这是一个翻译插件,翻译插件基于百度翻译API,提供了在IDE中翻译的能力


9 | ]]> 10 | 11 | com.intellij.modules.platform 12 | 13 | 14 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /PSI程序结构接口/PsiDemo/src/main/java/org/example/action/GetLocalVariableMethod.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.actionSystem.AnAction; 7 | import com.intellij.openapi.actionSystem.AnActionEvent; 8 | import com.intellij.openapi.actionSystem.CommonDataKeys; 9 | import com.intellij.psi.PsiElement; 10 | import com.intellij.psi.PsiMethod; 11 | import com.intellij.psi.util.PsiTreeUtil; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | public class GetLocalVariableMethod extends AnAction { 15 | 16 | @Override 17 | public void actionPerformed(@NotNull AnActionEvent e) { 18 | PsiElement psiElement = e.getData(CommonDataKeys.PSI_ELEMENT); 19 | PsiElement parent = PsiTreeUtil.getParentOfType(psiElement, PsiMethod.class);; 20 | if (parent != null) { 21 | Notifications.Bus.notify(new Notification("Print", "PSIDemo", ((PsiMethod) parent).getName(), NotificationType.INFORMATION), e.getProject()); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /PSI程序结构接口/APIDocPlugin/src/main/java/org/example/dto/ApiBodyDTO.java: -------------------------------------------------------------------------------- 1 | package org.example.dto; 2 | 3 | import java.util.List; 4 | 5 | public class ApiBodyDTO { 6 | 7 | private List bodyDto; 8 | 9 | /** 10 | * 参数名字 11 | */ 12 | private String name = ""; 13 | 14 | /** 15 | * 参数类型 16 | */ 17 | private String type = ""; 18 | 19 | /** 20 | * 参数注释 21 | */ 22 | private String desc = ""; 23 | 24 | public List getBodyDto() { 25 | return bodyDto; 26 | } 27 | 28 | public void setBodyDto(List bodyDto) { 29 | this.bodyDto = bodyDto; 30 | } 31 | 32 | public String getName() { 33 | return name; 34 | } 35 | 36 | public void setName(String name) { 37 | this.name = name; 38 | } 39 | 40 | public String getType() { 41 | return type; 42 | } 43 | 44 | public void setType(String type) { 45 | this.type = type; 46 | } 47 | 48 | public String getDesc() { 49 | return desc; 50 | } 51 | 52 | public void setDesc(String desc) { 53 | this.desc = desc; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /搭建插件项目/HelloWorldPlugin2/src/main/org/example/action/HelloWorldAction.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.actionSystem.AnAction; 7 | import com.intellij.openapi.actionSystem.AnActionEvent; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class HelloWorldAction extends AnAction { 11 | 12 | @Override 13 | public void actionPerformed(@NotNull AnActionEvent e) { 14 | /** 15 | * Notifications.Bus.notify 是IDE中发送通知提醒的一个API,我们熟悉它即可。 16 | * Notification中有几个核心字段,该构造方法中: 17 | * 第一个参数是通知消息的分组 18 | * 第二个参数是通知框的标题,第三个参数是通知框的内容。 19 | * 第四个参数是通知信息级别,主要的有Info,Waring,Error 3个级别。 20 | * 21 | * e.getProject() 是一个获取到当前IDE所打开项目在代码中的对象抽象表示的API。 22 | * 本处表示在我们当前IDE中所打开的项目进行提示,若我们同时打开多个IDE,其他IDE项目中不会收到改消息。 23 | */ 24 | Notifications.Bus.notify(new Notification("Print", "我的第一个插件", "Hello, World, " + System.currentTimeMillis(), NotificationType.INFORMATION), e.getProject()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /搭建插件项目/HelloWorldPlugin/src/main/java/org/example/action/HelloWorldAction.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.actionSystem.AnAction; 7 | import com.intellij.openapi.actionSystem.AnActionEvent; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class HelloWorldAction extends AnAction { 11 | 12 | @Override 13 | public void actionPerformed(@NotNull AnActionEvent e) { 14 | /** 15 | * Notifications.Bus.notify 是IDE中发送通知提醒的一个API,我们熟悉它即可。 16 | * Notification中有几个核心字段,该构造方法中: 17 | * 第一个参数是通知消息的分组 18 | * 第二个参数是通知框的标题,第三个参数是通知框的内容。 19 | * 第四个参数是通知信息级别,主要的有Info,Waring,Error 3个级别。 20 | * 21 | * e.getProject() 是一个获取到当前IDE所打开项目在代码中的对象抽象表示的API。 22 | * 本处表示在我们当前IDE中所打开的项目进行提示,若我们同时打开多个IDE,其他IDE项目中不会收到改消息。 23 | */ 24 | Notifications.Bus.notify(new Notification("Print", "我的第一个插件", "Hello, World, " + System.currentTimeMillis(), NotificationType.INFORMATION), e.getProject()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /PSI程序结构接口/PsiDemo/src/main/java/org/example/action/PsiFileDemoAction.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.openapi.actionSystem.AnAction; 4 | import com.intellij.openapi.actionSystem.AnActionEvent; 5 | import com.intellij.openapi.actionSystem.CommonDataKeys; 6 | import com.intellij.psi.PsiElement; 7 | import com.intellij.psi.PsiFile; 8 | import com.intellij.psi.PsiJavaFile; 9 | import com.intellij.psi.PsiRecursiveElementWalkingVisitor; 10 | import org.jetbrains.annotations.NotNull; 11 | 12 | public class PsiFileDemoAction extends AnAction { 13 | 14 | @Override 15 | public void actionPerformed(@NotNull AnActionEvent e) { 16 | PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE); 17 | // 获取当前的文件类型 18 | String fileType = psiFile.getFileType().getName(); 19 | System.out.println(fileType); 20 | PsiJavaFile javaFile = (PsiJavaFile) psiFile; 21 | javaFile.accept(new PsiRecursiveElementWalkingVisitor() { 22 | @Override 23 | public void visitElement(@NotNull PsiElement element) { 24 | System.out.println(element.getText()); 25 | } 26 | }); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Notifications/src/main/java/org/example/action/TopLevelNotification.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationAction; 5 | import com.intellij.notification.NotificationType; 6 | import com.intellij.notification.Notifications; 7 | import com.intellij.openapi.actionSystem.AnAction; 8 | import com.intellij.openapi.actionSystem.AnActionEvent; 9 | import org.jetbrains.annotations.NotNull; 10 | 11 | public class TopLevelNotification extends AnAction { 12 | 13 | @Override 14 | public void actionPerformed(@NotNull AnActionEvent e) { 15 | Notification notification = new Notification("Print", "顶层通知标题", "顶层通知内容", NotificationType.INFORMATION); 16 | notification.addAction(new NotificationAction("点我") { 17 | @Override 18 | public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) { 19 | Notifications.Bus.notify(new Notification("Print", "顶层通知标题", "套娃通知事件", NotificationType.INFORMATION), e.getProject()); 20 | } 21 | }); 22 | Notifications.Bus.notify(notification, e.getProject()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/src/main/java/org/example/extension/TranslatorCache.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.components.PersistentStateComponent; 4 | import com.intellij.openapi.components.State; 5 | import com.intellij.openapi.components.Storage; 6 | import com.intellij.openapi.project.Project; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | import java.util.LinkedHashMap; 11 | import java.util.Map; 12 | 13 | @State(name = "translator.cache", storages = {@Storage(value = "translator-cache.xml")}) 14 | public class TranslatorCache implements PersistentStateComponent { 15 | 16 | public Map transCache = new LinkedHashMap<>(); 17 | 18 | public static TranslatorCache getInstance(Project project) { 19 | return project.getService(TranslatorCache.class); 20 | } 21 | 22 | @Override 23 | public @Nullable TranslatorCache getState() { 24 | return this; 25 | } 26 | 27 | @Override 28 | public void loadState(@NotNull TranslatorCache state) { 29 | if (state.transCache == null) { 30 | return; 31 | } 32 | this.transCache = state.transCache; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/java/org/example/extension/TranslatorCache.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.components.PersistentStateComponent; 4 | import com.intellij.openapi.components.State; 5 | import com.intellij.openapi.components.Storage; 6 | import com.intellij.openapi.project.Project; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | import java.util.LinkedHashMap; 11 | import java.util.Map; 12 | 13 | @State(name = "translator.cache", storages = {@Storage(value = "translator-cache.xml")}) 14 | public class TranslatorCache implements PersistentStateComponent { 15 | 16 | public Map transCache = new LinkedHashMap<>(); 17 | 18 | public static TranslatorCache getInstance(Project project) { 19 | return project.getService(TranslatorCache.class); 20 | } 21 | 22 | @Override 23 | public @Nullable TranslatorCache getState() { 24 | return this; 25 | } 26 | 27 | @Override 28 | public void loadState(@NotNull TranslatorCache state) { 29 | if (state.transCache == null) { 30 | return; 31 | } 32 | this.transCache = state.transCache; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /数据持久化/Translator/src/main/java/org/example/extension/TranslatorCache.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.components.PersistentStateComponent; 4 | import com.intellij.openapi.components.State; 5 | import com.intellij.openapi.components.Storage; 6 | import com.intellij.openapi.project.Project; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | import java.util.LinkedHashMap; 11 | import java.util.Map; 12 | 13 | @State(name = "translator.cache", storages = {@Storage(value = "translator-cache.xml")}) 14 | public class TranslatorCache implements PersistentStateComponent { 15 | 16 | public Map transCache = new LinkedHashMap<>(); 17 | 18 | public static TranslatorCache getInstance(Project project) { 19 | return project.getService(TranslatorCache.class); 20 | } 21 | 22 | @Override 23 | public @Nullable TranslatorCache getState() { 24 | return this; 25 | } 26 | 27 | @Override 28 | public void loadState(@NotNull TranslatorCache state) { 29 | if (state.transCache == null) { 30 | return; 31 | } 32 | this.transCache = state.transCache; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /监听器/Translator/src/main/java/org/example/extension/TranslatorCache.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.components.PersistentStateComponent; 4 | import com.intellij.openapi.components.State; 5 | import com.intellij.openapi.components.Storage; 6 | import com.intellij.openapi.project.Project; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | import java.util.LinkedHashMap; 11 | import java.util.Map; 12 | 13 | @State(name = "translator.cache", storages = {@Storage(value = "translator-cache.xml")}) 14 | public class TranslatorCache implements PersistentStateComponent { 15 | 16 | public Map transCache = new LinkedHashMap<>(); 17 | 18 | public static TranslatorCache getInstance(Project project) { 19 | return project.getService(TranslatorCache.class); 20 | } 21 | 22 | @Override 23 | public @Nullable TranslatorCache getState() { 24 | return this; 25 | } 26 | 27 | @Override 28 | public void loadState(@NotNull TranslatorCache state) { 29 | if (state.transCache == null) { 30 | return; 31 | } 32 | this.transCache = state.transCache; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/java/org/example/extension/TranslatorCache.java: -------------------------------------------------------------------------------- 1 | package org.example.extension; 2 | 3 | import com.intellij.openapi.components.PersistentStateComponent; 4 | import com.intellij.openapi.components.State; 5 | import com.intellij.openapi.components.Storage; 6 | import com.intellij.openapi.project.Project; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | import java.util.LinkedHashMap; 11 | import java.util.Map; 12 | 13 | @State(name = "translator.cache", storages = {@Storage(value = "translator-cache.xml")}) 14 | public class TranslatorCache implements PersistentStateComponent { 15 | 16 | public Map transCache = new LinkedHashMap<>(); 17 | 18 | public static TranslatorCache getInstance(Project project) { 19 | return project.getService(TranslatorCache.class); 20 | } 21 | 22 | @Override 23 | public @Nullable TranslatorCache getState() { 24 | return this; 25 | } 26 | 27 | @Override 28 | public void loadState(@NotNull TranslatorCache state) { 29 | if (state.transCache == null) { 30 | return; 31 | } 32 | this.transCache = state.transCache; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /监听器/Translator/src/main/java/org/example/listener/GlobalProblemListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.analysis.problemsView.Problem; 4 | import com.intellij.analysis.problemsView.ProblemsListener; 5 | import com.intellij.notification.Notification; 6 | import com.intellij.notification.NotificationType; 7 | import com.intellij.notification.Notifications; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class GlobalProblemListener implements ProblemsListener { 11 | 12 | @Override 13 | public void problemAppeared(@NotNull Problem problem) { 14 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 15 | } 16 | 17 | @Override 18 | public void problemDisappeared(@NotNull Problem problem) { 19 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 20 | } 21 | 22 | @Override 23 | public void problemUpdated(@NotNull Problem problem) { 24 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /丰富的消息通知方式/Translator/src/main/java/org/example/listener/GlobalProblemListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.analysis.problemsView.Problem; 4 | import com.intellij.analysis.problemsView.ProblemsListener; 5 | import com.intellij.notification.Notification; 6 | import com.intellij.notification.NotificationType; 7 | import com.intellij.notification.Notifications; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class GlobalProblemListener implements ProblemsListener { 11 | 12 | @Override 13 | public void problemAppeared(@NotNull Problem problem) { 14 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 15 | } 16 | 17 | @Override 18 | public void problemDisappeared(@NotNull Problem problem) { 19 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 20 | } 21 | 22 | @Override 23 | public void problemUpdated(@NotNull Problem problem) { 24 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/src/main/java/org/example/listener/GlobalProblemListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.analysis.problemsView.Problem; 4 | import com.intellij.analysis.problemsView.ProblemsListener; 5 | import com.intellij.notification.Notification; 6 | import com.intellij.notification.NotificationType; 7 | import com.intellij.notification.Notifications; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class GlobalProblemListener implements ProblemsListener { 11 | 12 | @Override 13 | public void problemAppeared(@NotNull Problem problem) { 14 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 15 | } 16 | 17 | @Override 18 | public void problemDisappeared(@NotNull Problem problem) { 19 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 20 | } 21 | 22 | @Override 23 | public void problemUpdated(@NotNull Problem problem) { 24 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /插件UI下篇/Translator/src/main/java/org/example/listener/GlobalProblemListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import com.intellij.analysis.problemsView.Problem; 4 | import com.intellij.analysis.problemsView.ProblemsListener; 5 | import com.intellij.notification.Notification; 6 | import com.intellij.notification.NotificationType; 7 | import com.intellij.notification.Notifications; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class GlobalProblemListener implements ProblemsListener { 11 | 12 | @Override 13 | public void problemAppeared(@NotNull Problem problem) { 14 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 15 | } 16 | 17 | @Override 18 | public void problemDisappeared(@NotNull Problem problem) { 19 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 20 | } 21 | 22 | @Override 23 | public void problemUpdated(@NotNull Problem problem) { 24 | Notifications.Bus.notify(new Notification("Print", problem.getDescription(), NotificationType.ERROR), problem.getProvider().getProject()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption4StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption4StatementImpl extends ASTWrapperPsiElement implements CURLOption4Statement { 15 | 16 | public CURLOption4StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption4Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLOption4 getOption4() { 33 | return findNotNullChildByClass(CURLOption4.class); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption4StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption4StatementImpl extends ASTWrapperPsiElement implements CURLOption4Statement { 15 | 16 | public CURLOption4StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption4Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLOption4 getOption4() { 33 | return findNotNullChildByClass(CURLOption4.class); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption4StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption4StatementImpl extends ASTWrapperPsiElement implements CURLOption4Statement { 15 | 16 | public CURLOption4StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption4Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLOption4 getOption4() { 33 | return findNotNullChildByClass(CURLOption4.class); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption4StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption4StatementImpl extends ASTWrapperPsiElement implements CURLOption4Statement { 15 | 16 | public CURLOption4StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption4Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLOption4 getOption4() { 33 | return findNotNullChildByClass(CURLOption4.class); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /搭建插件项目/HelloWorldPlugin/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.HelloWorldPlugin 3 | HelloWorldPlugin 4 | org.example.HelloWorldPlugin 5 | // name标签中的内容就是我们的插件名字 6 | HelloWorldPlugin 7 | // 联系邮箱,网站,公司,这个标签也可以删除。关系不大 8 | Juejin 9 | // 插件描述信息 10 | HelloWord

12 |

这是我的第一个插件,名字叫做HelloWord。


13 |

让我们在知识的海洋中快乐的学习。


14 |

我要变强,我要变强 ,我要变强。


15 | ]]>
16 | 17 | 1.0.0

19 |

1. 搭建项目框架

20 | ]]> 21 |
22 | 23 | com.intellij.modules.platform 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
-------------------------------------------------------------------------------- /丰富的消息通知方式/Notifications/src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.Notifications 3 | Notifications 4 | 5 | 6 | Notifications


8 |

IntelliJ 平台中关于消息通知的项目Demo


9 | ]]> 10 | 11 | com.intellij.modules.platform 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /插件UI上篇/Translator/src/main/java/org/example/listener/TranslatorButtonActionListener.java: -------------------------------------------------------------------------------- 1 | package org.example.listener; 2 | 3 | import org.example.ui.TranslatorWindow; 4 | import org.example.util.TranslatorUtils; 5 | 6 | import javax.swing.*; 7 | import java.awt.event.ActionEvent; 8 | import java.util.HashMap; 9 | import java.util.Map; 10 | 11 | public class TranslatorButtonActionListener extends AbstractAction { 12 | 13 | private final TranslatorWindow window; 14 | 15 | private final Map langMap; 16 | 17 | public TranslatorButtonActionListener(TranslatorWindow window) { 18 | this.window = window; 19 | langMap = new HashMap<>(); 20 | langMap.put("中文", "zh"); 21 | langMap.put("英文", "en"); 22 | } 23 | 24 | @Override 25 | public void actionPerformed(ActionEvent e) { 26 | // 获取原语言文本、原语言、和目标翻译语言 27 | String originalText = window.getOriginalTextArea().getText(); 28 | String fromLang = langMap.get((String) window.getComboBox1().getSelectedItem()); 29 | String toLang = langMap.get((String) window.getComboBox2().getSelectedItem()); 30 | // 翻译后,将文本设置到翻译结果文本输入框 31 | String result = TranslatorUtils.getTransResult(originalText, fromLang, toLang); 32 | window.getTranslateTextArea().setText(result); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /主题插件开发流程/ThemeDemo/src/main/resources/icons/run.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /丰富的拓展点/Translator/src/main/java/org/example/action/TranslatorAction.java: -------------------------------------------------------------------------------- 1 | package org.example.action; 2 | 3 | import com.intellij.notification.Notification; 4 | import com.intellij.notification.NotificationType; 5 | import com.intellij.notification.Notifications; 6 | import com.intellij.openapi.actionSystem.AnAction; 7 | import com.intellij.openapi.actionSystem.AnActionEvent; 8 | import com.intellij.openapi.actionSystem.CommonDataKeys; 9 | import com.intellij.openapi.editor.Editor; 10 | import org.example.util.TranslatorUtils; 11 | import org.jetbrains.annotations.NotNull; 12 | 13 | public class TranslatorAction extends AnAction { 14 | 15 | @Override 16 | public void actionPerformed(@NotNull AnActionEvent e) { 17 | Editor editor = e.getData(CommonDataKeys.EDITOR); 18 | if (TranslatorUtils.appid == null || TranslatorUtils.securityKey == null) { 19 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", "请先设置appID,securityKey", NotificationType.ERROR), e.getProject()); 20 | return; 21 | } 22 | String text = editor.getSelectionModel().getSelectedText(); 23 | String transResult = TranslatorUtils.getTransResult(text, "auto", "zh"); 24 | Notifications.Bus.notify(new Notification("Print", "小天才翻译机", transResult, NotificationType.INFORMATION), e.getProject()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /搭建插件项目/HelloWorldPlugin2/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | org.example.HelloWorldPlugin 3 | HelloWorldPlugin 4 | org.example.HelloWorldPlugin 5 | // name标签中的内容就是我们的插件名字 6 | HelloWorldPlugin 7 | // 联系邮箱,网站,公司,这个标签也可以删除。关系不大 8 | Juejin 9 | // 插件描述信息 10 | HelloWord

12 |

这是我的第一个插件,名字叫做HelloWord。


13 |

让我们在知识的海洋中快乐的学习。


14 |

我要变强,我要变强 ,我要变强。


15 | ]]>
16 | 17 | 1.0.0

19 |

1. 搭建项目框架

20 | ]]> 21 |
22 | 24 | com.intellij.modules.platform 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
-------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLCommandImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLCommandImpl extends ASTWrapperPsiElement implements CURLCommand { 15 | 16 | public CURLCommandImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitCommand(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public List getOptionsList() { 33 | return PsiTreeUtil.getChildrenOfTypeAsList(this, CURLOptions.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public PsiElement getUrl() { 39 | return findNotNullChildByType(URL); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption3StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption3StatementImpl extends ASTWrapperPsiElement implements CURLOption3Statement { 15 | 16 | public CURLOption3StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption3Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLKv getKv() { 33 | return findNotNullChildByClass(CURLKv.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public CURLOption3 getOption3() { 39 | return findNotNullChildByClass(CURLOption3.class); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption3StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption3StatementImpl extends ASTWrapperPsiElement implements CURLOption3Statement { 15 | 16 | public CURLOption3StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption3Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLKv getKv() { 33 | return findNotNullChildByClass(CURLKv.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public CURLOption3 getOption3() { 39 | return findNotNullChildByClass(CURLOption3.class); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption3StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption3StatementImpl extends ASTWrapperPsiElement implements CURLOption3Statement { 15 | 16 | public CURLOption3StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption3Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLKv getKv() { 33 | return findNotNullChildByClass(CURLKv.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public CURLOption3 getOption3() { 39 | return findNotNullChildByClass(CURLOption3.class); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/gen/org/example/language/psi/impl/CURLOption5StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption5StatementImpl extends ASTWrapperPsiElement implements CURLOption5Statement { 15 | 16 | public CURLOption5StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption5Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLOption5 getOption5() { 33 | return findNotNullChildByClass(CURLOption5.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public PsiElement getMethod() { 39 | return findNotNullChildByType(METHOD); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption3StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption3StatementImpl extends ASTWrapperPsiElement implements CURLOption3Statement { 15 | 16 | public CURLOption3StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption3Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLKv getKv() { 33 | return findNotNullChildByClass(CURLKv.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public CURLOption3 getOption3() { 39 | return findNotNullChildByClass(CURLOption3.class); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption5StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption5StatementImpl extends ASTWrapperPsiElement implements CURLOption5Statement { 15 | 16 | public CURLOption5StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption5Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLOption5 getOption5() { 33 | return findNotNullChildByClass(CURLOption5.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public PsiElement getMethod() { 39 | return findNotNullChildByType(METHOD); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /自定义语言3/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption5StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption5StatementImpl extends ASTWrapperPsiElement implements CURLOption5Statement { 15 | 16 | public CURLOption5StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption5Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLOption5 getOption5() { 33 | return findNotNullChildByClass(CURLOption5.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public PsiElement getMethod() { 39 | return findNotNullChildByType(METHOD); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /自定义语言4/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption5StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption5StatementImpl extends ASTWrapperPsiElement implements CURLOption5Statement { 15 | 16 | public CURLOption5StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption5Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLOption5 getOption5() { 33 | return findNotNullChildByClass(CURLOption5.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public PsiElement getMethod() { 39 | return findNotNullChildByType(METHOD); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /自定义语言2/HTTPRequester/src/main/java/org/example/language/psi/impl/CURLOption1StatementImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package org.example.language.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static org.example.language.CURLTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import org.example.language.psi.*; 13 | 14 | public class CURLOption1StatementImpl extends ASTWrapperPsiElement implements CURLOption1Statement { 15 | 16 | public CURLOption1StatementImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull CURLVisitor visitor) { 21 | visitor.visitOption1Statement(this); 22 | } 23 | 24 | @Override 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof CURLVisitor) accept((CURLVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public CURLOption1 getOption1() { 33 | return findNotNullChildByClass(CURLOption1.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public PsiElement getQuotedString() { 39 | return findNotNullChildByType(QUOTED_STRING); 40 | } 41 | 42 | } 43 | --------------------------------------------------------------------------------