From e3df5a29b80af8f1385ef8ec5d895129268738a9 Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 5 Sep 2014 12:42:56 +0400 Subject: [PATCH] create 'JAR Application' configuration from context menu for jar files (IDEA-81929) --- .../jar/JarApplicationConfiguration.java | 2 +- .../JarApplicationConfigurationProducer.java | 63 +++++++++++++++++++ .../jar/JarApplicationConfigurationType.java | 6 ++ resources/src/META-INF/IdeaPlugin.xml | 1 + 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfigurationProducer.java diff --git a/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfiguration.java b/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfiguration.java index 7f153165ca32..970abc055032 100644 --- a/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfiguration.java +++ b/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfiguration.java @@ -42,7 +42,7 @@ import java.util.Map; /** * @author nik */ -public class JarApplicationConfiguration extends RunConfigurationBase implements CommonJavaRunConfigurationParameters, SearchScopeProvidingRunProfile { +public class JarApplicationConfiguration extends LocatableConfigurationBase implements CommonJavaRunConfigurationParameters, SearchScopeProvidingRunProfile { private static final SkipDefaultValuesSerializationFilters SERIALIZATION_FILTERS = new SkipDefaultValuesSerializationFilters(); private JarApplicationConfigurationBean myBean = new JarApplicationConfigurationBean(); private Map myEnvs = new LinkedHashMap(); diff --git a/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfigurationProducer.java new file mode 100644 index 000000000000..41e2ee9f2291 --- /dev/null +++ b/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfigurationProducer.java @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2014 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 com.intellij.execution.jar; + +import com.intellij.execution.Location; +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.actions.RunConfigurationProducer; +import com.intellij.openapi.fileTypes.FileTypes; +import com.intellij.openapi.util.Ref; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.Nullable; + +/** + * @author nik + */ +public class JarApplicationConfigurationProducer extends RunConfigurationProducer { + public JarApplicationConfigurationProducer() { + super(JarApplicationConfigurationType.getInstance()); + } + + @Override + protected boolean setupConfigurationFromContext(JarApplicationConfiguration configuration, + ConfigurationContext context, + Ref sourceElement) { + VirtualFile file = getJarFileFromContext(context); + if (file != null) { + configuration.setName(file.getName()); + configuration.setJarPath(file.getPath()); + return true; + } + return false; + } + + @Nullable + private static VirtualFile getJarFileFromContext(ConfigurationContext context) { + Location location = context.getLocation(); + if (location == null) return null; + + VirtualFile file = location.getVirtualFile(); + return file != null && FileTypes.ARCHIVE.equals(file.getFileType()) ? file : null; + } + + @Override + public boolean isConfigurationFromContext(JarApplicationConfiguration configuration, ConfigurationContext context) { + VirtualFile file = getJarFileFromContext(context); + return file != null && FileUtil.pathsEqual(file.getPath(), configuration.getJarPath()); + } +} diff --git a/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfigurationType.java b/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfigurationType.java index 05fb3aaa0972..8c7fdebc8c52 100644 --- a/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfigurationType.java +++ b/java/execution/impl/src/com/intellij/execution/jar/JarApplicationConfigurationType.java @@ -19,6 +19,7 @@ import com.intellij.execution.ExecutionBundle; import com.intellij.execution.configuration.ConfigurationFactoryEx; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.ConfigurationTypeBase; +import com.intellij.execution.configurations.ConfigurationTypeUtil; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.icons.AllIcons; import com.intellij.openapi.project.Project; @@ -27,6 +28,11 @@ import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; public class JarApplicationConfigurationType extends ConfigurationTypeBase implements ConfigurationType { + @NotNull + public static JarApplicationConfigurationType getInstance() { + return ConfigurationTypeUtil.findConfigurationType(JarApplicationConfigurationType.class); + } + public JarApplicationConfigurationType() { super("JarApplication", ExecutionBundle.message("jar.application.configuration.name"), ExecutionBundle.message("jar.application.configuration.description"), AllIcons.FileTypes.Archive); diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index 6e3ca97edb51..ca054922776c 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -1225,6 +1225,7 @@ +