From 95a03f14ebe2825e7920fde90f89267840967733 Mon Sep 17 00:00:00 2001 From: "Natalia.Ukhorskaya" Date: Wed, 28 Aug 2013 14:12:49 +0400 Subject: [PATCH] Add actions: to configure project and to configure project with javascript --- idea/src/META-INF/plugin.xml | 15 ++++++ .../ConfigureKotlinInProjectAction.java | 50 +++++++++++++++++++ .../ConfigureKotlinJsInProjectAction.java | 30 +++++++++++ .../jet/plugin/actions/KotlinActionGroup.java | 33 ++++++++++++ 4 files changed, 128 insertions(+) create mode 100644 idea/src/org/jetbrains/jet/plugin/actions/ConfigureKotlinInProjectAction.java create mode 100644 idea/src/org/jetbrains/jet/plugin/actions/ConfigureKotlinJsInProjectAction.java create mode 100644 idea/src/org/jetbrains/jet/plugin/actions/KotlinActionGroup.java diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 4559c816946..f4ce978559c 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -73,6 +73,21 @@ + + + + + + + + + + + + diff --git a/idea/src/org/jetbrains/jet/plugin/actions/ConfigureKotlinInProjectAction.java b/idea/src/org/jetbrains/jet/plugin/actions/ConfigureKotlinInProjectAction.java new file mode 100644 index 00000000000..afcd11ec869 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/actions/ConfigureKotlinInProjectAction.java @@ -0,0 +1,50 @@ +package org.jetbrains.jet.plugin.actions; + +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.Messages; +import org.jetbrains.jet.plugin.configuration.ConfigureKotlinInProjectUtils; +import org.jetbrains.jet.plugin.configuration.KotlinJsModuleConfigurator; +import org.jetbrains.jet.plugin.configuration.KotlinProjectConfigurator; + +import java.util.Collection; + +public class ConfigureKotlinInProjectAction extends AnAction { + + @Override + public void actionPerformed(AnActionEvent e) { + Project project = CommonDataKeys.PROJECT.getData(e.getDataContext()); + if (project == null) { + return; + } + + if (ConfigureKotlinInProjectUtils.isProjectConfigured(project)) { + Messages.showInfoMessage("All modules with kotlin files are configured", "Configure Project Info"); + return; + } + + Collection configurators = + Collections2.filter(ConfigureKotlinInProjectUtils.getApplicableConfigurators(project), new Predicate() { + @Override + public boolean apply(KotlinProjectConfigurator input) { + return !input.getName().equals(KotlinJsModuleConfigurator.NAME); + } + }); + + + if (configurators.size() == 1) { + configurators.iterator().next().configure(project); + } + else if (configurators.isEmpty()) { + Messages.showErrorDialog("There aren't configurators available", "Configure Kotlin in Project"); + } + else { + Messages.showErrorDialog("More than one configurator are available", "Configure Kotlin in Project"); + ConfigureKotlinInProjectUtils.showConfigureKotlinNotificationIfNeeded(project); + } + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/actions/ConfigureKotlinJsInProjectAction.java b/idea/src/org/jetbrains/jet/plugin/actions/ConfigureKotlinJsInProjectAction.java new file mode 100644 index 00000000000..62463f391fc --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/actions/ConfigureKotlinJsInProjectAction.java @@ -0,0 +1,30 @@ +package org.jetbrains.jet.plugin.actions; + +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.Messages; +import org.jetbrains.jet.plugin.configuration.ConfigureKotlinInProjectUtils; +import org.jetbrains.jet.plugin.configuration.KotlinJsModuleConfigurator; +import org.jetbrains.jet.plugin.configuration.KotlinProjectConfigurator; + +public class ConfigureKotlinJsInProjectAction extends AnAction { + + @Override + public void actionPerformed(AnActionEvent e) { + Project project = CommonDataKeys.PROJECT.getData(e.getDataContext()); + if (project == null) { + return; + } + KotlinProjectConfigurator configurator = ConfigureKotlinInProjectUtils.getConfiguratorByName(KotlinJsModuleConfigurator.NAME); + + assert configurator != null : "JsModuleConfigurator should be non-null"; + + if (ConfigureKotlinInProjectUtils.getNonConfiguredModules(project, configurator).isEmpty()) { + Messages.showInfoMessage("All modules are configured", "Configure Project Info"); + return; + } + configurator.configure(project); + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/actions/KotlinActionGroup.java b/idea/src/org/jetbrains/jet/plugin/actions/KotlinActionGroup.java new file mode 100644 index 00000000000..45b7bd82293 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/actions/KotlinActionGroup.java @@ -0,0 +1,33 @@ +/* + * Copyright 2000-2010 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.jet.plugin.actions; + +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.actionSystem.Presentation; + +public class KotlinActionGroup extends DefaultActionGroup { + + @Override + public void update(AnActionEvent event) { + Presentation p = event.getPresentation(); + boolean hasProject = event.getData(CommonDataKeys.PROJECT) != null; + + p.setVisible(hasProject); + p.setEnabled(hasProject); + } +}