Basic scaffold - project service, app service, listeners, bundle

pull/5/head
Jakub Chrzanowski 4 years ago
parent c4670a498b
commit 42a4db90e7

@ -1 +1,3 @@
# intellij-plugin-template
IntelliJ Plugin Template
========================

@ -1,6 +1,6 @@
plugins {
id 'java'
id "org.jetbrains.intellij" version "0.4.16"
id 'org.jetbrains.intellij' version '0.4.18'
}
group pluginGroup
@ -12,16 +12,25 @@ repositories {
mavenCentral()
}
patchPluginXml {
version = project.version
}
// https://github.com/JetBrains/gradle-intellij-plugin
intellij {
pluginName pluginName
version ideaVersion
type ideaType
pluginName pluginName
updateSinceUntilBuild = false
plugins = ['java']
// updateSinceUntilBuild = false
downloadSources Boolean.valueOf(sources)
plugins 'java'
}
patchPluginXml {
version project.version
// sinceBuild sinceBuild
}
publishPlugin {
token 'ssdfhasdfASDaq23jhnasdkjh'
channels 'nightly'
}

@ -2,18 +2,11 @@
# https://www.jetbrains.com/intellij-repository/releases
# https://www.jetbrains.com/intellij-repository/snapshots
ideaVersion = LATEST-EAP-SNAPSHOT
ideaType = IC
sources = true
isEAP = false
kotlinVersion = 1.3.61
pluginGroup = org.jetbrains.plugins.template
pluginName = Template
pluginVersion = 0.0.1
publishPluginId = 0
publishUsername = hsz
publishPassword =
publishChannel =
ideaVersion = 2020.1
ideaType = IC
sources = true
isEAP = false

@ -1,10 +0,0 @@
package org.jetbrains.plugins.template;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
public class MyProjectService {
public MyProjectService(@NotNull Project project) {
System.out.println("MyProjectService");
}
}

@ -0,0 +1,46 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2018 hsz Jakub Chrzanowski <jakub@hsz.mobi>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package org.jetbrains.plugins.template;
import com.intellij.DynamicBundle;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.PropertyKey;
public class TemplateBundle extends DynamicBundle {
@NonNls
public static final String BUNDLE = "messages.TemplateBundle";
private static final TemplateBundle INSTANCE = new TemplateBundle();
private TemplateBundle() {
super(BUNDLE);
}
@NotNull
public static String message(@NotNull @PropertyKey(resourceBundle = BUNDLE) String key, Object... params) {
return INSTANCE.getMessage(key, params);
}
}

@ -0,0 +1,35 @@
package org.jetbrains.plugins.template.listeners;
import com.intellij.ide.plugins.CannotUnloadPluginException;
import com.intellij.ide.plugins.DynamicPluginListener;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.openapi.components.ServiceManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.template.services.MyApplicationService;
class MyDynamicPluginListener implements DynamicPluginListener {
@Override
public void beforePluginLoaded(@NotNull IdeaPluginDescriptor pluginDescriptor) {
ServiceManager.getService(MyApplicationService.class);
}
@Override
public void pluginLoaded(@NotNull IdeaPluginDescriptor pluginDescriptor) {
System.out.println("xx");
}
@Override
public void beforePluginUnload(@NotNull IdeaPluginDescriptor pluginDescriptor, boolean isUpdate) {
}
@Override
public void checkUnloadPlugin(@NotNull IdeaPluginDescriptor pluginDescriptor) throws CannotUnloadPluginException {
}
@Override
public void pluginUnloaded(@NotNull IdeaPluginDescriptor pluginDescriptor, boolean isUpdate) {
}
}

@ -0,0 +1,13 @@
package org.jetbrains.plugins.template.listeners;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManagerListener;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.template.services.MyProjectService;
class MyProjectManagerListener implements ProjectManagerListener {
@Override
public void projectOpened(@NotNull Project project) {
project.getService(MyProjectService.class);
}
}

