This commit is contained in:
Vladimir Krivosheev
2014-12-17 16:33:29 +01:00
parent f87157464c
commit a4ba663e06
17 changed files with 71 additions and 62 deletions
@@ -26,6 +26,7 @@ public interface CommonJavaRunConfigurationParameters extends CommonProgramRunCo
void setAlternativeJrePathEnabled(boolean enabled);
@Nullable
String getAlternativeJrePath();
void setAlternativeJrePath(String path);
@@ -214,6 +214,7 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration<JavaRunCo
ALTERNATIVE_JRE_PATH_ENABLED = enabled;
}
@Nullable
@Override
public String getAlternativeJrePath() {
return ALTERNATIVE_JRE_PATH;
@@ -145,6 +145,7 @@ public class JarApplicationConfiguration extends LocatableConfigurationBase impl
myBean.ALTERNATIVE_JRE_PATH_ENABLED = enabled;
}
@Nullable
@Override
public String getAlternativeJrePath() {
return myBean.ALTERNATIVE_JRE_PATH;
@@ -29,7 +29,9 @@ import com.intellij.ui.InsertPathAction;
import com.intellij.ui.PanelWithAnchor;
import com.intellij.ui.TextFieldWithHistory;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.util.PathUtil;
import net.miginfocom.swing.MigLayout;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.ActionEvent;
@@ -115,8 +117,8 @@ public class AlternativeJREPanel extends JPanel implements PanelWithAnchor {
return FileUtil.toSystemIndependentName(myPathField.getChildComponent().getText().trim());
}
private void setPath(final String path) {
myPathField.getChildComponent().setText(FileUtil.toSystemDependentName(path == null ? "" : path));
private void setPath(@Nullable String path) {
myPathField.getChildComponent().setText(StringUtil.notNullize(PathUtil.toSystemDependentName(path)));
}
public boolean isPathEnabled() {
@@ -128,7 +130,7 @@ public class AlternativeJREPanel extends JPanel implements PanelWithAnchor {
enabledChanged();
}
public void init(String path, boolean isEnabled){
public void init(@Nullable String path, boolean isEnabled){
setPathEnabled(isEnabled);
setPath(path);
}
@@ -36,6 +36,8 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import org.intellij.lang.annotations.MagicConstant;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.List;
@@ -96,7 +98,7 @@ public class JavaParametersUtil {
public static void configureModule(final RunConfigurationModule runConfigurationModule,
final JavaParameters parameters,
@MagicConstant(valuesFromClass = JavaParameters.class) final int classPathType,
final String jreHome) throws CantRunException {
@Nullable String jreHome) throws CantRunException {
Module module = runConfigurationModule.getModule();
if (module == null) {
throw CantRunException.noModuleConfigured(runConfigurationModule.getModuleName());
@@ -104,20 +106,20 @@ public class JavaParametersUtil {
configureModule(module, parameters, classPathType, jreHome);
}
public static void configureModule(Module module, JavaParameters parameters, @MagicConstant(valuesFromClass = JavaParameters.class) int classPathType, String jreHome) throws CantRunException {
public static void configureModule(Module module, JavaParameters parameters, @MagicConstant(valuesFromClass = JavaParameters.class) int classPathType, @Nullable String jreHome) throws CantRunException {
parameters.configureByModule(module, classPathType, createModuleJdk(module, jreHome));
}
public static void configureProject(Project project, final JavaParameters parameters, @MagicConstant(valuesFromClass = JavaParameters.class) final int classPathType, final String jreHome)
public static void configureProject(Project project, final JavaParameters parameters, @MagicConstant(valuesFromClass = JavaParameters.class) final int classPathType, @Nullable String jreHome)
throws CantRunException {
parameters.configureByProject(project, classPathType, createProjectJdk(project, jreHome));
}
private static Sdk createModuleJdk(final Module module, final String jreHome) throws CantRunException {
private static Sdk createModuleJdk(final Module module, @Nullable String jreHome) throws CantRunException {
return jreHome == null ? JavaParameters.getModuleJdk(module) : createAlternativeJdk(jreHome);
}
public static Sdk createProjectJdk(final Project project, final String jreHome) throws CantRunException {
public static Sdk createProjectJdk(final Project project, @Nullable String jreHome) throws CantRunException {
return jreHome == null ? createProjectJdk(project) : createAlternativeJdk(jreHome);
}
@@ -129,7 +131,7 @@ public class JavaParametersUtil {
return jdk;
}
private static Sdk createAlternativeJdk(final String jreHome) throws CantRunException {
private static Sdk createAlternativeJdk(@NotNull String jreHome) throws CantRunException {
final Sdk configuredJdk = ProjectJdkTable.getInstance().findJdk(jreHome);
if (configuredJdk != null) {
return configuredJdk;
@@ -145,9 +147,8 @@ public class JavaParametersUtil {
public static void checkAlternativeJRE(CommonJavaRunConfigurationParameters configuration) throws RuntimeConfigurationWarning {
if (configuration.isAlternativeJrePathEnabled()) {
final String alternativeJrePath = configuration.getAlternativeJrePath();
if (alternativeJrePath == null ||
alternativeJrePath.length() == 0 ||
String alternativeJrePath = configuration.getAlternativeJrePath();
if (StringUtil.isEmpty(alternativeJrePath) ||
ProjectJdkTable.getInstance().findJdk(alternativeJrePath) == null && !JavaSdk.checkForJre(alternativeJrePath)) {
throw new RuntimeConfigurationWarning(
ExecutionBundle.message("jre.path.is.not.valid.jre.home.error.mesage", alternativeJrePath));
@@ -30,28 +30,26 @@ import com.intellij.openapi.projectRoots.JavaSdkVersion;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.Comparing;
import org.jetbrains.annotations.Nullable;
public class JreVersionDetector {
private String myLastAlternativeJrePath = null; //awful hack
private String myLastAlternativeJrePath ; //awful hack
private boolean myLastIsJre50;
public boolean isModuleJre50Configured(final ModuleBasedConfiguration configuration) {
final Module module = configuration.getConfigurationModule().getModule();
if (module != null && !module.isDisposed()) {
final ModuleRootManager rootManager = ModuleRootManager.getInstance(module);
final Sdk jdk = rootManager.getSdk();
return isJre50(jdk);
return isJre50(ModuleRootManager.getInstance(module).getSdk());
}
final Sdk projectJdk = ProjectRootManager.getInstance(configuration.getProject()).getProjectSdk();
return isJre50(projectJdk);
return isJre50(ProjectRootManager.getInstance(configuration.getProject()).getProjectSdk());
}
public boolean isJre50Configured(final CommonJavaRunConfigurationParameters configuration) {
if (configuration.isAlternativeJrePathEnabled()) {
if (configuration.getAlternativeJrePath().equals(myLastAlternativeJrePath)) return myLastIsJre50;
if (Comparing.equal(configuration.getAlternativeJrePath(), myLastAlternativeJrePath)) {
return myLastIsJre50;
}
myLastAlternativeJrePath = configuration.getAlternativeJrePath();
final String versionString = JavaSdk.getJdkVersion(myLastAlternativeJrePath);
myLastIsJre50 = versionString != null && isJre50(versionString);
@@ -22,7 +22,6 @@ import com.intellij.execution.filters.TextConsoleBuilder;
import com.intellij.execution.filters.TextConsoleBuilderFactory;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
import com.intellij.execution.runners.ExecutionUtil;
import com.intellij.execution.util.ExecutionErrorDialog;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.module.Module;
@@ -140,7 +139,7 @@ public class JavaExecutionUtil {
}
@Nullable
public static String getPresentableClassName(final String rtClassName) {
public static String getPresentableClassName(@Nullable String rtClassName) {
return getPresentableClassName(rtClassName, null);
}
@@ -149,13 +148,13 @@ public class JavaExecutionUtil {
*/
@Deprecated
@Nullable
public static String getPresentableClassName(final String rtClassName, final JavaRunConfigurationModule configurationModule) {
if (StringUtil.isEmpty(rtClassName)) return null;
final int lastDot = rtClassName.lastIndexOf('.');
if (lastDot == -1 || lastDot == rtClassName.length() - 1) {
return rtClassName;
public static String getPresentableClassName(@Nullable String rtClassName, JavaRunConfigurationModule configurationModule) {
if (StringUtil.isEmpty(rtClassName)) {
return null;
}
return rtClassName.substring(lastDot + 1, rtClassName.length());
int lastDot = rtClassName.lastIndexOf('.');
return lastDot == -1 || lastDot == rtClassName.length() - 1 ? rtClassName : rtClassName.substring(lastDot + 1, rtClassName.length());
}
public static Module findModule(@NotNull final PsiClass psiClass) {
@@ -196,9 +195,8 @@ public class JavaExecutionUtil {
return PsiLocation.fromPsiElement(classes[0]);
}
public static String getShortClassName(final String fqName) {
if (fqName == null) return "";
return StringUtil.getShortName(fqName);
public static String getShortClassName(@Nullable String fqName) {
return fqName == null ? "" : StringUtil.getShortName(fqName);
}
public static void showExecutionErrorMessage(final ExecutionException e, final String title, final Project project) {
@@ -18,8 +18,9 @@ package com.intellij.execution.configurations;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.util.xmlb.annotations.Transient;
import com.intellij.util.xmlb.annotations.Attribute;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
@@ -34,13 +35,12 @@ public abstract class LocatableConfigurationBase extends RunConfigurationBase im
private boolean myNameIsGenerated;
protected LocatableConfigurationBase(Project project,
ConfigurationFactory factory, String name) {
protected LocatableConfigurationBase(Project project, @NotNull ConfigurationFactory factory, String name) {
super(project, factory, name);
}
@Override
@Transient
@Attribute("nameIsGenerated")
public boolean isGeneratedName() {
return suggestedName() != null && myNameIsGenerated;
}
@@ -65,20 +65,23 @@ public abstract class LocatableConfigurationBase extends RunConfigurationBase im
@Override
public void readExternal(Element element) throws InvalidDataException {
super.readExternal(element);
myNameIsGenerated = "true".equals(element.getAttributeValue(ATTR_NAME_IS_GENERATED));
if (!isNewSerializationUsed()) {
myNameIsGenerated = "true".equals(element.getAttributeValue(ATTR_NAME_IS_GENERATED));
}
}
@Override
public void writeExternal(Element element) throws WriteExternalException {
super.writeExternal(element);
if (myNameIsGenerated && suggestedName() != null) {
if (!isNewSerializationUsed() && myNameIsGenerated && suggestedName() != null) {
element.setAttribute(ATTR_NAME_IS_GENERATED, "true");
}
}
@Override
public void checkConfiguration() throws RuntimeConfigurationException {
}
/**
@@ -48,7 +48,7 @@ public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunCo
protected static final String TO_CLONE_ELEMENT_NAME = "toClone";
public ModuleBasedConfiguration(final String name,
final ConfigurationModule configurationModule, final ConfigurationFactory factory) {
@NotNull ConfigurationModule configurationModule, @NotNull ConfigurationFactory factory) {
super(configurationModule.getProject(), factory, name);
myModule = configurationModule;
}
@@ -63,7 +63,7 @@ public abstract class RunConfigurationBase extends UserDataHolderBase
private boolean myShowConsoleOnStdErr = false;
private String myFileOutputPath = null;
protected RunConfigurationBase(final Project project, final ConfigurationFactory factory, final String name) {
protected RunConfigurationBase(final Project project, @NotNull ConfigurationFactory factory, final String name) {
myProject = project;
myFactory = factory;
myName = name;
@@ -211,11 +211,14 @@ public abstract class RunConfigurationBase extends UserDataHolderBase
final Element fileOutputElement = element.getChild(FILE_OUTPUT);
if (fileOutputElement != null) {
myFileOutputPath = fileOutputElement.getAttributeValue(OUTPUT_FILE);
final String isSave = fileOutputElement.getAttributeValue(SAVE);
String isSave = fileOutputElement.getAttributeValue(SAVE);
mySaveOutput = isSave != null && Boolean.parseBoolean(isSave);
}
myShowConsoleOnStdOut = Boolean.parseBoolean(element.getAttributeValue(SHOW_CONSOLE_ON_STD_OUT));
myShowConsoleOnStdErr = Boolean.parseBoolean(element.getAttributeValue(SHOW_CONSOLE_ON_STD_ERR));
if (!isNewSerializationUsed()) {
myShowConsoleOnStdOut = Boolean.parseBoolean(element.getAttributeValue(SHOW_CONSOLE_ON_STD_OUT));
myShowConsoleOnStdErr = Boolean.parseBoolean(element.getAttributeValue(SHOW_CONSOLE_ON_STD_ERR));
}
}
@Override
@@ -120,7 +120,7 @@ public class RunConfigurationModule implements JDOMExternalizable {
}
public String getModuleName() {
return myModuleName != null ? myModuleName : "";
return StringUtil.notNullize(myModuleName);
}
private ModuleManager getModuleManager() {
@@ -18,10 +18,12 @@ package com.intellij.execution;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.JDOMExternalizable;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFileManager;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
import java.io.File;
@@ -51,16 +53,10 @@ public class ExternalizablePath implements JDOMExternalizable {
}
public static String urlValue(String localPath) {
if (localPath == null) return "";
localPath = localPath.trim();
if (localPath.length() == 0) return "";
return VirtualFileManager.constructUrl(LocalFileSystem.PROTOCOL, localPath.replace(File.separatorChar, '/'));
return StringUtil.isEmptyOrSpaces(localPath) ? "" : VirtualFileManager.constructUrl(LocalFileSystem.PROTOCOL, localPath.trim().replace(File.separatorChar, '/'));
}
public static String localPathValue(String url) {
if (url == null) return "";
url = url.trim();
if (url.length() == 0) return "";
return VirtualFileManager.extractPath(url).replace('/', File.separatorChar);
public static String localPathValue(@Nullable String url) {
return StringUtil.isEmptyOrSpaces(url) ? "" : VirtualFileManager.extractPath(url.trim()).replace('/', File.separatorChar);
}
}
@@ -142,10 +142,12 @@ public class ProgramRunnerUtil {
return configurationIcon;
}
public static String shortenName(final String name, final int toBeAdded) {
if (name == null) return "";
public static String shortenName(@Nullable String name, final int toBeAdded) {
if (name == null) {
return "";
}
final int symbols = Math.max(10, 20 - toBeAdded);
if (name.length() < symbols) return name;
else return name.substring(0, symbols) + "...";
return name.length() < symbols ? name : name.substring(0, symbols) + "...";
}
}
@@ -26,6 +26,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.DefaultJDOMExternalizer;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.classFilter.ClassFilter;
import com.intellij.util.ArrayUtil;
import org.jdom.Element;
@@ -220,10 +221,10 @@ public class JavaCoverageEnabledConfiguration extends CoverageEnabledConfigurati
return myCoverageFilePath;
}
public void setUpCoverageFilters(String className, String packageName) {
public void setUpCoverageFilters(@Nullable String className, @Nullable String packageName) {
if (getCoveragePatterns() == null) {
String pattern = null;
if (className != null && className.length() > 0) {
if (!StringUtil.isEmpty(className)) {
int index = className.lastIndexOf('.');
if (index >= 0) {
pattern = className.substring(0, index);
@@ -233,8 +234,7 @@ public class JavaCoverageEnabledConfiguration extends CoverageEnabledConfigurati
pattern = packageName;
}
if (pattern != null && pattern.length() > 0) {
if (!StringUtil.isEmpty(pattern)) {
setCoveragePatterns(new ClassFilter[]{new ClassFilter(pattern + ".*")});
}
}
@@ -126,6 +126,7 @@ public abstract class MvcRunConfiguration extends ModuleBasedConfiguration<RunCo
throw new UnsupportedOperationException();
}
@Nullable
@Override
public String getAlternativeJrePath() {
return null;
@@ -339,6 +339,7 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration<RunCo
throw new UnsupportedOperationException();
}
@Nullable
@Override
public String getAlternativeJrePath() {
throw new UnsupportedOperationException();
@@ -225,6 +225,7 @@ public class TestNGConfiguration extends ModuleBasedConfiguration<JavaRunConfigu
this.ALTERNATIVE_JRE_PATH_ENABLED = enabled;
}
@Nullable
public String getAlternativeJrePath() {
return ALTERNATIVE_JRE_PATH;
}