@ -1,4 +1,4 @@
package org.jetbrains.plugins.template;
package org.jetbrains.plugins.template.services;
public class MyApplicationService {
public MyApplicationService() {

@ -0,0 +1,11 @@
package org.jetbrains.plugins.template.services;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.template.TemplateBundle;
public class MyProjectService {
public MyProjectService(@NotNull Project project) {
System.out.println(TemplateBundle.message("projectService", project.getName()));
}
}

@ -1,17 +1,22 @@
<idea-plugin url="www.jetbrains.com">
<id>org.jetbrains.plugins.template</id>
<name>Template</name>
<version>1.0.0</version>
<vendor>JetBrains</vendor>
<idea-version since-build="201"/>
<description>Demonstrates various aspects of interacting with project model</description>
<!-- Product and plugin compatibility requirements -->
<!-- http://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_dependencies.html?search=depend#dependency-declaration-in-pluginxml -->
<depends>com.intellij.modules.java</depends>
<depends>com.intellij.java</depends>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="org.jetbrains.plugins.template.MyApplicationService" />
<projectService serviceImplementation="org.jetbrains.plugins.template.MyProjectService" />
<applicationService serviceImplementation="org.jetbrains.plugins.template.services.MyApplicationService"/>
<projectService serviceImplementation="org.jetbrains.plugins.template.services.MyProjectService"/>
</extensions>
<projectListeners>
<listener class="org.jetbrains.plugins.template.listeners.MyProjectManagerListener"
topic="com.intellij.openapi.project.ProjectManagerListener"/>
<listener class="org.jetbrains.plugins.template.listeners.MyDynamicPluginListener"
topic="com.intellij.ide.plugins.DynamicPluginListener"/>
</projectListeners>
</idea-plugin>

@ -0,0 +1,58 @@
<svg xmlns="http://www.w3.org/2000/svg" width="81" height="80" viewBox="0 0 81 80">
<defs>
<linearGradient id="pluginsdk_80-a" x1="-.031%" x2="100.053%" y1="49.963%" y2="49.963%">
<stop offset="25.81%" stop-color="#F97A12"/>
<stop offset="45.91%" stop-color="#B07B58"/>
<stop offset="72.41%" stop-color="#577BAE"/>
<stop offset="91.05%" stop-color="#1E7CE5"/>
<stop offset="100%" stop-color="#087CFA"/>
</linearGradient>
<linearGradient id="pluginsdk_80-b" x1="27.55%" x2="82.223%" y1="34.514%" y2="77.605%">
<stop offset="0%" stop-color="#F97A12"/>
<stop offset="7.18%" stop-color="#CB7A3E"/>
<stop offset="15.41%" stop-color="#9E7B6A"/>
<stop offset="24.2%" stop-color="#757B91"/>
<stop offset="33.44%" stop-color="#537BB1"/>
<stop offset="43.24%" stop-color="#387CCC"/>
<stop offset="53.81%" stop-color="#237CE0"/>
<stop offset="65.52%" stop-color="#147CEF"/>
<stop offset="79.25%" stop-color="#0B7CF7"/>
<stop offset="100%" stop-color="#087CFA"/>
</linearGradient>
<linearGradient id="pluginsdk_80-c" x1="63.121%" x2="40.793%" y1="97.699%" y2="-6.587%">
<stop offset="0%" stop-color="#FE315D"/>
<stop offset="7.84%" stop-color="#CB417E"/>
<stop offset="16.01%" stop-color="#9E4E9B"/>
<stop offset="24.74%" stop-color="#755BB4"/>
<stop offset="33.92%" stop-color="#5365CA"/>
<stop offset="43.65%" stop-color="#386DDB"/>
<stop offset="54.14%" stop-color="#2374E9"/>
<stop offset="65.76%" stop-color="#1478F3"/>
<stop offset="79.4%" stop-color="#0B7BF8"/>
<stop offset="100%" stop-color="#087CFA"/>
</linearGradient>
<linearGradient id="pluginsdk_80-d" x1="25.331%" x2="93.854%" y1="24.119%" y2="132.621%">
<stop offset="0%" stop-color="#FE315D"/>
<stop offset="4.023%" stop-color="#F63462"/>
<stop offset="10.37%" stop-color="#DF3A71"/>
<stop offset="16.67%" stop-color="#C24383"/>
<stop offset="29.12%" stop-color="#AD4A91"/>
<stop offset="54.98%" stop-color="#755BB4"/>
<stop offset="91.75%" stop-color="#1D76ED"/>
<stop offset="100%" stop-color="#087CFA"/>
</linearGradient>
</defs>
<g fill="none" fill-rule="evenodd">
<g fill-rule="nonzero" transform="translate(8 8)">
<path fill="url(#pluginsdk_80-a)" d="M6.08754566,64 L2.66453526e-15,59.1000946 L0,26.7918961 L30,38.6703369 L10.1403967,64 L6.08754566,64 Z"/>
<path fill="url(#pluginsdk_80-b)" d="M20.9524706,64 L52.2740919,31.9159091 L37.6708832,0.460194805 L38.0580944,1.33226763e-15 L64,0 L64,64 L20.9524706,64 Z"/>
<path fill="url(#pluginsdk_80-c)" d="M34.4123783,0 L64,0 L64,28.0366227 L49.0078336,44 L34,0.44696173 L34.4123783,0 Z"/>
<path fill="url(#pluginsdk_80-d)" d="M30.3358775,64 L0,64 L0,49.9709549 L6.23437817,29.2830519 L0,27.1596093 L0,0 L39.4697238,0 L58,21.3844805 L30.5381317,63.9259091 L30.3358775,64 Z"/>
</g>
<g fill-rule="nonzero" transform="translate(12 12)">
<rect width="56" height="56" fill="#000"/>
<rect width="22" height="4" x="4" y="46" fill="#FFFEFE"/>
<path fill="#FFFEFE" d="M11.128,25.28 C8.584,25.28 6.016,24.392 4,22.592 L6.184,19.976 C7.696,21.224 9.28,22.016 11.2,22.016 C12.712,22.016 13.624,21.416 13.624,20.432 L13.624,20.384 C13.624,19.448 13.048,18.968 10.24,18.248 C6.856,17.384 4.672,16.448 4.672,13.112 L4.672,13.064 C4.672,10.016 7.12,8 10.552,8 C13,8 15.088,8.768 16.792,10.136 L14.872,12.92 C13.384,11.888 11.92,11.264 10.504,11.264 C9.088,11.264 8.344,11.912 8.344,12.728 L8.344,12.776 C8.344,13.88 9.064,14.24 11.968,14.984 C15.376,15.872 17.296,17.096 17.296,20.024 L17.296,20.072 C17.296,23.408 14.752,25.28 11.128,25.28 Z M19.512,25.04 L19.512,8.24 L26.064,8.24 C31.344,8.24 34.992,11.864 34.992,16.592 L34.992,16.64 C34.992,21.368 31.344,25.04 26.064,25.04 L19.512,25.04 Z M26.064,11.576 L23.208,11.576 L23.208,21.704 L26.064,21.704 C29.088,21.704 31.128,19.664 31.128,16.688 L31.128,16.64 C31.128,13.664 29.088,11.576 26.064,11.576 Z M37.28,25.04 L37.28,8.24 L40.976,8.24 L40.976,15.584 L47.744,8.24 L52.28,8.24 L45.416,15.368 L52.568,25.04 L48.128,25.04 L42.92,17.888 L40.976,19.904 L40.976,25.04 L37.28,25.04 Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

@ -0,0 +1,2 @@
name=Template Plugin
projectService=Project service: {0}
Loading…
Cancel
Save