From a7eaa68dd7b3943bc44cf6588d451e92283b9d26 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Mon, 27 Oct 2014 17:04:23 +0300 Subject: [PATCH 01/90] svn: Refactored CmdVersionClient - utilize CommandRuntime functionality instead of directly creating CommandExecutor --- .../org/jetbrains/idea/svn/api/BaseSvnClient.java | 8 ++++++-- .../jetbrains/idea/svn/api/CmdVersionClient.java | 13 ++++--------- .../idea/svn/commandLine/CommandRuntime.java | 10 ++++++++++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/BaseSvnClient.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/BaseSvnClient.java index 01689e586f81..3751c78b365e 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/BaseSvnClient.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/BaseSvnClient.java @@ -106,8 +106,12 @@ public abstract class BaseSvnClient implements SvnClient { command.setResultBuilder(listener); command.put(parameters); - CommandRuntime runtime = new CommandRuntime(vcs, new AuthenticationService(vcs, myIsActive)); - return runtime.runWithAuthenticationAttempt(command); + return newRuntime(vcs).runWithAuthenticationAttempt(command); + } + + @NotNull + public CommandRuntime newRuntime(@NotNull SvnVcs vcs) { + return new CommandRuntime(vcs, new AuthenticationService(vcs, myIsActive)); } protected static void callHandler(@Nullable ProgressTracker handler, @NotNull ProgressEvent event) throws VcsException { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java index 95b4734f84d1..ec7fd2109941 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java @@ -3,9 +3,7 @@ package org.jetbrains.idea.svn.api; import com.intellij.execution.process.ProcessOutput; import com.intellij.openapi.util.Version; import org.jetbrains.annotations.NotNull; -import org.jetbrains.idea.svn.SvnApplicationSettings; import org.jetbrains.idea.svn.commandLine.Command; -import org.jetbrains.idea.svn.commandLine.CommandExecutor; import org.jetbrains.idea.svn.commandLine.SvnBindException; import org.jetbrains.idea.svn.commandLine.SvnCommandName; @@ -18,6 +16,7 @@ import java.util.regex.Pattern; public class CmdVersionClient extends BaseSvnClient implements VersionClient { private static final Pattern VERSION = Pattern.compile("^(\\d+)\\.(\\d+)\\.(\\d+)"); + private static final int COMMAND_TIMEOUT = 30 * 1000; @NotNull @Override @@ -25,16 +24,12 @@ public class CmdVersionClient extends BaseSvnClient implements VersionClient { return parseVersion(runCommand()); } - private static ProcessOutput runCommand() throws SvnBindException { - // TODO: Seems CommandRuntime should be used here when its api is more robust (to specify timeout or so). + @NotNull + private ProcessOutput runCommand() throws SvnBindException { Command command = new Command(SvnCommandName.version); command.put("--quiet"); - SvnApplicationSettings settings = SvnApplicationSettings.getInstance(); - CommandExecutor executor = new CommandExecutor(settings.getCommandLinePath(), settings.getExecutableLocale(), command); - executor.run(30 * 1000); - - return executor.getProcessOutput(); + return newRuntime(myVcs).runLocal(command, COMMAND_TIMEOUT).getProcessOutput(); } @NotNull diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java index a64821e24aad..97ee5f9c5f19 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java @@ -77,6 +77,16 @@ public class CommandRuntime { } } + @NotNull + public CommandExecutor runLocal(@NotNull Command command, int timeout) throws SvnBindException { + CommandExecutor executor = newExecutor(command); + + executor.run(timeout); + onAfterCommand(executor, command); + + return executor; + } + private void onStart(@NotNull Command command) throws SvnBindException { // TODO: Actually command handler should be used as canceller, but currently all handlers use same cancel logic - // TODO: - just check progress indicator From 59ef3d911267d8f962da0055d10e7d53f2a832ab Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Mon, 27 Oct 2014 18:40:06 +0300 Subject: [PATCH 02/90] 118571 Reverted ability to configure svn command line client locale in "Subversion" settings - use "svn.executable.locale" registry key instead --- .../util/resources/misc/registry.properties | 1 + .../idea/svn/SvnApplicationSettings.java | 15 +------- .../jetbrains/idea/svn/SvnBundle.properties | 2 - .../jetbrains/idea/svn/SvnConfigurable.form | 16 +------- .../jetbrains/idea/svn/SvnConfigurable.java | 38 +------------------ .../idea/svn/commandLine/CommandRuntime.java | 3 +- 6 files changed, 7 insertions(+), 68 deletions(-) diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index e5be37cd7b30..a06d44a8809c 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -358,6 +358,7 @@ search.everywhere.settings=false svn.use.incoming.optimization=false svn.lowest.supported.format.for.command.line=1.7.0 svn.use.svnkit.for.https.server.certificate.check=true +svn.executable.locale=en_US.UTF-8 completion.enable.relevant.method.chain.suggestions=false ide.mac.message.sheets.java.emulation=false diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnApplicationSettings.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnApplicationSettings.java index 5cf6d6db4389..72a1539efcf4 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnApplicationSettings.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnApplicationSettings.java @@ -18,7 +18,6 @@ package org.jetbrains.idea.svn; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; -import org.jetbrains.annotations.NotNull; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; @@ -44,7 +43,6 @@ public class SvnApplicationSettings implements PersistentStateComponent myCheckoutURLs = new ArrayList(); public List myTypedURLs = new ArrayList(); public String mySvnCommandLine = "svn"; - public String myExecutableLocale = SvnConfigurable.EN_US_LOCALE; } private ConfigurationBean myConfigurationBean; @@ -67,24 +65,15 @@ public class SvnApplicationSettings implements PersistentStateComponentEmulates the behavior when Subversion commands are executed directly from the terminal (in the interactive mode).
\ This is required to handle password/passphrase prompts for svn+ssh repositories, and trust invalid server certificates for https repositories. -command.line.locale.label=Locale\: -command.line.locale.system.default.title= ssh.settings.title=SSH Settings ssh.settings.executable.label=SSH executable\: diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form index c09b5cee65cd..5ae0161d59b1 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form @@ -156,7 +156,7 @@ - + @@ -181,20 +181,6 @@ - - - - - - - - - - - - - - diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java index b12a830a722e..c207903bf621 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java @@ -24,8 +24,6 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.ComboBox; -import com.intellij.openapi.ui.FixedComboBoxEditor; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.SystemInfo; @@ -33,13 +31,10 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; -import com.intellij.ui.CollectionComboBoxModel; -import com.intellij.ui.ListCellRendererWrapper; import com.intellij.ui.MultiLineTooltipUI; import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBRadioButton; import com.intellij.util.Consumer; -import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -56,15 +51,11 @@ import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.File; -import java.util.List; public class SvnConfigurable implements Configurable { public static final String DISPLAY_NAME = SvnVcs.VCS_DISPLAY_NAME; - public static final String EN_US_LOCALE = "en_US.UTF-8"; - public static final List EXECUTABLE_LOCALES = ContainerUtil.newArrayList("", EN_US_LOCALE, "C.UTF-8", "C"); - private final Project myProject; private JCheckBox myUseDefaultCheckBox; private TextFieldWithBrowseButton myConfigurationDirectoryText; @@ -81,7 +72,6 @@ public class SvnConfigurable implements Configurable { private JCheckBox myShowMergeSourceInAnnotate; private JBCheckBox myWithCommandLineClient; private JBCheckBox myRunUnderTerminal; - private ComboBox myLocalesList; private JSpinner myNumRevsInAnnotations; private JCheckBox myMaximumNumberOfRevisionsCheckBox; private JSpinner mySSHConnectionTimeout; @@ -125,27 +115,6 @@ public class SvnConfigurable implements Configurable { }); myCommandLineClient.addBrowseFolderListener("Subversion", "Select path to Subversion executable (1.7+)", project, FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor()); - //noinspection unchecked - myLocalesList.setModel(new CollectionComboBoxModel(EXECUTABLE_LOCALES)); - myLocalesList.setEditable(true); - FixedComboBoxEditor editor = new FixedComboBoxEditor(); - editor.getField().getEmptyText().setText(SvnBundle.message("command.line.locale.system.default.title")); - myLocalesList.setEditor(editor); - myLocalesList.setRenderer(new ListCellRendererWrapper() { - - @Override - public void customize(JList list, String value, int index, boolean selected, boolean hasFocus) { - setText(StringUtil.isEmpty(value) ? SvnBundle.message("command.line.locale.system.default.title") : value); - } - }); - myLocalesList.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - myLocalesList.getEditor().setItem(myLocalesList.getSelectedItem()); - } - } - }); myClearAuthButton.addActionListener(new ActionListener(){ public void actionPerformed(final ActionEvent e) { @@ -304,7 +273,6 @@ public class SvnConfigurable implements Configurable { if (! getSelectedSSL().equals(configuration.getSslProtocols())) return true; final SvnApplicationSettings applicationSettings17 = SvnApplicationSettings.getInstance(); if (! Comparing.equal(applicationSettings17.getCommandLinePath(), myCommandLineClient.getText().trim())) return true; - if (!Comparing.equal(applicationSettings17.getExecutableLocale(), myLocalesList.getEditor().getItem())) return true; if (!configuration.getConfigurationDirectory().equals(myConfigurationDirectoryText.getText().trim())) return true; return mySshSettingsPanel.isModified(configuration); } @@ -334,16 +302,13 @@ public class SvnConfigurable implements Configurable { final SvnApplicationSettings applicationSettings17 = SvnApplicationSettings.getInstance(); boolean reloadWorkingCopies = !acceleration().equals(configuration.getUseAcceleration()) || - !StringUtil.equals(applicationSettings17.getCommandLinePath(), myCommandLineClient.getText().trim()) || - !StringUtil.equals(applicationSettings17.getExecutableLocale(), - myLocalesList.getEditor().getItem().toString()); + !StringUtil.equals(applicationSettings17.getCommandLinePath(), myCommandLineClient.getText().trim()); configuration.setUseAcceleration(acceleration()); configuration.setRunUnderTerminal(myRunUnderTerminal.isSelected()); configuration.setSslProtocols(getSelectedSSL()); SvnVcs.getInstance(myProject).getSvnKitManager().refreshSSLProperty(); applicationSettings17.setCommandLinePath(myCommandLineClient.getText().trim()); - applicationSettings17.setExecutableLocale(myLocalesList.getEditor().getItem().toString()); boolean isClientValid = vcs17.checkCommandLineVersion(); if (isClientValid && reloadWorkingCopies) { vcs17.invokeRefreshSvnRoots(); @@ -389,7 +354,6 @@ public class SvnConfigurable implements Configurable { myRunUnderTerminal.setSelected(configuration.isRunUnderTerminal()); final SvnApplicationSettings applicationSettings17 = SvnApplicationSettings.getInstance(); myCommandLineClient.setText(applicationSettings17.getCommandLinePath()); - myLocalesList.setSelectedItem(applicationSettings17.getExecutableLocale()); if (SvnConfiguration.SSLProtocols.sslv3.equals(configuration.getSslProtocols())) { mySSLv3RadioButton.setSelected(true); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java index 97ee5f9c5f19..e892d049f040 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java @@ -18,6 +18,7 @@ package org.jetbrains.idea.svn.commandLine; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.SystemInfo; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -51,7 +52,7 @@ public class CommandRuntime { SvnApplicationSettings settings = SvnApplicationSettings.getInstance(); exePath = settings.getCommandLinePath(); - executableLocale = settings.getExecutableLocale(); + executableLocale = Registry.stringValue("svn.executable.locale"); myModules = ContainerUtil.newArrayList(); myModules.add(new CommandParametersResolutionModule(this)); From eed8f1049cd0fa87bd71aad8f275aaee6b4c1fe3 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Mon, 27 Oct 2014 21:35:23 +0300 Subject: [PATCH 03/90] vcs: Improved ExecutableValidator - implemented ability to provide custom Notification (to show to the user) instead of just customizing title and description --- .../execution/ExecutableValidator.java | 51 ++++++++++++------- .../svn/commandLine/SvnExecutableChecker.java | 31 +++++------ 2 files changed, 50 insertions(+), 32 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java b/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java index 023c059d4f8d..3b0b330b86a0 100644 --- a/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java +++ b/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java @@ -51,7 +51,7 @@ public abstract class ExecutableValidator { @NotNull private final NotificationsManager myNotificationManager; @NotNull private final String myNotificationErrorTitle; - @NotNull private String myNotificationErrorDescription; + @NotNull private final String myNotificationErrorDescription; /** * Configures notification and dialog by setting text messages and titles specific to the whoever uses the validator. @@ -76,6 +76,16 @@ public abstract class ExecutableValidator { @NotNull protected abstract String getConfigurableDisplayName(); + @Nullable + protected Notification validate(@NotNull String executable) { + return !isExecutableValid(executable) ? createDefaultNotification() : null; + } + + @NotNull + protected ExecutableNotValidNotification createDefaultNotification() { + return new ExecutableNotValidNotification(); + } + /** * Returns true if the supplied executable is valid. * Default implementation: try to execute the given executable and test if output returned errors. @@ -109,41 +119,37 @@ public abstract class ExecutableValidator { } } - public void setNotificationErrorDescription(@NotNull String notificationErrorDescription) { - myNotificationErrorDescription = notificationErrorDescription; - } - /** * Shows a notification about not configured executable with a link to the Settings to fix it. * Expires the notification if user fixes the path from the opened Settings dialog. * Makes sure that there is always only one notification about the problem in the stack of notifications. */ - private void showExecutableNotConfiguredNotification() { + private void showExecutableNotConfiguredNotification(@NotNull Notification notification) { if (ApplicationManager.getApplication().isUnitTestMode() || ApplicationManager.getApplication().isHeadlessEnvironment()) { return; } LOG.info("Executable is not valid: " + getCurrentExecutable()); - if (myNotificationManager.getNotificationsOfType(ExecutableNotValidNotification.class, myProject).length == 0) { // show only once - new ExecutableNotValidNotification().notify(myProject.isDefault() ? null : myProject); + if (myNotificationManager.getNotificationsOfType(notification.getClass(), myProject).length == 0) { // show only once + notification.notify(myProject.isDefault() ? null : myProject); } } @NotNull - private String prepareDescription() { + private String prepareDescription(@NotNull String description) { String executable = getCurrentExecutable(); if (executable.isEmpty()) { - return String.format("%s%s Fix it.", myNotificationErrorTitle, myNotificationErrorDescription); + return String.format("%s%s Fix it.", myNotificationErrorTitle, description); } else { return String.format("%s: %s
%s Fix it.", - myNotificationErrorTitle, executable, myNotificationErrorDescription); + myNotificationErrorTitle, executable, description); } } protected void showSettingsAndExpireIfFixed(@NotNull Notification notification) { showSettings(); - if (isExecutableValid(getCurrentExecutable())) { + if (validate(getCurrentExecutable()) == null) { notification.expire(); } } @@ -161,8 +167,10 @@ public abstract class ExecutableValidator { if (myProject.isDisposed()) { return false; } - if (!isExecutableValid(getCurrentExecutable())) { - showExecutableNotConfiguredNotification(); + Notification notification = validate(getCurrentExecutable()); + + if (notification != null) { + showExecutableNotConfiguredNotification(notification); return false; } return true; @@ -209,9 +217,18 @@ public abstract class ExecutableValidator { return isExecutableValid(getCurrentExecutable()); } - private class ExecutableNotValidNotification extends Notification { - private ExecutableNotValidNotification() { - super(ourNotificationGroup.getDisplayId(), "", prepareDescription(), NotificationType.ERROR, new NotificationListener.Adapter() { + public class ExecutableNotValidNotification extends Notification { + + public ExecutableNotValidNotification() { + this(myNotificationErrorDescription); + } + + public ExecutableNotValidNotification(@NotNull String description) { + this(prepareDescription(description), NotificationType.ERROR); + } + + public ExecutableNotValidNotification(@NotNull String preparedDescription, @NotNull NotificationType type) { + super(ourNotificationGroup.getDisplayId(), "", preparedDescription, type, new NotificationListener.Adapter() { @Override protected void hyperlinkActivated(@NotNull Notification notification, @NotNull HyperlinkEvent event) { showSettingsAndExpireIfFixed(notification); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java index d9b952e21cf4..9ce0dda3ada9 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java @@ -64,27 +64,28 @@ public class SvnExecutableChecker extends ExecutableValidator { } @Override - protected boolean isExecutableValid(@NotNull String executable) { - setNotificationErrorDescription(getWrongPathMessage()); + @Nullable + protected Notification validate(@NotNull String executable) { + Notification result = createDefaultNotification(); // Necessary executable path will be taken from settings while command execution final Version version = getConfiguredClientVersion(); - try { - return version != null && validateVersion(version); - } - catch (Throwable e) { - LOG.info(e); - return false; + if (version != null) { + try { + result = validateVersion(version); + } + catch (Throwable e) { + LOG.info(e); + } } + + return result; } - private boolean validateVersion(@NotNull Version version) { - if (!getVcs().isSupportedByCommandLine(WorkingCopyFormat.from(version))) { - setNotificationErrorDescription(getOldExecutableMessage(version)); - return false; - } - - return true; + @Nullable + private Notification validateVersion(@NotNull Version version) { + return !getVcs().isSupportedByCommandLine(WorkingCopyFormat.from(version)) ? new ExecutableNotValidNotification( + getOldExecutableMessage(version)) : null; } @Nullable From 004eae148d683c950eb9c8fb47207dba2979416e Mon Sep 17 00:00:00 2001 From: Oleg Sukhodolsky Date: Tue, 28 Oct 2014 12:53:55 +0300 Subject: [PATCH 04/90] RUBY-15889: restoring workarounds for merge/diff/line commands to make "launcher ." work on Mac again --- platform/platform-resources/src/launcher.py | 29 ++++++++++++++------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/platform/platform-resources/src/launcher.py b/platform/platform-resources/src/launcher.py index 57ecceda01e1..e60cfb3b0f8f 100644 --- a/platform/platform-resources/src/launcher.py +++ b/platform/platform-resources/src/launcher.py @@ -22,16 +22,27 @@ for i, arg in enumerate(sys.argv[1:]): ' {0} diff ' + ' {0} merge [base] ').format(sys.argv[0])) exit(0) - elif ':' in arg: - file_path, line_number = arg.rsplit(':', 1) - if line_number.isdigit(): - args.append('-l') - args.append(line_number) - args.append(file_path) - else: - args.append(arg) - else: + elif arg == 'diff' and i == 0: args.append(arg) + elif arg == 'merge' and i == 0: + args.append(arg) + elif arg == '-l' or arg == '--line': + args.append(arg) + skip_next = True + elif skip_next: + args.append(arg) + skip_next = False + else: + if ':' in arg: + file_path, line_number = arg.rsplit(':', 1) + if line_number.isdigit(): + args.append('-l') + args.append(line_number) + args.append(os.path.abspath(file_path)) + else: + args.append(os.path.abspath(arg)) + else: + args.append(os.path.abspath(arg)) def launch_with_port(port): From 357093ebb861735a64dbc560bcc903d03b5ff6a0 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Tue, 28 Oct 2014 11:10:45 +0100 Subject: [PATCH 05/90] Platform: welcome wizard featured plugins footer corrected --- .../ide/customize/CustomizeFeaturedPluginsStepPanel.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeFeaturedPluginsStepPanel.java b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeFeaturedPluginsStepPanel.java index 61b3ac4ab20c..5800120dd4ce 100644 --- a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeFeaturedPluginsStepPanel.java +++ b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeFeaturedPluginsStepPanel.java @@ -20,7 +20,6 @@ import com.intellij.icons.AllIcons; import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.PluginManagerCore; import com.intellij.ide.plugins.PluginNode; -import com.intellij.openapi.options.OptionsBundle; import com.intellij.openapi.progress.util.AbstractProgressIndicatorExBase; import com.intellij.openapi.ui.VerticalFlowLayout; import com.intellij.openapi.updateSettings.impl.PluginDownloader; @@ -262,7 +261,6 @@ public class CustomizeFeaturedPluginsStepPanel extends AbstractCustomizeWizardSt public String getHTMLFooter() { return "New plugins can also be downloaded in " + CommonBundle.settingsTitle() - + " | " + OptionsBundle.message("configurable.group.appearance.settings.display.name") + " | " + "Plugins"; } From 8a39e28b81fc31fa6df2670390d188c1bb3b17ef Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Tue, 28 Oct 2014 13:10:56 +0300 Subject: [PATCH 06/90] Show gradient for scroll pane without border in the Settings dialog --- .../options/newEditor/ConfigurableEditor.java | 4 +- .../options/newEditor/OptionsEditor.java | 7 +- .../options/newEditor/SettingsTreeView.java | 67 ++++------ .../ui/components/GradientViewport.java | 126 ++++++++++++++++++ 4 files changed, 159 insertions(+), 45 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/ui/components/GradientViewport.java diff --git a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/ConfigurableEditor.java b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/ConfigurableEditor.java index 6aa4f51611e5..c834799ea6b7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/ConfigurableEditor.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/ConfigurableEditor.java @@ -34,6 +34,7 @@ import com.intellij.openapi.util.ActionCallback; import com.intellij.ui.JBColor; import com.intellij.ui.RelativeFont; import com.intellij.ui.ScrollPaneFactory; +import com.intellij.ui.components.GradientViewport; import com.intellij.ui.components.labels.LinkLabel; import com.intellij.util.ui.update.MergingUpdateQueue; import com.intellij.util.ui.update.Update; @@ -269,7 +270,8 @@ class ConfigurableEditor extends AbstractEditor implements AnActionListener, AWT content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); } if (ConfigurableWrapper.cast(Configurable.NoScroll.class, configurable) == null) { - JScrollPane scroll = ScrollPaneFactory.createScrollPane(content, true); + JScrollPane scroll = ScrollPaneFactory.createScrollPane(null, true); + scroll.setViewport(new GradientViewport(content, 5, 0, 0, 0, true)); scroll.getVerticalScrollBar().setUnitIncrement(10); content = scroll; } diff --git a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsEditor.java b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsEditor.java index 7e15a693312f..69617643a14c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsEditor.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsEditor.java @@ -39,6 +39,7 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.ui.LightColors; import com.intellij.ui.OnePixelSplitter; import com.intellij.ui.ScrollPaneFactory; +import com.intellij.ui.components.GradientViewport; import com.intellij.ui.components.labels.LinkLabel; import com.intellij.ui.components.panels.NonOpaquePanel; import com.intellij.ui.components.panels.Wrapper; @@ -712,11 +713,9 @@ public class OptionsEditor extends JPanel implements DataProvider, Place.Navigat if (c != null) { if (scrollable) { - JScrollPane scroll = ScrollPaneFactory.createScrollPane(c); - scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); - scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); + JScrollPane scroll = ScrollPaneFactory.createScrollPane(null, true); + scroll.setViewport(new GradientViewport(c, 5, 5, 5, 5, false)); scroll.getVerticalScrollBar().setUnitIncrement(10); - scroll.setBorder(null); add(scroll, BorderLayout.CENTER); } else { diff --git a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsTreeView.java b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsTreeView.java index 1761196eec36..2d3db611ae91 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsTreeView.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsTreeView.java @@ -25,6 +25,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.Disposer; import com.intellij.ui.*; +import com.intellij.ui.components.GradientViewport; import com.intellij.ui.treeStructure.CachingSimpleNode; import com.intellij.ui.treeStructure.SimpleNode; import com.intellij.ui.treeStructure.SimpleTree; @@ -79,7 +80,6 @@ final class SettingsTreeView extends JComponent implements Disposable, OptionsEd private final SettingsFilter myFilter; private final MyRoot myRoot; private final JScrollPane myScroller; - private JLabel mySeparator; private final IdentityHashMap myConfigurableToNodeMap = new IdentityHashMap(); private final IdentityHashMap myConfigurableToWrapperMap = new IdentityHashMap(); @@ -107,18 +107,38 @@ final class SettingsTreeView extends JComponent implements Disposable, OptionsEd myTree.setExpandableItemsEnabled(false); RelativeFont.BOLD.install(myTree); - myScroller = ScrollPaneFactory.createScrollPane(myTree, true); + myScroller = ScrollPaneFactory.createScrollPane(null, true); + myScroller.setViewport(new GradientViewport(myTree, 5, 0, 0, 0, true) { + private JLabel myHeader; + + @Override + protected Component getHeader() { + if (0 == myTree.getY()) { + return null; // separator is not needed without scrolling + } + if (myHeader == null) { + myHeader = new JLabel(); + myHeader.setForeground(FOREGROUND); + myHeader.setIconTextGap(ICON_GAP); + myHeader.setBorder(BorderFactory.createEmptyBorder(1, 10 + getLeftMargin(0), 0, 0)); + } + myHeader.setFont(myTree.getFont()); + myHeader.setIcon(myTree.getEmptyHandle()); + int height = myHeader.getPreferredSize().height; + String group = findGroupNameAt(0, height + 3); + if (group == null || !group.equals(findGroupNameAt(0, 0))) { + return null; // do not show separator over another group + } + myHeader.setText(group); + return myHeader; + } + }); myScroller.getVerticalScrollBar().setUI(ButtonlessScrollBarUI.createTransparent()); myScroller.setBackground(BACKGROUND); myScroller.getViewport().setBackground(BACKGROUND); myScroller.getVerticalScrollBar().setBackground(BACKGROUND); add(myScroller); - mySeparator = new JLabel(); - mySeparator.setForeground(FOREGROUND); - mySeparator.setIconTextGap(ICON_GAP); - mySeparator.setBorder(BorderFactory.createEmptyBorder(1, 10 + getLeftMargin(0), 0, 0)); - myTree.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { @@ -271,39 +291,6 @@ final class SettingsTreeView extends JComponent implements Disposable, OptionsEd myScroller.setBounds(0, 0, getWidth(), getHeight()); } - @Override - public void paint(Graphics g) { - super.paint(g); - - if (0 == myTree.getY()) { - return; // separator is not needed without scrolling - } - mySeparator.setFont(myTree.getFont()); - mySeparator.setIcon(myTree.getEmptyHandle()); - int height = mySeparator.getPreferredSize().height; - String group = findGroupNameAt(0, height + 3); - if (group != null && group.equals(findGroupNameAt(0, 0))) { - mySeparator.setText(group); - - Rectangle bounds = myScroller.getViewport().getBounds(); - if (bounds.height > height) { - bounds.height = height; - } - g.setColor(myTree.getBackground()); - g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height); - if (g instanceof Graphics2D) { - int h = 6; // gradient height - int y = bounds.y + bounds.height; - ((Graphics2D)g).setPaint(UIUtil.getGradientPaint( - 0, y, g.getColor(), - 0, y + h, ColorUtil.toAlpha(g.getColor(), 0))); - g.fillRect(bounds.x, y, bounds.width, h); - } - mySeparator.setBounds(bounds); - mySeparator.paint(g); - } - } - void selectFirst() { for (ConfigurableGroup eachGroup : myRoot.myGroups) { Configurable[] kids = eachGroup.getConfigurables(); diff --git a/platform/platform-impl/src/com/intellij/ui/components/GradientViewport.java b/platform/platform-impl/src/com/intellij/ui/components/GradientViewport.java new file mode 100644 index 000000000000..bf3ba32c9cb9 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ui/components/GradientViewport.java @@ -0,0 +1,126 @@ +/* + * 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.ui.components; + +import com.intellij.openapi.util.registry.Registry; +import com.intellij.ui.ColorUtil; + +import javax.swing.*; +import java.awt.*; + +/** + * @author Sergey.Malenkov + */ +public class GradientViewport extends JViewport { + private final Insets myInsets; + private final boolean myAlways; + + public GradientViewport(Component view, int top, int left, int bottom, int right, boolean forScrollBars) { + myInsets = new Insets(top, left, bottom, right); + myAlways = forScrollBars; + setView(view); + } + + protected Component getHeader() { + return null; + } + + @Override + public void paint(Graphics g) { + super.paint(g); + g = g.create(); + try { + Color background = getBackground(); + Component header = getHeader(); + if (header != null) { + header.setBounds(0, 0, getWidth(), header.getPreferredSize().height); + if (background != null) { + g.setColor(background); + g.fillRect(header.getX(), header.getY(), header.getWidth(), header.getHeight()); + } + } + if (g instanceof Graphics2D && background != null && !Registry.is("ui.no.bangs.and.whistles")) { + paintGradient((Graphics2D)g, background, 0, header == null ? 0 : header.getHeight()); + } + if (header != null) { + header.paint(g); + } + } + finally { + g.dispose(); + } + } + + private void paintGradient(Graphics2D g2d, Color background, int x1, int y1) { + Component view = getView(); + if (background != null && view != null) { + int x2 = x1, x3 = getWidth() - x2, x4 = x3; + int y2 = y1, y3 = getHeight() - y2, y4 = y3; + + if (myInsets.left > 0 && view.getX() < 0) { + x2 += myInsets.left; + } + if (myInsets.top > 0 && view.getY() < 0) { + y2 += myInsets.top; + } + if (myInsets.right > 0 && view.getX() > getWidth() - view.getWidth()) { + x3 -= myInsets.right; + } + if (myInsets.bottom > 0 && view.getY() > getHeight() - view.getHeight()) { + y3 -= myInsets.bottom; + } + Component parent = myAlways ? null : getParent(); + if (parent instanceof JScrollPane) { + JScrollPane pane = (JScrollPane)parent; + JScrollBar vBar = pane.getVerticalScrollBar(); + if (vBar != null && vBar.isVisible()) { + if (vBar.getX() < getX()) { + x2 = x1; + } + else { + x3 = x4; + } + } + JScrollBar hBar = pane.getHorizontalScrollBar(); + if (hBar != null && hBar.isVisible()) { + if (hBar.getY() < getY()) { + y2 = y1; + } + else { + y3 = y4; + } + } + } + Color transparent = ColorUtil.toAlpha(background, 0); + if (x1 != x2) { + g2d.setPaint(new GradientPaint(x1, y1, background, x2, y1, transparent)); + g2d.fillPolygon(new int[]{x1, x2, x2, x1}, new int[]{y1, y2, y3, y4}, 4); + } + if (x3 != x4) { + g2d.setPaint(new GradientPaint(x3, y1, transparent, x4, y1, background)); + g2d.fillPolygon(new int[]{x4, x3, x3, x4}, new int[]{y1, y2, y3, y4}, 4); + } + if (y1 != y2) { + g2d.setPaint(new GradientPaint(x1, y1, background, x1, y2, transparent)); + g2d.fillPolygon(new int[]{x1, x2, x3, x4}, new int[]{y1, y2, y2, y1}, 4); + } + if (y3 != y4) { + g2d.setPaint(new GradientPaint(x1, y3, transparent, x1, y4, background)); + g2d.fillPolygon(new int[]{x1, x2, x3, x4}, new int[]{y4, y3, y3, y4}, 4); + } + } + } +} From 89490d0c58a210e329183797bbdf07b6071a61e0 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Tue, 28 Oct 2014 13:11:50 +0300 Subject: [PATCH 07/90] Use empty border for the viewport too --- platform/platform-api/src/com/intellij/ui/ScrollPaneFactory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/platform-api/src/com/intellij/ui/ScrollPaneFactory.java b/platform/platform-api/src/com/intellij/ui/ScrollPaneFactory.java index 21c400d0ac0b..a5a17ff09270 100644 --- a/platform/platform-api/src/com/intellij/ui/ScrollPaneFactory.java +++ b/platform/platform-api/src/com/intellij/ui/ScrollPaneFactory.java @@ -58,6 +58,7 @@ public class ScrollPaneFactory implements ScrollPaneConstants { JBScrollPane scrollPane = new JBScrollPane(view); if (withoutBorder) { scrollPane.setBorder(IdeBorderFactory.createEmptyBorder()); // set empty border, because setting null doesn't always take effect + scrollPane.setViewportBorder(IdeBorderFactory.createEmptyBorder()); } return scrollPane; } From 78483c40dc50f105ba4b25b0e48efd744bfa3716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Tue, 28 Oct 2014 11:16:50 +0100 Subject: [PATCH 08/90] run icons.gant --- .../src/general/searchEverywhereGear.png | Bin 14657 -> 216 bytes .../src/general/searchEverywhereGear@2x.png | Bin 14747 -> 305 bytes .../general/searchEverywhereGear@2x_dark.png | Bin 14747 -> 305 bytes .../src/general/searchEverywhereGear_dark.png | Bin 14657 -> 215 bytes .../util/src/com/intellij/icons/AllIcons.java | 2 +- plugins/tasks/tasks-core/src/icons/clock.png | Bin 633 -> 473 bytes .../tasks/tasks-core/src/icons/clock@2x.png | Bin 1462 -> 1241 bytes 7 files changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/icons/src/general/searchEverywhereGear.png b/platform/icons/src/general/searchEverywhereGear.png index 8500a59800e70eb9991c712b80713712508038f9..f220111a8812c9f4c90369c89a6a2a3bbdf3e27b 100644 GIT binary patch delta 188 zcmV;t07L)5a@YZoB!8btL_t(|+QpMW4uc>NMLB__F?Gq!%OUhYEo?Xdi*}(I$K*Ge zpd-e%>EdmM;X(d@AtLh$=4*nK(iQ|(Yns3@J#%FmA!tzR(W43mYzRyif{YqLq6(H% zqS#mx(4z`2%oEKM`ML6N{LeN?xn8clv(4Rc&C$CT?cVO>vRty8 z+uby|6QNd1EBGK5L`1McA5^pmf(Ra3q*YOT(1Q36Uu+-R7eVo%4_aq;bIC8cq+_Lz z6G--VGvDuTW!L_)TGAm%k-z}GD%Rzj>6T;CBv5MY2M2#lh|z*c+QhJ z3u%7H9gv&JO>)Dgg}G=j8c;MYfB2vhMn9D)?n$%fSt-2efky^XM)WE(b^@OF9Lry6HjXV209imH`HA9W+ zHYv>|P_m?Oy<_YMUTkk&?I`Kqaa2((8@rn=&9CmZ=K0k;o?MT&X=O!q53-Ev?ggx+ zgtpe!w3^O_P5-|O=;sIa-ec5?*tp$>@>6-L-brk;;M5cg56zRBplowLVY{OTz9jTtT~A}C8Ps4>GuMFa&57oj3(}y* z3>Os<6fj(n1~q25sED9|;es@%F~dbg1O*Hiq(O}tE-E4@V7MR+YJ6K<{jC@NutDDP ztC83Ft`594O$bmBRLZr&o->j+gvgl-%|NPZQe9p=kVT|PjxZ;oY$ z^7WrCo!z_jGjUt?nUgacPle)NoZh(MG`i)YhR&|+IkUO=?6;9u2J^q&bNu4; z<;^dhANh6Qho?{c@u9Z=(6yTrsPD`pD-R@|_+V4``~55LK3~6Z>Z91_i(l{DJG6EA p#=33SrgvQbd-|WB&6WGmske8Qu>aV}e*p_% diff --git a/platform/icons/src/general/searchEverywhereGear@2x.png b/platform/icons/src/general/searchEverywhereGear@2x.png index bbc8c4eaf04be55ac2aa915fa724e82850a8835c..6cb1fd49d8d1e969b220a73688d95461ef11e585 100644 GIT binary patch delta 278 zcmV+x0qOpmbFl)DB!BoxL_t(|+U=K74uc>JhI!Z?+_~J2fEO?xLD(JUA=wKj*qa%v zNtbK{5^R}h=EMI|Y5QplRNYEyi30aO8iYAJwcX@H-Xpm-CmY8!G7 zq8s-hk{OO-Nd?Gx8A%F&&UhUwY6-59f#e)Weu)eun%jihzfu!Nvc{i=HanCq3$Xtg c{T;vyCnAk&gb$L_Z~y=R07*qoM6N<$f(oW{*#H0l literal 14747 zcmeI3U5pb|6vywP0V!Zq3=(wXFe^c$?acIpwv%be(k^s^U7OvmEHP1Lr?=h7ww-Zi zO1t%C#b^)%2|~oIChmhVN>HNFgbxEN2@h)Efd_&-@MIJWMnib;E9#wTx4rGQTroV} zCheTP_kYg0^E>C>otJq%HMC`gYmEy4uwpO~A4XTk{@$|~{hHP4O>|kRC$^gaEL&-R zd%(=Qs{shDQPX4ASn_F6(Fz_pqm4sPrJy4<0Mf>aE-RDJV#Z-kEk@X1PM&5NH4|aC z1(JMHkHHBwQ8nO5bttV=CzWu9-57OA6%hp}KucySg?!NzD-qU-Dpa32s>d}y2x?ma@kY%c{C%(3E^;<qZK2&i9=H{ zRNYdwB4fvu$F-6bVOcv-<5Rz{g5F3}H0$gTMXn<2oZ#WPPEHx6;iH#~ytA~7!ofT& zz@lX$KcS)x6;???kzRjEKW-#d#3B!VMXoYX3x~zoK~n+NJ952#tbN1nvvGDe6-eOsdwX2(@ZU%yJ*@98jihj4iyS@Ij;1l_vDEOY_QBU$%keaeBMpDbD z*{KCF{HT{je@hHZ*&YLJos4YB|0xQt#o}ZXF{>E`*@~(KIR`ntn3K5XAf{|Ilo-?U znt_%Dqdtl2G>myUO(qT&O-n8+a4;T410Ge)h)On~z^r%N9ms|QZhycZa)*Kn?+*Hd zKE)ptvc7EAftXCAYFy_S8-Xvjj?PcyRp&U;Wy6H_W{a@%yRC74HI66S$Jw-^tk?%xRI&F0%t&0z zXmeQ&&$^rXe+yWPkGXfxQJ#RsTWzRXC`Z*jh^b|*vTVTq9O?)9tR? zZ|#atx4SkyM~kWz_13es4P##Rd0RUXM$n@HjBW@7d;y7TA8z+ZsTG(Xi>qksns!6_ zP$tKxeWIh|_HK^YMBTAgD(s)QQ_0#WdPG1^CtTz4q_xP6J#dGO<{jPPz<4;C1gAl? zDJ~)+TtIQ*G>A6EMMQ)PC@!1^(WbbFh;RYLh0`F~6c-T@E}*z@8bq7oA|k>C6cCg`-jhc_nd2X4@jFm(xJt_O}SQaXGVKt*9NQu&&N;9 zjUG7;*1fa;2XJZE&zJNOJ-Pg`9}~ZB9cMnhz)E}NyH7C35e6_gFckk}(~e#L0#maJ00000 diff --git a/platform/icons/src/general/searchEverywhereGear@2x_dark.png b/platform/icons/src/general/searchEverywhereGear@2x_dark.png index a3658d816448e254e1111f1c291a46e98d7a9c56..80364b2f759151e34c6216be57a3332fa95c806d 100644 GIT binary patch delta 278 zcmV+x0qOpmbFl)DB!BoxL_t(|+U=K74uc>JhI!Z?+_~J202eSGLD(JU2{@g*!`{qT zO}b>PX-Rs0E!+E!tdUcgzAvd9x-^swTxZ7eEyNsFnhFmInBF35qx2sej? zH`$%jd;jO0JHK=8?YzwX?#&yUo0c>ogqpiL<2~fcx!(uxC%^XC*bKQmWOi<|5nAw= z`)xqSPAo>KeTmjL;0z=-Ns5v2$*PgWzFfv6YJ?)IbEd2eV~0!PK~0Z(e*NTvhtt%k zXKN@SB+L#xq;-y2xOZ%GpE5SAgjLV#SW_e?kpLO&$XqUy)@>;l_2lD9#CC^y50{rX z!%@##Hz7BW=;k^M3v(e~$g2oqkZTM3#E=+l7gun8K@9LhfENQ^(Ju*MNepqtk0;hd ztcaziq@MVOVmk6y)HCEbro{8vY}S_z_zY{17sKH&FZg-C-%Au;dsKJioL9G(7J|&i ziDO%_G}F-xopa;LNn^x`dOU8T(x-S|8MBl~w~OouMLs8+yyz47T287`@-auObbe{7 z!s9f~VBN8apIFn+95Nik9y02rEKS!nxs|20?%vT-<>FLCa%bwU9p|()%ral0q^FmqCM zYBp)jQP8raar4JmFWyx-Iy;fp^2d=WTQ+t#ThueV+e+tG>3DK|@|#wY755;EDehjt zYJ{&CEibF&S#;C>ZvhMOfqVTN*&(doX+sr4@%?kl5J*p!| zc=yatYn3%9j8>K=zvD@>&MjrcJ<24~24qQc9={mj=Zuvz7xV*eInyI~eVbn(A6|5S zi>`3G+I8EVUEy@KYuU43*PNKYn5}9Uc)90o;Y8>qj|MolG877gB7F65wMVy>!|8#z zMz*f)He`Tg%KKDL)O6fd&k;-%9Sfxb|HSi^ER2#z1oCvkmmW_li(J|R_t+@k(LD|f z!?7fg2GwS`sED9|;es@%Hp4|l1O*Hiq(QYAE-E4@V7MR+s?Bgw5kUdN1!+)ihKq^_ z3K%X(gK9HeR76m~a6uYWo8h7&f&zvM(xBQ57Zni{FkFxZ)n>S;h@gPsf;6Z$!$m~| z1q>IYLA4n!Dk3OgxF8Lx&2Ui>K>@=BX;5v3i;4&e7%oVIYBO9^L{PwRK^jz>;i4jf z0)`9HpxO)<6%iCLT#yFUX1J(`pn&0mG^jSiMMVS!3>Tz9wHYodA}Cu@fQb2trR7hjx6v zfoT8gim&au*)y&43 z-+X%Vr4LVj*MIHBkKX;};WH9K=YN0s?5)hANi?+(HJ>_s-+=WC3aYEn`%6(M+I#NG z#1Ce}rbj0m7NY|b)5h!PF3!L8X5&=+$z3zI|9twrHBC1kKe2t^UbORI>yIsy&m-Z` zBP-XOH2+3Z4eb-s+1sC8KQiy&AF0f;{>+!xdQktoQ^yuepASxc)q5t_a{9*N=lHje z&v-7+Kb^cZfBE+Zf)7l#roVXg`1o*=3vV3Xv8ZwX8?A3OZ-3#Z&MW)Ao=UxTd9>ly f>USNMLB`QG`jTSL=IsORPhQf>OwLdliy^5 zjx<{1;%$cELH>XtB69}wH-U3*3j(V(P0%nMQ!#}Q6sUFRQ3X$I2+Sx1BWeVRDp*b# z#Kx3>9#v2>Z!|~7gNWM1JTyUinirw@bo~;+f)(M-ObccarZmlk*zbh+%7wT$#^IMS pHjvb~>Q`V<%RZ#zPx-dr_yM#&qUiM%u3Z2C002ovPDHLkV1lq#Q=b3; literal 14657 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 From b415959843c08f5125ffa8fec568772252c86b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Tue, 28 Oct 2014 11:17:48 +0100 Subject: [PATCH 09/90] IDEA-126386 Update eclipse logo --- platform/icons/src/providers/eclipse.png | Bin 478 -> 428 bytes platform/icons/src/providers/eclipse@2x.png | Bin 1126 -> 751 bytes .../icons/src/providers/eclipse@2x_dark.png | Bin 1091 -> 757 bytes platform/icons/src/providers/eclipse_dark.png | Bin 466 -> 438 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/icons/src/providers/eclipse.png b/platform/icons/src/providers/eclipse.png index ff3f9a87e5e73f91f951d84a1dc6ff5ade4a983f..decb2e41988963e79bd741d8cc76ac31f56b361b 100644 GIT binary patch delta 402 zcmV;D0d4-?1FQp(B!6>BL_t(|+GF_t|33pInBn_mIbif0uBnYRGq2QF z%)C>SIrTk0T$(fORdemEYpwNjE>UDaOa1H%SiP`t_V(ioW^F%#3$I$b_aMj%yLX(J z1~Z@uIS^w*nt%Ui#7@GB(_<$75Ai9-2t-k6Gx8i?HP$SqyQGxaUgS<*$3F%j2WW5u%q#OWB$|aErlW-M;xeYL>pWVE^se{d@mU?%wmiw{`pf zmYPlftBY6vFUnf_KQm$etAy|whFA>%+5CRh;mfo8_WYkc`G4U5X?^?t_qXr--&VKz ze{JcS|HawM{%0l4|DPN+^HEad3;`4adguQG8IZes%5JdDAkElZkd-+9e^TVE|1rVS zDnWXX4fszEMsdNt+3WwL#dZ8oOX&Kak<<;QlVdyn$49pQj|^`7AL3i{-_O0`zn63A z|6uRdU(|QO?SJ{39%n^0|Bno60NV(n!vpHUHV1fC{r7RL`0wFZ^54zA_1smPii0x>_%gmi7@t{d4gv%s37gHSYr@I7-NHo%z@VF~KN{Jm9Ei|x z44rdAQ@jE_i(-K|4Tuwg*bRuKfS7?8OpF7VfH)3_uLJR^hn<>1K#e6pd>)AZ0r7tv z_$Cln0kIe*4p0T+qd@%Q+a&pd5U+xKpr-eDEX9Vu0dW%$vwxH70B0cn2*j_iwdjL_ zbtj1yqvJC`EJ3UToPhWz5PvvXZ)yirc$GrS!8pjP_%V=HA>;s1uzvvJzb|^!e1M8h zP{VQ<4)ra40Hj56IRKR4P5|+LAnpe$m_kjba-)8P~}q~&4la#Td3v#7Up`|(9-uXoEq2Uj_iO=r~}Rd zCAs(RIu&*2)}!UL#J6ug@x?$PV}kbwCVI(sIwvlYbk5(Xa)EcWyheZR@6^JHdG4 z(Vgp79@w{G&7nPTF&r4#40H^#gJ=iP0;4+sPZShWCHP}Qno$cRv?v&eL^yR&WkWlt z1O6_^@v=rQh?2rPDGGj&evF)z(BgrsC~g5N*p93?#HWnxtO(K<;!}=Z7l4XlMv^L{ zFyG4mX@4X-0%Uo(Ulmc65qfpp2UIW#T_Y$Yk|Mf@vOGDm`+q2!&!MS*7rq9G8Zix$ zaKGyR31RL3)1v!PECq#7VtB{@2>%*<4H6Mzn`G~xO|pylYPDdm5^%@_dzTVwlHCW= z%0P#b)+oK+s^aF9Ev%0000< KMNUMnLSTXj?@~Pg delta 1106 zcmV-Y1g-n;1?C8lBYy-fNklho#{-|W?Ew| z8c_ieK>=?NjK)h4P!v%?L_@?VN@$nrb*27Hq(c^wDF;xUZxM7(Kd;u zvby(%lQ~jhqM2!Z@ZmS-aKN+H`o4X>eM|z7^na4HXJFSDSbrb;f+0zFG43rsh-Kd| zp|21AKKYev(Yv^OrDJx@**F;3C>)z|+rRE{j`PG6lhR$Qwb^4xlz{Qi|K?!oT8 zZ38R8rMI6<+`oRecYedF_rqcgz*;{6Tf+oeOhK6S z{Ox|iOD|-ATz^Y_5?ERt=?J0KJOxM7G}@bI$Z>{!<_wT3Kv(t&Dm25;s`^nZzl6fv zK3}JO`n4S!SR21{=5b(Y!)u+wIco@gowwjVzkn{s4LEJHXtPYSN;Dcih3V`V^k=T2 zy7Vf_ONO8==qCm|P-MGjs!NAor7hf+0dg){58Mj}oPV<{anHG%5d+QzxOfI=8~$aW zIAWkkb`eTRFY-j)u4pUvJ(mG;e1nMp`Tg+cu#tpRn9@t2MqF)k@eOEwD5D0VZ77iT z5d%G8MRw17+c9wE>GYTISc0%OPO-AnQ_9P%1*)89 z1|S#qyu;~iWdQ#raVzkf@3Z^gI)`A;bf8#ahg#);wy=E@ngRz(ly(&6*`ShHktb<} zOl*N9vjJj(37M(25F9fgHCcz_ADu z<14fRC8PqmqDBVouRJ>fJ*U@LYSQy;K|Ms#62=_-XWp zn}0q9R<#`&CydBStAjY*#1KVcy(ZV`YR@=sj7hHJ^*xgQrBs9uop4l?e#aM<3%i+kj(?ylR+tic?%j}WM*cgi5BlbyBsZr*98{1( zcR4DYFLu)r3t3ioH1(Fr!-RLYyB&)O;eO)?OGlw%+&L#I%ZijcPRTjW@92eud@g%5 zdV9lGI>>}LXqmY_bHWM4CkZdV&@0*F(c3FsRlZH43Chi9fUti@uVj4Knji~v-b)?~ zt0nG4f*d~+^0&IzjtuaP{NY=y4Osl&wQ2_+X{Eh%ajivJCX5o~gae80v-h9To&i4p Y09@mYpblZ}$N&HU07*qoM6N<$f)Y#{AOHXW diff --git a/platform/icons/src/providers/eclipse@2x_dark.png b/platform/icons/src/providers/eclipse@2x_dark.png index e46e0e907d6fe9adf4a482ce273a37798c794716..69c2860063de0952c63d30019b34201dae0cbcd9 100644 GIT binary patch delta 734 zcmV<40wMjw2=xV!BYy(CNkl)AZ0r7tv z_$Cln0kIe*4p0T+qd@%Q+hqBIjF_H$pr-eDEX9Vu0dW%$vwxH70B0cn2*j^%b(nyH zbtj1yqvJC`EJ3UToPhWz5Pvw|VrvIfc$GrS!8k3Z|1pqOA>;s1uzvvJzpwf>hFol|y!*EX0qG!wD|Y@wF_TU{1mLrdSoaCzQrcVq{2LLG1x zD9L^F;FYKc_g*ZgCBA?6g)g!L4nrLPN_aM_mmQq5bIY0Cw8UFCo}7a0fEQ2)fJ(b# z=)qN;xAuQ+{(6dWYIHv$HzZH~itK=&PzS^SB`uE}xPP({7!6xs_|V=<+xG9exD$l; z?Yyva$ELIUc5OYk2PTFKBb$MaL3R-B09s&l2jGcxo%w-e>KS)1%&Z;PwvVI z8A+;)vVY>Il3X5uEYD7uMpR{lULE%V6-+|cm=QPWe|gq&qAah-UhzK@&F9e6zYAZ3 zM2(mRNp`~Y|D_p=|5xX(L9rARLZz8Y|K}vmz}FxVA+|~O4%#HUh_6;lkC^}tne^C+ zgqmdcfwVHvp`)8EkBB%LH` z5)Vl<5kxegctAvxXgNjXAmFY@Vm*ztW0fFC6crIQw(+WQrju#Ynch@;P*ZukzO~tk z4jMHxtruQAvtfhlec$g}d~2HpAnX4m>%_pZF|g4$!BLfraDS#EOS?Js%W&e%Z$opI z*++@xA$MZk*EXB98RHw)me`+``_s$D#^{LoZdB3dOMJk-|4xQA_}Ygyu;QQoWbK<+ z?}9hB={CmTw9LY7or8zrYE8gyilenT27^9|dv#BsQ-@wQRE4gyzdg-(>x~Ssd!MiQ zW2*sI938fKe1GLwK&NwoU+KMMfK>serb)EuCeTz9fvz$P?VVAdV4r^f$OhI2qVhHW z^yZ*_2Hy6k=<_Y1*ZT~QgzwSiUW8zu=aq1n<7hL?z;bU2#>PoB*N-z3Pf)K4p+*_} zu0=QYF17Gb2H5L!8-r8HuqVzF_jEqnHqap%Sm14Nn15$?7`U$$4d~Qi)RvDzQx>$O zT5;+?2H5pOCjQ4yU(av>66SO*aU&1OfGe{B!@WtruZH62Z;e4< zeWug|iFXS>;Gt)cw`4~PzMO%14+GU@K~%~E!&HSm4K%xx947t|WAmjy0UJw2n~g-N z@06UxyMJ6yd0RYfb7+6SHlcBQ6N2(WG)irSPCq*#S+3umifMW}n@WyHPH4K~e04yvTvug?1F@x8cTBD++U4k$>5O zs~644yCx5uufUJ(11nSkb+LmdlihUi{+6bo*K|)xeXGER z;#BhMtnZXQFRk}ddO}v{TRr|2c+nHI(XYT#X5*=DUbFI@oeuSy?(@`F*pAO(JD!qX zvVY*(Max#-bIu#K(&t~YLtE(=_N#z2h(4x4^ujmE4->s+jL&tE2#1D@UK2q>)tET# z*!SuxM(N-YhfZk#YFPkm>h0#to(6V}V&BHVB!mWWl#)m~G~vh`eI^OhxYZ~g^NFXH zjbsuZKJaPC52OC*>T_WnwQO+`lBi3G)_23_|5EU7D zow&d_eWXXSboicN8#87dOX`)cO-%gE$j!9Ykqo38`MrC*Dr^cbc4&it-K_}F<|tZE pvCQaUWHa8|Z=I9>j7|)s^DlD95`RfE3N8Qu002ovPDHLkV1nSRArSxo diff --git a/platform/icons/src/providers/eclipse_dark.png b/platform/icons/src/providers/eclipse_dark.png index d7ad507ca70a11a5f91c14bebab6fdbd9a5eb0d3..67979cc0a13b148e85123b98274a51badaec321d 100644 GIT binary patch delta 412 zcmV;N0b~Bs1GWQ@B!7KLL_t(|+GF_t|33pInBn_mIbX>EyJSzF$BE|Iu+~!o-I_+6tQi;Xuvj3X?jv zV$+C>(_{O87iG?HK{h}Hh~G}i&FLbf8HTeHCw6SzaT7igYXAs0 zlrLNaGvLD09-XY++s@89xcAcbO{-5G#)r3WJiGts!7E!1?YlG;X26fll|iW!I@ez5 zYg>1xrE>jye7L=4{i}&x>#j}i*>H&>115E^zkt;XYnPokzGmt16S(l!b!QHOyl{B` zy8jt*lQ9BO6dH}4un;auUxcB#I(N!yzaV8U&_xUW=OxenpB6I#mXLlGXU%ZJmXrfPNx3DxY!a@d zoRu&Ml$0%iF2b4@Kv)8ZD?pj4KRd4jDKkyOnVBff&J_UOQ)N4%uh9Ph0000b9 z9QAXYL^8a0Z>%ooifi`l$=5A&s$f}6zO5MIj|N@DKBWjW(|;NYt^Z{}#4TCZ@wL~P z#x|SAhV>jaV+y9ZQ!LEHFsli@Xr%{j6%A^`W5&0M!4!T}4{S->};zsm@I z$1-}_mmm|lb3Z4bA&SDLC>In>o1Qc35T= Date: Tue, 28 Oct 2014 12:52:10 +0300 Subject: [PATCH 10/90] moved to util --- .../openapi/application/AccessToken.java | 16 ---------- .../openapi/application/AccessToken.java | 31 +++++++++++++++++++ 2 files changed, 31 insertions(+), 16 deletions(-) delete mode 100644 platform/core-api/src/com/intellij/openapi/application/AccessToken.java create mode 100644 platform/util/src/com/intellij/openapi/application/AccessToken.java diff --git a/platform/core-api/src/com/intellij/openapi/application/AccessToken.java b/platform/core-api/src/com/intellij/openapi/application/AccessToken.java deleted file mode 100644 index f567c15c51c3..000000000000 --- a/platform/core-api/src/com/intellij/openapi/application/AccessToken.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.intellij.openapi.application; - -public abstract class AccessToken { - protected void acquired() { - } - - protected void released() { - } - - public abstract void finish(); - - public static final AccessToken EMPTY_ACCESS_TOKEN = new AccessToken() { - @Override - public void finish() {} - }; -} diff --git a/platform/util/src/com/intellij/openapi/application/AccessToken.java b/platform/util/src/com/intellij/openapi/application/AccessToken.java new file mode 100644 index 000000000000..7774b4d17db6 --- /dev/null +++ b/platform/util/src/com/intellij/openapi/application/AccessToken.java @@ -0,0 +1,31 @@ +/* + * 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.openapi.application; + +public abstract class AccessToken { + protected void acquired() { + } + + protected void released() { + } + + public abstract void finish(); + + public static final AccessToken EMPTY_ACCESS_TOKEN = new AccessToken() { + @Override + public void finish() {} + }; +} From 75e7c18f13797a3906afd9595c98d46b14982d23 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 28 Oct 2014 13:11:58 +0300 Subject: [PATCH 11/90] IDEA-131887 Memory leak in SmartPsiPointerManagerImpl --- .../SmartPointerManagerImpl.java | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java index aad577c6ca95..42c3da458229 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java @@ -31,24 +31,20 @@ import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.source.tree.MarkersHolderFileViewProvider; import com.intellij.reference.SoftReference; import com.intellij.util.containers.UnsafeWeakList; -import gnu.trove.THashMap; -import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import java.lang.ref.Reference; import java.util.List; -import java.util.Map; -import java.util.Set; public class SmartPointerManagerImpl extends SmartPointerManager { private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.smartPointers.SmartPointerManagerImpl"); private final Project myProject; private final Object lock = new Object(); - private final Map> pointers = new THashMap>(); - private final Set fastenedFiles = new THashSet(); + private static final Key> POINTERS_KEY = Key.create("SMART_POINTERS"); + private static final Key POINTERS_ARE_FASTENED_KEY = Key.create("SMART_POINTERS_ARE_FASTENED"); public SmartPointerManagerImpl(Project project) { myProject = project; @@ -63,7 +59,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager { if (getAndFasten(file)) return; if (pointers.isEmpty()) { - this.pointers.remove(file); + file.putUserData(POINTERS_KEY, null); } else { for (SmartPointerEx pointer : pointers) { @@ -101,7 +97,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager { if (!getAndUnfasten(file)) return; if (pointers.isEmpty()) { - this.pointers.remove(file); + file.putUserData(POINTERS_KEY, null); } else { for (SmartPointerEx pointer : pointers) { @@ -169,6 +165,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager { return null; } } + //noinspection unchecked return cachedPointer; } @@ -189,7 +186,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager { List pointers = getPointers(containingFile); if (pointers == null) { pointers = new UnsafeWeakList(); // we synchronise access anyway - this.pointers.put(containingFile, pointers); + containingFile.putUserData(POINTERS_KEY, pointers); } pointers.add(pointer); @@ -222,8 +219,8 @@ public class SmartPointerManagerImpl extends SmartPointerManager { return false; } - private List getPointers(@NotNull VirtualFile containingFile) { - return pointers.get(containingFile); + private static List getPointers(@NotNull VirtualFile containingFile) { + return containingFile.getUserData(POINTERS_KEY); } @TestOnly @@ -234,14 +231,18 @@ public class SmartPointerManagerImpl extends SmartPointerManager { } } - private boolean getAndFasten(@NotNull VirtualFile file) { - return !fastenedFiles.add(file); + private static boolean getAndFasten(@NotNull VirtualFile file) { + boolean fastened = areBeltsFastened(file); + file.putUserData(POINTERS_ARE_FASTENED_KEY, Boolean.TRUE); + return fastened; } - private boolean getAndUnfasten(@NotNull VirtualFile file) { - return fastenedFiles.remove(file); + private static boolean getAndUnfasten(@NotNull VirtualFile file) { + boolean fastened = areBeltsFastened(file); + file.putUserData(POINTERS_ARE_FASTENED_KEY, null); + return fastened; } - private boolean areBeltsFastened(VirtualFile file) { - return fastenedFiles.contains(file); + private static boolean areBeltsFastened(VirtualFile file) { + return file.getUserData(POINTERS_ARE_FASTENED_KEY) == Boolean.TRUE; } @Override From db6c68001c07c20cb09bb40905bbf91dadd9b6d3 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 28 Oct 2014 13:13:48 +0300 Subject: [PATCH 12/90] data races --- .../UnusedDeclarationPresentation.java | 7 +- .../ex/InspectionRVContentProvider.java | 5 +- .../ex/InspectionRVContentProviderImpl.java | 30 ++++--- .../ui/DefaultInspectionToolPresentation.java | 83 ++++++++----------- .../ui/InspectionToolPresentation.java | 4 +- .../ui/actions/ExportHTMLAction.java | 15 ++-- 6 files changed, 64 insertions(+), 80 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java index cdc8fdd15c7d..76602ca1c660 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -54,7 +54,7 @@ import java.awt.event.KeyEvent; import java.util.*; public class UnusedDeclarationPresentation extends DefaultInspectionToolPresentation { - private Map> myPackageContents = new HashMap>(); + private final Map> myPackageContents = Collections.synchronizedMap(new HashMap>()); private Map> myOldPackageContents = null; @@ -335,7 +335,7 @@ public class UnusedDeclarationPresentation extends DefaultInspectionToolPresenta @Override public void updateContent() { getTool().checkForReachables(getContext()); - myPackageContents = new HashMap>(); + myPackageContents.clear(); getContext().getRefManager().iterate(new RefJavaVisitor() { @Override public void visitElement(@NotNull RefEntity refEntity) { if (!(refEntity instanceof RefJavaElement)) return;//dead code doesn't work with refModule | refPackage @@ -378,6 +378,7 @@ public class UnusedDeclarationPresentation extends DefaultInspectionToolPresenta return false; } + @NotNull @Override public Map> getContent() { return myPackageContents; diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java index ec31a29b7f63..df797ef8115a 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -79,8 +79,7 @@ public abstract class InspectionRVContentProvider { InspectionToolPresentation presentation = context.getPresentation(wrapper); Map> content = presentation.getContent(); Map problems = presentation.getProblemElements(); - Map> contents = content == null ? new HashMap>() : content; - appendToolNodeContent(context, toolNode, parentNode, showStructure, contents, problems, null); + appendToolNodeContent(context, toolNode, parentNode, showStructure, content, problems, null); } public abstract void appendToolNodeContent(@NotNull GlobalInspectionContextImpl context, diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProviderImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProviderImpl.java index 83c4885d9334..28d4861e5348 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProviderImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProviderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -55,23 +55,21 @@ public class InspectionRVContentProviderImpl extends InspectionRVContentProvider final SearchScope searchScope = context.getCurrentScope().toSearchScope(); if (searchScope instanceof LocalSearchScope) { final Map> contents = presentation.getContent(); - if (contents != null) { - final Map problemElements = presentation.getProblemElements(); - for (Set entities : contents.values()) { - for (Iterator iterator = entities.iterator(); iterator.hasNext(); ) { - RefEntity entity = iterator.next(); - if (entity instanceof RefElement) { - final PsiElement element = ((RefElement)entity).getElement(); - if (element != null) { - final TextRange range = element.getTextRange(); - if (range != null && ((LocalSearchScope)searchScope).containsRange(element.getContainingFile(), range)) { - continue; - } + final Map problemElements = presentation.getProblemElements(); + for (Set entities : contents.values()) { + for (Iterator iterator = entities.iterator(); iterator.hasNext(); ) { + RefEntity entity = iterator.next(); + if (entity instanceof RefElement) { + final PsiElement element = ((RefElement)entity).getElement(); + if (element != null) { + final TextRange range = element.getTextRange(); + if (range != null && ((LocalSearchScope)searchScope).containsRange(element.getContainingFile(), range)) { + continue; } } - problemElements.remove(entity); - iterator.remove(); } + problemElements.remove(entity); + iterator.remove(); } } } @@ -106,7 +104,7 @@ public class InspectionRVContentProviderImpl extends InspectionRVContentProvider }; InspectionToolPresentation presentation = context.getPresentation(toolWrapper); final Set moduleProblems = presentation.getModuleProblems(); - if (moduleProblems != null && !moduleProblems.isEmpty()) { + if (!moduleProblems.isEmpty()) { Set entities = contents.get(""); if (entities == null) { entities = new HashSet(); diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/DefaultInspectionToolPresentation.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/DefaultInspectionToolPresentation.java index fe7c3ab22b81..131c8002af70 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/DefaultInspectionToolPresentation.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/DefaultInspectionToolPresentation.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -42,6 +42,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import com.intellij.util.ui.UIUtil; import gnu.trove.THashMap; +import gnu.trove.THashSet; import org.jdom.Element; import org.jdom.IllegalDataException; import org.jetbrains.annotations.NonNls; @@ -63,13 +64,13 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro protected InspectionNode myToolNode; private static final Object lock = new Object(); - private Map myProblemElements; - private Map> myContents = null; - private Set myModulesProblems = null; - private Map myProblemToElements; + private final Map myProblemElements = Collections.synchronizedMap(new THashMap()); + private final Map> myContents = Collections.synchronizedMap(new com.intellij.util.containers.HashMap>()); // keys can be null + private final Set myModulesProblems = Collections.synchronizedSet(new THashSet()); + private final Map myProblemToElements = Collections.synchronizedMap(new THashMap()); private DescriptorComposer myComposer; - private Map> myQuickFixActions; - private Map myIgnoredElements; + private final Map> myQuickFixActions = Collections.synchronizedMap(new com.intellij.util.containers.HashMap>()); + private final Map myIgnoredElements = Collections.synchronizedMap(new com.intellij.util.containers.HashMap()); private Map myOldProblemElements = null; protected static final Logger LOG = Logger.getInstance("#com.intellij.codeInspection.ex.DescriptorProviderInspection"); @@ -223,13 +224,16 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro if (view == null || !(refElement instanceof RefElement)) { return; } - InspectionNode toolNode = myToolNode; - if (toolNode == null) { + final InspectionNode toolNode; + if (myToolNode == null) { final HighlightSeverity currentSeverity = getSeverity((RefElement)refElement); - view.addTool(myToolWrapper, HighlightDisplayLevel.find(currentSeverity), context.getUIOptions().GROUP_BY_SEVERITY); + toolNode = view.addTool(myToolWrapper, HighlightDisplayLevel.find(currentSeverity), context.getUIOptions().GROUP_BY_SEVERITY); } - else if (toolNode.isTooBigForOnlineRefresh()) { - return; + else { + toolNode = myToolNode; + if (toolNode.isTooBigForOnlineRefresh()) { + return; + } } final Map problems = new HashMap(); problems.put(refElement, descriptors); @@ -246,8 +250,8 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro @Override public void run() { if (!isDisposed()) { - view.getProvider().appendToolNodeContent(context, myToolNode, - (InspectionTreeNode)myToolNode.getParent(), context.getUIOptions().SHOW_STRUCTURE, + view.getProvider().appendToolNodeContent(context, toolNode, + (InspectionTreeNode)toolNode.getParent(), context.getUIOptions().SHOW_STRUCTURE, contents, problems, (DefaultTreeModel)view.getTree().getModel()); context.addView(view); } @@ -275,7 +279,7 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro final File file = new File(fileName); final CharArrayWriter writer = new CharArrayWriter(); if (!file.exists()) { - writer.append("<").append(InspectionsBundle.message("inspection.problems")).append(" " + GlobalInspectionContextImpl.LOCAL_TOOL_ATTRIBUTE + "=\"") + writer.append("<").append(InspectionsBundle.message("inspection.problems")).append(" " + GlobalInspectionContextBase.LOCAL_TOOL_ATTRIBUTE + "=\"") .append(Boolean.toString(myToolWrapper instanceof LocalInspectionToolWrapper)).append("\">\n"); } for (Object o : list) { @@ -393,14 +397,14 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro myOldProblemElements = null; synchronized (lock) { - myProblemElements = null; - myProblemToElements = null; - myQuickFixActions = null; - myIgnoredElements = null; + myProblemElements.clear(); + myProblemToElements.clear(); + myQuickFixActions.clear(); + myIgnoredElements.clear(); + myContents.clear(); + myModulesProblems.clear(); } - myContents = null; - myModulesProblems = null; isDisposed = true; } @@ -525,8 +529,8 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro @Override public void updateContent() { - myContents = new com.intellij.util.containers.HashMap>(); - myModulesProblems = new HashSet(); + myContents.clear(); + myModulesProblems.clear(); final Set elements = getProblemElements().keySet(); for (RefEntity element : elements) { if (getContext().getUIOptions().FILTER_RESOLVED_ITEMS && getIgnoredElements().containsKey(element)) continue; @@ -545,6 +549,7 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro } } + @NotNull @Override public Map> getContent() { return myContents; @@ -553,8 +558,7 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro @Override public Map> getOldContent() { if (myOldProblemElements == null) return null; - final com.intellij.util.containers.HashMap> - oldContents = new com.intellij.util.containers.HashMap>(); + final Map> oldContents = new com.intellij.util.containers.HashMap>(); final Set elements = myOldProblemElements.keySet(); for (RefEntity element : elements) { String groupName = element instanceof RefElement ? element.getRefManager().getGroupName((RefElement)element) : element.getName(); @@ -573,6 +577,7 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro return oldContents; } + @NotNull @Override public Set getModuleProblems() { return myModulesProblems; @@ -719,12 +724,7 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro @Override @NotNull public Map getProblemElements() { - synchronized (lock) { - if (myProblemElements == null) { - myProblemElements = Collections.synchronizedMap(new THashMap()); - } - return myProblemElements; - } + return myProblemElements; } @Override @@ -735,32 +735,17 @@ public class DefaultInspectionToolPresentation implements ProblemDescriptionsPro @NotNull private Map getProblemToElements() { - synchronized (lock) { - if (myProblemToElements == null) { - myProblemToElements = Collections.synchronizedMap(new THashMap()); - } - return myProblemToElements; - } + return myProblemToElements; } @NotNull private Map> getQuickFixActions() { - synchronized (lock) { - if (myQuickFixActions == null) { - myQuickFixActions = Collections.synchronizedMap(new com.intellij.util.containers.HashMap>()); - } - return myQuickFixActions; - } + return myQuickFixActions; } @NotNull private Map getIgnoredElements() { - synchronized (lock) { - if (myIgnoredElements == null) { - myIgnoredElements = Collections.synchronizedMap(new com.intellij.util.containers.HashMap()); - } - return myIgnoredElements; - } + return myIgnoredElements; } @NotNull diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionToolPresentation.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionToolPresentation.java index 87263fec882c..c7f632575815 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionToolPresentation.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionToolPresentation.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -45,6 +45,7 @@ public interface InspectionToolPresentation extends ProblemDescriptionsProcessor boolean hasReportedProblems(); + @NotNull Map> getContent(); Map> getOldContent(); @@ -63,6 +64,7 @@ public interface InspectionToolPresentation extends ProblemDescriptionsProcessor @NotNull HTMLComposerImpl getComposer(); void exportResults(@NotNull final Element parentNode, @NotNull RefEntity refEntity); + @NotNull Set getModuleProblems(); @Nullable QuickFixAction[] getQuickFixes(@NotNull final RefEntity[] refElements); diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/actions/ExportHTMLAction.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/actions/ExportHTMLAction.java index 4604de37b915..b633b8de98dc 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/actions/ExportHTMLAction.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/actions/ExportHTMLAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -19,7 +19,10 @@ package com.intellij.codeInspection.ui.actions; import com.intellij.codeEditor.printing.ExportToHTMLSettings; import com.intellij.codeInspection.InspectionApplication; import com.intellij.codeInspection.InspectionsBundle; -import com.intellij.codeInspection.ex.*; +import com.intellij.codeInspection.ex.GlobalInspectionContextImpl; +import com.intellij.codeInspection.ex.InspectionToolWrapper; +import com.intellij.codeInspection.ex.ScopeToolState; +import com.intellij.codeInspection.ex.Tools; import com.intellij.codeInspection.export.ExportToHTMLDialog; import com.intellij.codeInspection.export.HTMLExportFrameMaker; import com.intellij.codeInspection.export.HTMLExportUtil; @@ -247,9 +250,7 @@ public class ExportHTMLAction extends AnAction implements DumbAware { for (InspectionToolWrapper toolWrapper : toolWrappers) { InspectionToolPresentation presentation = myView.getGlobalInspectionContext().getPresentation(toolWrapper); final Map> toolContent = presentation.getContent(); - if (toolContent != null) { - content.putAll(toolContent); - } + content.putAll(toolContent); } final Set defaultPackageEntities = content.remove(null); @@ -285,9 +286,7 @@ public class ExportHTMLAction extends AnAction implements DumbAware { for (InspectionToolWrapper toolWrapper : toolWrappers) { InspectionToolPresentation presentation = myView.getGlobalInspectionContext().getPresentation(toolWrapper); final Set problems = presentation.getModuleProblems(); - if (problems != null) { - modules.addAll(problems); - } + modules.addAll(problems); } final List sortedModules = new ArrayList(modules); From 1d508d78ee3b88413c598218d337f43453cde34b Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 28 Oct 2014 13:15:46 +0300 Subject: [PATCH 13/90] HeavyProcessLatch API slightly changed to handle overlapping processes correctly --- .../ProjectStructureConfigurable.java | 5 ++-- .../src/com/intellij/dvcs/DvcsUtil.java | 10 ++++--- .../ide/startup/impl/StartupManagerImpl.java | 5 ++-- .../application/impl/ApplicationImpl.java | 4 +-- .../components/impl/ServiceManagerImpl.java | 5 ++-- .../openapi/project/DumbServiceImpl.java | 9 +++--- .../openapi/vfs/newvfs/RefreshQueueImpl.java | 5 ++-- .../util/io/storage/HeavyProcessLatch.java | 22 ++++++++++---- .../src/git4idea/actions/GitMergeAction.java | 5 ++-- .../src/git4idea/actions/GitRebaseAbort.java | 7 +++-- .../git4idea/actions/GitRebaseActionBase.java | 7 +++-- .../src/git4idea/actions/GitResetHead.java | 7 +++-- .../src/git4idea/actions/GitStash.java | 7 +++-- .../git4idea/branch/GitCheckoutOperation.java | 7 +++-- .../git4idea/branch/GitMergeOperation.java | 7 +++-- .../git4idea/cherrypick/GitCherryPicker.java | 7 +++-- .../src/git4idea/rebase/GitRebaser.java | 11 +++---- .../src/git4idea/reset/GitResetOperation.java | 5 ++-- .../rollback/GitRollbackEnvironment.java | 7 +++-- .../src/git4idea/ui/GitUnstashDialog.java | 7 +++-- .../src/git4idea/update/GitUpdateProcess.java | 7 +++-- .../plugins/github/GithubRebaseAction.java | 29 +++++++++++-------- .../zmlx/hg4idea/command/HgMergeCommand.java | 5 ++-- .../zmlx/hg4idea/command/HgRebaseCommand.java | 5 ++-- .../zmlx/hg4idea/command/HgUpdateCommand.java | 5 ++-- .../provider/HgRollbackEnvironment.java | 9 +++--- 26 files changed, 124 insertions(+), 85 deletions(-) diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java index d72269f41733..21626c32a7cf 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java @@ -19,6 +19,7 @@ import com.intellij.compiler.server.BuildManager; import com.intellij.facet.Facet; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; @@ -352,7 +353,7 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se public void reset() { // need this to ensure VFS operations will not block because of storage flushing // and other maintenance IO tasks run in background - HeavyProcessLatch.INSTANCE.processStarted("Resetting Project Structure"); + AccessToken token = HeavyProcessLatch.INSTANCE.processStarted("Resetting Project Structure"); try { myWasUiDisposed = false; @@ -387,7 +388,7 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se } } finally { - HeavyProcessLatch.INSTANCE.processFinished(); + token.finish(); } } diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/DvcsUtil.java b/platform/dvcs-impl/src/com/intellij/dvcs/DvcsUtil.java index bd30a10362b3..14643c274702 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/DvcsUtil.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/DvcsUtil.java @@ -18,6 +18,7 @@ package com.intellij.dvcs; import com.intellij.dvcs.repo.Repository; import com.intellij.dvcs.repo.RepositoryManager; import com.intellij.ide.file.BatchFileChangeListener; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; @@ -189,13 +190,14 @@ public class DvcsUtil { return DateFormatUtil.formatPrettyDateTime(commit.getTimestamp()) + " "; } - public static void workingTreeChangeStarted(@NotNull Project project) { - HeavyProcessLatch.INSTANCE.processStarted("Changing DVCS working tree"); + @NotNull + public static AccessToken workingTreeChangeStarted(@NotNull Project project) { ApplicationManager.getApplication().getMessageBus().syncPublisher(BatchFileChangeListener.TOPIC).batchChangeStarted(project); + return HeavyProcessLatch.INSTANCE.processStarted("Changing DVCS working tree"); } - public static void workingTreeChangeFinished(@NotNull Project project) { - HeavyProcessLatch.INSTANCE.processFinished(); + public static void workingTreeChangeFinished(@NotNull Project project, @NotNull AccessToken token) { + token.finish(); ApplicationManager.getApplication().getMessageBus().syncPublisher(BatchFileChangeListener.TOPIC).batchChangeCompleted(project); } diff --git a/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.java b/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.java index b4128553a480..b3b23dc86a56 100644 --- a/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/startup/impl/StartupManagerImpl.java @@ -17,6 +17,7 @@ package com.intellij.ide.startup.impl; import com.intellij.ide.caches.CacheUpdater; import com.intellij.ide.startup.StartupManagerEx; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.application.ApplicationManager; @@ -113,7 +114,7 @@ public class StartupManagerImpl extends StartupManagerEx { @Override @SuppressWarnings("SynchronizeOnThis") public void run() { - HeavyProcessLatch.INSTANCE.processStarted("Running Startup Activities"); + AccessToken token = HeavyProcessLatch.INSTANCE.processStarted("Running Startup Activities"); try { runActivities(myPreStartupActivities); @@ -133,7 +134,7 @@ public class StartupManagerImpl extends StartupManagerEx { } } finally { - HeavyProcessLatch.INSTANCE.processFinished(); + token.finish(); } } }); diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index 7194dbddaecb..4a500fc2a321 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -502,7 +502,7 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App myIsFiringLoadingEvent = false; } - HeavyProcessLatch.INSTANCE.processStarted("Loading application components"); + AccessToken token = HeavyProcessLatch.INSTANCE.processStarted("Loading application components"); try { store.load(); } @@ -510,7 +510,7 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App throw new IOException(e.getMessage()); } finally { - HeavyProcessLatch.INSTANCE.processFinished(); + token.finish(); } myLoaded = true; diff --git a/platform/platform-impl/src/com/intellij/openapi/components/impl/ServiceManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/components/impl/ServiceManagerImpl.java index a315e8f2560c..b568ce9e6bad 100644 --- a/platform/platform-impl/src/com/intellij/openapi/components/impl/ServiceManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/components/impl/ServiceManagerImpl.java @@ -16,6 +16,7 @@ package com.intellij.openapi.components.impl; import com.intellij.openapi.Disposable; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.BaseComponent; import com.intellij.openapi.components.ComponentConfig; @@ -199,7 +200,7 @@ public class ServiceManagerImpl implements BaseComponent { @Override public Object compute() { // prevent storages from flushing and blocking FS - HeavyProcessLatch.INSTANCE.processStarted("Creating component '" + myDescriptor.getImplementation()+"'"); + AccessToken token = HeavyProcessLatch.INSTANCE.processStarted("Creating component '" + myDescriptor.getImplementation() + "'"); try { synchronized (MyComponentAdapter.this) { Object instance = myInitializedComponentInstance; @@ -209,7 +210,7 @@ public class ServiceManagerImpl implements BaseComponent { } } finally { - HeavyProcessLatch.INSTANCE.processFinished(); + token.finish(); } } }); diff --git a/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java index 7860d4364f9d..18d0f692e6ad 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java @@ -18,6 +18,7 @@ package com.intellij.openapi.project; import com.intellij.ide.IdeBundle; import com.intellij.ide.caches.CacheUpdater; import com.intellij.openapi.Disposable; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; @@ -152,12 +153,12 @@ public class DumbServiceImpl extends DumbService implements Disposable { if (indicator != null) { indicator.pushState(); } + AccessToken token = HeavyProcessLatch.INSTANCE.processStarted("Performing indexing task"); try { - HeavyProcessLatch.INSTANCE.processStarted("Performing indexing task"); task.performInDumbMode(indicator != null ? indicator : new EmptyProgressIndicator()); } finally { - HeavyProcessLatch.INSTANCE.processFinished(); + token.finish(); if (indicator != null) { indicator.popState(); } @@ -336,8 +337,8 @@ public class DumbServiceImpl extends DumbService implements Disposable { public void run(@NotNull final ProgressIndicator visibleIndicator) { final ShutDownTracker shutdownTracker = ShutDownTracker.getInstance(); final Thread self = Thread.currentThread(); + AccessToken token = HeavyProcessLatch.INSTANCE.processStarted("Performing indexing tasks"); try { - HeavyProcessLatch.INSTANCE.processStarted("Performing indexing tasks"); shutdownTracker.registerStopperThread(self); if (visibleIndicator instanceof ProgressIndicatorEx) { @@ -362,7 +363,7 @@ public class DumbServiceImpl extends DumbService implements Disposable { } finally { shutdownTracker.unregisterStopperThread(self); - HeavyProcessLatch.INSTANCE.processFinished(); + token.finish(); } } }); diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshQueueImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshQueueImpl.java index 8c777e75d21e..12765fedb7a7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshQueueImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshQueueImpl.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.vfs.newvfs; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; @@ -74,12 +75,12 @@ public class RefreshQueueImpl extends RefreshQueue { public void run() { try { myRefreshIndicator.start(); - HeavyProcessLatch.INSTANCE.processStarted("Doing file refresh. "+session.toString()); + AccessToken token = HeavyProcessLatch.INSTANCE.processStarted("Doing file refresh. " + session.toString()); try { doScan(session); } finally { - HeavyProcessLatch.INSTANCE.processFinished(); + token.finish(); myRefreshIndicator.stop(); } } diff --git a/platform/util/src/com/intellij/util/io/storage/HeavyProcessLatch.java b/platform/util/src/com/intellij/util/io/storage/HeavyProcessLatch.java index 29e77633c756..4042844974f6 100644 --- a/platform/util/src/com/intellij/util/io/storage/HeavyProcessLatch.java +++ b/platform/util/src/com/intellij/util/io/storage/HeavyProcessLatch.java @@ -20,16 +20,18 @@ package com.intellij.util.io.storage; import com.intellij.openapi.Disposable; +import com.intellij.openapi.application.AccessToken; import com.intellij.util.EventDispatcher; +import com.intellij.util.containers.ConcurrentHashSet; import org.jetbrains.annotations.NotNull; import java.util.EventListener; -import java.util.Stack; +import java.util.Set; public class HeavyProcessLatch { public static final HeavyProcessLatch INSTANCE = new HeavyProcessLatch(); - private final Stack myHeavyProcesses = new Stack(); + private final Set myHeavyProcesses = new ConcurrentHashSet(); private final EventDispatcher myEventDispatcher = EventDispatcher.create(HeavyProcessListener.class); private HeavyProcessLatch() { @@ -43,13 +45,21 @@ public class HeavyProcessLatch { processStarted(""); } - public void processStarted(@NotNull String operationName) { - myHeavyProcesses.push(operationName); + @NotNull + public AccessToken processStarted(@NotNull final String operationName) { + myHeavyProcesses.add(operationName); myEventDispatcher.getMulticaster().processStarted(); + return new AccessToken() { + @Override + public void finish() { + myHeavyProcesses.remove(operationName); + } + }; } + @Deprecated // use processStarted(String) public void processFinished() { - myHeavyProcesses.pop(); + myHeavyProcesses.remove(""); myEventDispatcher.getMulticaster().processFinished(); } @@ -59,7 +69,7 @@ public class HeavyProcessLatch { public String getRunningOperationName() { synchronized (myHeavyProcesses) { - return myHeavyProcesses.isEmpty() ? null : myHeavyProcesses.peek(); + return myHeavyProcesses.isEmpty() ? null : myHeavyProcesses.iterator().next(); } } diff --git a/plugins/git4idea/src/git4idea/actions/GitMergeAction.java b/plugins/git4idea/src/git4idea/actions/GitMergeAction.java index c2e172525307..6a730eac7e83 100644 --- a/plugins/git4idea/src/git4idea/actions/GitMergeAction.java +++ b/plugins/git4idea/src/git4idea/actions/GitMergeAction.java @@ -18,6 +18,7 @@ package git4idea.actions; import com.intellij.dvcs.DvcsUtil; import com.intellij.history.Label; import com.intellij.history.LocalHistory; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.Task; @@ -86,7 +87,7 @@ abstract class GitMergeAction extends GitRepositoryAction { final GitUntrackedFilesOverwrittenByOperationDetector untrackedFilesDetector = new GitUntrackedFilesOverwrittenByOperationDetector(selectedRoot); - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { GitCommandResult result = git.runCommand(new Computable() { @Override @@ -109,7 +110,7 @@ abstract class GitMergeAction extends GitRepositoryAction { handleResult(result, project, localChangesDetector, untrackedFilesDetector, repository, currentRev, affectedRoots, beforeLabel); } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } } diff --git a/plugins/git4idea/src/git4idea/actions/GitRebaseAbort.java b/plugins/git4idea/src/git4idea/actions/GitRebaseAbort.java index 3edd559a8e51..b36055c118ab 100644 --- a/plugins/git4idea/src/git4idea/actions/GitRebaseAbort.java +++ b/plugins/git4idea/src/git4idea/actions/GitRebaseAbort.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -17,6 +17,7 @@ package git4idea.actions; import com.intellij.dvcs.DvcsUtil; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vcs.VcsException; @@ -75,12 +76,12 @@ public class GitRebaseAbort extends GitRepositoryAction { GitSimpleHandler h = new GitSimpleHandler(project, root, GitCommand.REBASE); h.setStdoutSuppressed(false); h.addParameters("--abort"); - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { GitHandlerUtil.doSynchronously(h, getActionName(), h.printableCommandLine()); } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } } diff --git a/plugins/git4idea/src/git4idea/actions/GitRebaseActionBase.java b/plugins/git4idea/src/git4idea/actions/GitRebaseActionBase.java index 95246459fc1d..19de14769081 100644 --- a/plugins/git4idea/src/git4idea/actions/GitRebaseActionBase.java +++ b/plugins/git4idea/src/git4idea/actions/GitRebaseActionBase.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -16,6 +16,7 @@ package git4idea.actions; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vcs.VcsException; @@ -65,7 +66,7 @@ public abstract class GitRebaseActionBase extends GitRepositoryAction { task.executeInBackground(false, new GitTaskResultHandlerAdapter() { @Override protected void run(GitTaskResult taskResult) { - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { editor.close(); GitRepositoryManager manager = GitUtil.getRepositoryManager(project); @@ -74,7 +75,7 @@ public abstract class GitRebaseActionBase extends GitRepositoryAction { notifyAboutErrorResult(taskResult, resultListener, exceptions, project); } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } } }); diff --git a/plugins/git4idea/src/git4idea/actions/GitResetHead.java b/plugins/git4idea/src/git4idea/actions/GitResetHead.java index 0aa7180fba92..3a739d0e473f 100644 --- a/plugins/git4idea/src/git4idea/actions/GitResetHead.java +++ b/plugins/git4idea/src/git4idea/actions/GitResetHead.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -16,6 +16,7 @@ package git4idea.actions; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; @@ -57,12 +58,12 @@ public class GitResetHead extends GitRepositoryAction { } GitLineHandler h = d.handler(); affectedRoots.add(d.getGitRoot()); - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { GitHandlerUtil.doSynchronously(h, GitBundle.getString("resetting.title"), h.printableCommandLine()); } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } GitRepositoryManager manager = GitUtil.getRepositoryManager(project); manager.updateRepository(d.getGitRoot()); diff --git a/plugins/git4idea/src/git4idea/actions/GitStash.java b/plugins/git4idea/src/git4idea/actions/GitStash.java index 20fd525929ea..b5a4892a30fd 100644 --- a/plugins/git4idea/src/git4idea/actions/GitStash.java +++ b/plugins/git4idea/src/git4idea/actions/GitStash.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -16,6 +16,7 @@ package git4idea.actions; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.VcsException; @@ -54,12 +55,12 @@ public class GitStash extends GitRepositoryAction { VirtualFile root = d.getGitRoot(); affectedRoots.add(root); final GitLineHandler h = d.handler(); - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { GitHandlerUtil.doSynchronously(h, GitBundle.getString("stashing.title"), h.printableCommandLine()); } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } ServiceManager.getService(project, GitPlatformFacade.class).hardRefresh(root); } diff --git a/plugins/git4idea/src/git4idea/branch/GitCheckoutOperation.java b/plugins/git4idea/src/git4idea/branch/GitCheckoutOperation.java index 5e0a10c039ee..8327a614725c 100644 --- a/plugins/git4idea/src/git4idea/branch/GitCheckoutOperation.java +++ b/plugins/git4idea/src/git4idea/branch/GitCheckoutOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * 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. @@ -16,6 +16,7 @@ package git4idea.branch; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; @@ -65,7 +66,7 @@ class GitCheckoutOperation extends GitBranchOperation { protected void execute() { saveAllDocuments(); boolean fatalErrorHappened = false; - DvcsUtil.workingTreeChangeStarted(myProject); + AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject); try { while (hasMoreRepositories() && !fatalErrorHappened) { final GitRepository repository = next(); @@ -104,7 +105,7 @@ class GitCheckoutOperation extends GitBranchOperation { } } finally { - DvcsUtil.workingTreeChangeFinished(myProject); + DvcsUtil.workingTreeChangeFinished(myProject, token); } if (!fatalErrorHappened) { diff --git a/plugins/git4idea/src/git4idea/branch/GitMergeOperation.java b/plugins/git4idea/src/git4idea/branch/GitMergeOperation.java index db92107629cf..5a0d6a031f98 100644 --- a/plugins/git4idea/src/git4idea/branch/GitMergeOperation.java +++ b/plugins/git4idea/src/git4idea/branch/GitMergeOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * 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. @@ -18,6 +18,7 @@ package git4idea.branch; import com.intellij.dvcs.DvcsUtil; import com.intellij.notification.Notification; import com.intellij.notification.NotificationListener; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; @@ -73,7 +74,7 @@ class GitMergeOperation extends GitBranchOperation { saveAllDocuments(); boolean fatalErrorHappened = false; int alreadyUpToDateRepositories = 0; - DvcsUtil.workingTreeChangeStarted(myProject); + AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject); try { while (hasMoreRepositories() && !fatalErrorHappened) { final GitRepository repository = next(); @@ -147,7 +148,7 @@ class GitMergeOperation extends GitBranchOperation { restoreLocalChanges(); } finally { - DvcsUtil.workingTreeChangeFinished(myProject); + DvcsUtil.workingTreeChangeFinished(myProject, token); } } diff --git a/plugins/git4idea/src/git4idea/cherrypick/GitCherryPicker.java b/plugins/git4idea/src/git4idea/cherrypick/GitCherryPicker.java index 4e3c3183cf16..77196722f24a 100644 --- a/plugins/git4idea/src/git4idea/cherrypick/GitCherryPicker.java +++ b/plugins/git4idea/src/git4idea/cherrypick/GitCherryPicker.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * 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. @@ -18,6 +18,7 @@ package git4idea.cherrypick; import com.intellij.dvcs.DvcsUtil; import com.intellij.notification.Notification; import com.intellij.notification.NotificationListener; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; @@ -90,7 +91,7 @@ public class GitCherryPicker { public void cherryPick(@NotNull Map> commitsInRoots) { List successfulCommits = ContainerUtil.newArrayList(); List alreadyPicked = ContainerUtil.newArrayList(); - DvcsUtil.workingTreeChangeStarted(myProject); + AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject); try { for (Map.Entry> entry : commitsInRoots.entrySet()) { GitRepository repository = entry.getKey(); @@ -103,7 +104,7 @@ public class GitCherryPicker { notifyResult(successfulCommits, alreadyPicked); } finally { - DvcsUtil.workingTreeChangeFinished(myProject); + DvcsUtil.workingTreeChangeFinished(myProject, token); } } diff --git a/plugins/git4idea/src/git4idea/rebase/GitRebaser.java b/plugins/git4idea/src/git4idea/rebase/GitRebaser.java index d44988c48aac..75e28742b965 100644 --- a/plugins/git4idea/src/git4idea/rebase/GitRebaser.java +++ b/plugins/git4idea/src/git4idea/rebase/GitRebaser.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * 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. @@ -16,6 +16,7 @@ package git4idea.rebase; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; @@ -91,8 +92,8 @@ public class GitRebaser { rebaseTask.setProgressAnalyzer(new GitStandardProgressAnalyzer()); final AtomicReference updateResult = new AtomicReference(); final AtomicBoolean failure = new AtomicBoolean(); + AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject); try { - DvcsUtil.workingTreeChangeStarted(myProject); rebaseTask.executeInBackground(true, new GitTaskResultHandlerAdapter() { @Override protected void onSuccess() { @@ -118,7 +119,7 @@ public class GitRebaser { } } finally { - DvcsUtil.workingTreeChangeFinished(myProject); + DvcsUtil.workingTreeChangeFinished(myProject, token); } return updateResult.get(); } @@ -146,7 +147,7 @@ public class GitRebaser { * @return true if rebase successfully finished. */ public boolean continueRebase(@NotNull Collection rebasingRoots) { - DvcsUtil.workingTreeChangeStarted(myProject); + AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject); try { boolean success = true; for (VirtualFile root : rebasingRoots) { @@ -155,7 +156,7 @@ public class GitRebaser { return success; } finally { - DvcsUtil.workingTreeChangeFinished(myProject); + DvcsUtil.workingTreeChangeFinished(myProject, token); } } diff --git a/plugins/git4idea/src/git4idea/reset/GitResetOperation.java b/plugins/git4idea/src/git4idea/reset/GitResetOperation.java index 528a9e1277f3..802137737c89 100644 --- a/plugins/git4idea/src/git4idea/reset/GitResetOperation.java +++ b/plugins/git4idea/src/git4idea/reset/GitResetOperation.java @@ -17,6 +17,7 @@ package git4idea.reset; import com.intellij.dvcs.DvcsUtil; import com.intellij.dvcs.repo.RepositoryUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.progress.ProgressIndicator; @@ -76,7 +77,7 @@ public class GitResetOperation { public void execute() { saveAllDocuments(); - DvcsUtil.workingTreeChangeStarted(myProject); + AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject); Map results = ContainerUtil.newHashMap(); try { for (Map.Entry entry : myCommits.entrySet()) { @@ -99,7 +100,7 @@ public class GitResetOperation { } } finally { - DvcsUtil.workingTreeChangeFinished(myProject); + DvcsUtil.workingTreeChangeFinished(myProject, token); } notifyResult(results); } diff --git a/plugins/git4idea/src/git4idea/rollback/GitRollbackEnvironment.java b/plugins/git4idea/src/git4idea/rollback/GitRollbackEnvironment.java index 87b256db62d6..ea4570ce30e9 100644 --- a/plugins/git4idea/src/git4idea/rollback/GitRollbackEnvironment.java +++ b/plugins/git4idea/src/git4idea/rollback/GitRollbackEnvironment.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -17,6 +17,7 @@ package git4idea.rollback; import com.intellij.dvcs.DvcsUtil; import com.intellij.lifecycle.PeriodicalTasksCloser; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vcs.VcsException; @@ -142,7 +143,7 @@ public class GitRollbackEnvironment implements RollbackEnvironment { } } // revert files from HEAD - DvcsUtil.workingTreeChangeStarted(myProject); + AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject); try { for (Map.Entry> entry : toRevert.entrySet()) { listener.accept(entry.getValue()); @@ -155,7 +156,7 @@ public class GitRollbackEnvironment implements RollbackEnvironment { } } finally { - DvcsUtil.workingTreeChangeFinished(myProject); + DvcsUtil.workingTreeChangeFinished(myProject,token); } LocalFileSystem lfs = LocalFileSystem.getInstance(); HashSet filesToRefresh = new HashSet(); diff --git a/plugins/git4idea/src/git4idea/ui/GitUnstashDialog.java b/plugins/git4idea/src/git4idea/ui/GitUnstashDialog.java index 18f1f5ea6d5a..93278d15ee21 100644 --- a/plugins/git4idea/src/git4idea/ui/GitUnstashDialog.java +++ b/plugins/git4idea/src/git4idea/ui/GitUnstashDialog.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -20,6 +20,7 @@ import com.intellij.dvcs.DvcsUtil; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.notification.Notification; import com.intellij.notification.NotificationListener; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.components.ServiceManager; @@ -357,7 +358,7 @@ public class GitUnstashDialog extends DialogWrapper { h.addLineListener(untrackedFilesDetector); h.addLineListener(localChangesDetector); - DvcsUtil.workingTreeChangeStarted(myProject); + AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject); try { final Ref result = Ref.create(); ProgressManager.getInstance().run(new Task.Modal(h.project(), GitBundle.getString("unstash.unstashing"), false) { @@ -384,7 +385,7 @@ public class GitUnstashDialog extends DialogWrapper { } } finally { - DvcsUtil.workingTreeChangeFinished(myProject); + DvcsUtil.workingTreeChangeFinished(myProject, token); } super.doOKAction(); } diff --git a/plugins/git4idea/src/git4idea/update/GitUpdateProcess.java b/plugins/git4idea/src/git4idea/update/GitUpdateProcess.java index c7423b2a2112..636ad2c920c2 100644 --- a/plugins/git4idea/src/git4idea/update/GitUpdateProcess.java +++ b/plugins/git4idea/src/git4idea/update/GitUpdateProcess.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * 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. @@ -16,6 +16,7 @@ package git4idea.update; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.EmptyProgressIndicator; @@ -133,12 +134,12 @@ public class GitUpdateProcess { GitComplexProcess.Operation updateOperation = new GitComplexProcess.Operation() { @Override public void run(ContinuationContext continuationContext) { - DvcsUtil.workingTreeChangeStarted(myProject); + AccessToken token = DvcsUtil.workingTreeChangeStarted(myProject); try { myResult = updateImpl(updateMethod, continuationContext); } finally { - DvcsUtil.workingTreeChangeFinished(myProject); + DvcsUtil.workingTreeChangeFinished(myProject, token); } } }; diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java index 7b7bfabf73c8..3efd666d3ed7 100644 --- a/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java +++ b/plugins/github/src/org/jetbrains/plugins/github/GithubRebaseAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * 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. @@ -18,6 +18,7 @@ package org.jetbrains.plugins.github; import com.intellij.dvcs.DvcsUtil; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; @@ -229,18 +230,22 @@ public class GithubRebaseAction extends DumbAwareAction { @NotNull final ProgressIndicator indicator) { final Git git = ServiceManager.getService(project, Git.class); final GitPlatformFacade facade = ServiceManager.getService(project, GitPlatformFacade.class); - DvcsUtil.workingTreeChangeStarted(project); - GitPreservingProcess process = - new GitPreservingProcess(project, facade, git, Collections.singletonList(gitRepository), "Rebasing", "upstream/master", indicator, - new Runnable() { - @Override - public void run() { - doRebaseCurrentBranch(project, gitRepository.getRoot(), indicator); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); + try { + GitPreservingProcess process = + new GitPreservingProcess(project, facade, git, Collections.singletonList(gitRepository), "Rebasing", "upstream/master", indicator, + new Runnable() { + @Override + public void run() { + doRebaseCurrentBranch(project, gitRepository.getRoot(), indicator); + } } - } - ); - process.execute(); - DvcsUtil.workingTreeChangeFinished(project); + ); + process.execute(); + } + finally { + DvcsUtil.workingTreeChangeFinished(project, token); + } } private static void doRebaseCurrentBranch(@NotNull final Project project, diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgMergeCommand.java b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgMergeCommand.java index 16c8b7fe0a8b..0a428a9d759e 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgMergeCommand.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgMergeCommand.java @@ -13,6 +13,7 @@ package org.zmlx.hg4idea.command; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -50,7 +51,7 @@ public class HgMergeCommand { arguments.add("--rev"); arguments.add(revision); } - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { final HgCommandResult result = commandExecutor.executeInCurrentThread(repo, "merge", arguments); @@ -58,7 +59,7 @@ public class HgMergeCommand { return result; } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } } } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgRebaseCommand.java b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgRebaseCommand.java index 05a5ebda6d7a..25d174cfcaf0 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgRebaseCommand.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgRebaseCommand.java @@ -13,6 +13,7 @@ package org.zmlx.hg4idea.command; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.project.Project; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; @@ -50,7 +51,7 @@ public class HgRebaseCommand { @Nullable private HgCommandResult performRebase(@NotNull String... args) { - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { HgCommandResult result = new HgCommandExecutor(project) @@ -60,7 +61,7 @@ public class HgRebaseCommand { return result; } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } } } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgUpdateCommand.java b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgUpdateCommand.java index 0be4e1602b1e..4e8c06a680dd 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgUpdateCommand.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/command/HgUpdateCommand.java @@ -13,6 +13,7 @@ package org.zmlx.hg4idea.command; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; @@ -75,7 +76,7 @@ public class HgUpdateCommand { final HgPromptCommandExecutor executor = new HgPromptCommandExecutor(project); executor.setShowOutput(true); HgCommandResult result; - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { result = executor.executeInCurrentThread(repo, "update", arguments); @@ -89,7 +90,7 @@ public class HgUpdateCommand { } } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } project.getMessageBus().syncPublisher(HgVcs.BRANCH_TOPIC).update(project, null); diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgRollbackEnvironment.java b/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgRollbackEnvironment.java index 958bac8ef515..3b536c2fecb7 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgRollbackEnvironment.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgRollbackEnvironment.java @@ -13,6 +13,7 @@ package org.zmlx.hg4idea.provider; import com.intellij.dvcs.DvcsUtil; +import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vcs.FilePath; @@ -71,7 +72,7 @@ public class HgRollbackEnvironment implements RollbackEnvironment { } } } - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { revert(filePaths); for (FilePath file : toDelete) { @@ -92,18 +93,18 @@ public class HgRollbackEnvironment implements RollbackEnvironment { } } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } } public void rollbackMissingFileDeletion(List files, List exceptions, RollbackProgressListener listener) { - DvcsUtil.workingTreeChangeStarted(project); + AccessToken token = DvcsUtil.workingTreeChangeStarted(project); try { revert(files); } finally { - DvcsUtil.workingTreeChangeFinished(project); + DvcsUtil.workingTreeChangeFinished(project, token); } } From 89b675c53d4cacbefdea3ddf5b3ea15935e3ed25 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 28 Oct 2014 13:17:49 +0300 Subject: [PATCH 14/90] removed non-ascii characters --- .../impl/quickfix/SideEffectWarningDialog.java | 4 ++-- .../execution/console/LanguageConsoleImpl.java | 2 +- .../platform-api/src/com/intellij/util/Url.java | 17 ++++++++++++++++- .../src/com/intellij/util/Urls.java | 2 +- .../testframework/autotest/AutoTestManager.java | 17 ++++++++++++++++- .../intellij/ui/mac/foundation/Foundation.java | 4 ++-- .../openapi/vcs/VcsApplicationSettings.java | 2 +- .../impl/breakpoints/XLineBreakpointImpl.java | 4 ++-- 8 files changed, 41 insertions(+), 11 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SideEffectWarningDialog.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SideEffectWarningDialog.java index 8a992662935d..e5c8694cb860 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SideEffectWarningDialog.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SideEffectWarningDialog.java @@ -131,8 +131,8 @@ public class SideEffectWarningDialog extends DialogWrapper { "There are possible side effects found in expressions assigned to the variable ''{0}''
\n" + "You can:\n" + "
\n" + - "— Remove variable usages along with all expressions involved, or
\n" + - "— Transform expressions assigned to variable into the statements on their own.
\n" + + "- Remove variable usages along with all expressions involved, or
\n" + + "- Transform expressions assigned to variable into the statements on their own.
\n" + "
\n" + " That is,
\n" + " \n" + diff --git a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java index 711184d9b705..87e2f12a18d8 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java @@ -750,7 +750,7 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider { history.getSettings().setAdditionalColumnsCount(2 + (width - historySize.width) / EditorUtil.getSpaceWidth(Font.PLAIN, history)); } - // deal with height, WEB-11122 we cannot trust editor width — it could be 0 in case of soft wrap even if editor has text + // deal with height, WEB-11122 we cannot trust editor width - it could be 0 in case of soft wrap even if editor has text if (history.getDocument().getLineCount() == 0) { historySize.height = 0; } diff --git a/platform/platform-api/src/com/intellij/util/Url.java b/platform/platform-api/src/com/intellij/util/Url.java index f78b237d7070..80d3fe9cd668 100644 --- a/platform/platform-api/src/com/intellij/util/Url.java +++ b/platform/platform-api/src/com/intellij/util/Url.java @@ -1,9 +1,24 @@ +/* + * 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.util; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -// We don't use Java URI due to problem — http://cns-etuat-2.localnet.englishtown.com/school/e12/#school/45383/201/221/382?c=countrycode=cc|culturecode=en-us|partnercode=mkge +// We don't use Java URI due to problem - http://cns-etuat-2.localnet.englishtown.com/school/e12/#school/45383/201/221/382?c=countrycode=cc|culturecode=en-us|partnercode=mkge // it is illegal URI (fragment before query), but we must support such URI // Semicolon as parameters separator is supported (WEB-6671) public interface Url { diff --git a/platform/platform-impl/src/com/intellij/util/Urls.java b/platform/platform-impl/src/com/intellij/util/Urls.java index a09b1dbcf96a..abe4c5ae75b2 100644 --- a/platform/platform-impl/src/com/intellij/util/Urls.java +++ b/platform/platform-impl/src/com/intellij/util/Urls.java @@ -99,7 +99,7 @@ public final class Urls { } if (asLocalIfNoScheme && !URLUtil.containsScheme(url)) { - // nodejs debug — files only in local filesystem + // nodejs debug - files only in local filesystem return newLocalFileUrl(url); } return parseUrl(VfsUtilCore.toIdeaUrl(url)); diff --git a/platform/testRunner/src/com/intellij/execution/testframework/autotest/AutoTestManager.java b/platform/testRunner/src/com/intellij/execution/testframework/autotest/AutoTestManager.java index 3f15ee3f6de3..14e0cf32ef62 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/autotest/AutoTestManager.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/autotest/AutoTestManager.java @@ -1,3 +1,18 @@ +/* + * 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.testframework.autotest; import com.intellij.execution.DelayedDocumentWatcher; @@ -58,7 +73,7 @@ public class AutoTestManager { }, new Condition() { @Override public boolean value(VirtualFile file) { - // Vladimir.Krivosheev — I don't know, why AutoTestManager checks it, but old behavior is preserved + // Vladimir.Krivosheev - I don't know, why AutoTestManager checks it, but old behavior is preserved return FileEditorManager.getInstance(myProject).isFileOpen(file); } }); diff --git a/platform/util/src/com/intellij/ui/mac/foundation/Foundation.java b/platform/util/src/com/intellij/ui/mac/foundation/Foundation.java index e8277dbe0798..f4ad998b1cd4 100644 --- a/platform/util/src/com/intellij/ui/mac/foundation/Foundation.java +++ b/platform/util/src/com/intellij/ui/mac/foundation/Foundation.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -95,7 +95,7 @@ public class Foundation { * * @param cls The class to which to add a method. * @param selectorName A selector that specifies the name of the method being added. - * @param impl A function which is the implementation of the new method. The function must take at least two arguments—self and _cmd. + * @param impl A function which is the implementation of the new method. The function must take at least two arguments-self and _cmd. * @param types An array of characters that describe the types of the arguments to the method. * See * @return true if the method was added successfully, otherwise false (for example, the class already contains a method implementation with that name). diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsApplicationSettings.java b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsApplicationSettings.java index 67e04f2f5241..619c6c460603 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsApplicationSettings.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsApplicationSettings.java @@ -19,7 +19,7 @@ import com.intellij.openapi.components.*; import com.intellij.util.xmlb.XmlSerializerUtil; /** - * We don't use roaming type PER_PLATFORM — path macros is enough ($USER_HOME$/Dropbox for example) + * We don't use roaming type PER_PLATFORM - path macros is enough ($USER_HOME$/Dropbox for example) */ @State( name = "VcsApplicationSettings", diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java index 855abaaad74e..0d2fcb000d22 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -123,7 +123,7 @@ public class XLineBreakpointImpl

extends XBreak if (markupModel == null) { markupModel = (MarkupModelEx)DocumentMarkupModel.forDocument(document, getProject(), false); if (markupModel != null) { - // renderersChanged false — we don't change gutter size + // renderersChanged false - we don't change gutter size markupModel.fireAttributesChanged(highlighter, false); } } From 47e081e201cb65424c2ba4dda007495a67eb2106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Tue, 28 Oct 2014 11:47:18 +0100 Subject: [PATCH 15/90] IDEA-131863 show containing definition file in "()" --- .../extensions/ExtensionPointDocumentationProvider.java | 2 +- .../extensions/ExtensionPointDocumentationProviderTest.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/devkit/src/references/extensions/ExtensionPointDocumentationProvider.java b/plugins/devkit/src/references/extensions/ExtensionPointDocumentationProvider.java index 2ce1c27e6e38..3ac1702a1567 100644 --- a/plugins/devkit/src/references/extensions/ExtensionPointDocumentationProvider.java +++ b/plugins/devkit/src/references/extensions/ExtensionPointDocumentationProvider.java @@ -61,7 +61,7 @@ public class ExtensionPointDocumentationProvider extends DocumentationProviderEx (epPrefix == null ? "" : " " + epPrefix) + "
" + "" + extensionPoint.getEffectiveName() + "" + - " [" + epDeclarationFile.getName() + "]
" + + " (" + epDeclarationFile.getName() + ")
" + epClassText.toString(); } diff --git a/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.java b/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.java index a9c16ec0335a..94214e5b6e50 100644 --- a/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.java +++ b/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.java @@ -21,8 +21,7 @@ public class ExtensionPointDocumentationProviderTest extends LightCodeInsightFix DocumentationProvider provider = DocumentationManager.getProviderFromElement(docElement); String epDefinition = "[" + myModule.getName() + "] foo
" + - "bar " + - "[extensionPointDocumentation.xml]
" + + "bar (extensionPointDocumentation.xml)
" + "MyExtensionPoint"; assertEquals(epDefinition, From 3699912a7a6f6dfcb263ae25d6fe6bc7d2f380a9 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 28 Oct 2014 13:52:50 +0300 Subject: [PATCH 16/90] IDEA-125322 Debugger: F2 adds new row in Watches --- .../com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java | 2 ++ .../intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java index 6804679e7da3..58aa30fe2d84 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java @@ -66,6 +66,7 @@ public class WatchInplaceEditor extends XDebuggerTreeInplaceEditor { if (myOldNode != null && index != -1) { myWatchesView.addWatchExpression(myOldNode.getExpression(), index, false); } + getTree().setSelectionRow(index); } @Override @@ -77,6 +78,7 @@ public class WatchInplaceEditor extends XDebuggerTreeInplaceEditor { if (!XDebuggerUtilImpl.isEmptyExpression(expression) && index != -1) { myWatchesView.addWatchExpression(expression, index, false); } + getTree().setSelectionRow(index); } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java index 2e4e168b8d84..1421426809c5 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java @@ -106,6 +106,7 @@ public class WatchesRootNode extends XDebuggerTreeNode { } private void replaceNode(final WatchNode oldNode, final WatchNode newNode) { + int[] selectedRows = getTree().getSelectionRows(); for (int i = 0; i < myChildren.size(); i++) { WatchNode child = myChildren.get(i); if (child == oldNode) { @@ -118,6 +119,7 @@ public class WatchesRootNode extends XDebuggerTreeNode { else { fireNodeStructureChanged(newNode); } + getTree().setSelectionRows(selectedRows); return; } } From f05cd24dfe6159db08810502fd01888ec58047b7 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 28 Oct 2014 11:28:32 +0100 Subject: [PATCH 17/90] EA-62157 - IAE: PsiUtil.getLanguageLevel process further when package-info doesn't correspond any package --- .../com/intellij/psi/impl/source/javadoc/SeeDocTagInfo.java | 2 +- .../intellij/psi/impl/source/javadoc/SimpleDocTagInfo.java | 2 +- .../javaDoc/resolve/pkg1/package-info.java | 6 ++++++ .../com/intellij/codeInsight/daemon/JavadocResolveTest.java | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg1/package-info.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/SeeDocTagInfo.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/SeeDocTagInfo.java index 287afdc18f6d..5356938959e1 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/SeeDocTagInfo.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/SeeDocTagInfo.java @@ -120,7 +120,7 @@ class SeeDocTagInfo implements JavadocTagInfo { @Override public boolean isValidInContext(PsiElement element) { - if (myInline && myName.equals(LINKPLAIN_TAG)) + if (myInline && myName.equals(LINKPLAIN_TAG) && element != null) return PsiUtil.getLanguageLevel(element).compareTo(LanguageLevel.JDK_1_4) >= 0; return true; diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/SimpleDocTagInfo.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/SimpleDocTagInfo.java index d16f4d8be4a7..ddb6187a6420 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/SimpleDocTagInfo.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/SimpleDocTagInfo.java @@ -57,7 +57,7 @@ class SimpleDocTagInfo implements JavadocTagInfo { @Override public boolean isValidInContext(PsiElement element) { - if (PsiUtil.getLanguageLevel(element).compareTo(myLanguageLevel) < 0) { + if (element != null && PsiUtil.getLanguageLevel(element).compareTo(myLanguageLevel) < 0) { return false; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg1/package-info.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg1/package-info.java new file mode 100644 index 000000000000..a49965c56f18 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/javaDoc/resolve/pkg1/package-info.java @@ -0,0 +1,6 @@ +/** + * {@linkplain #foo} + * @see List + * @author #mycompanyname + */ +package mycompanypackagename; \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/JavadocResolveTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/JavadocResolveTest.java index 2dd4f9c00eb2..2fea76a290e7 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/JavadocResolveTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/JavadocResolveTest.java @@ -32,6 +32,7 @@ public class JavadocResolveTest extends DaemonAnalyzerTestCase { public void testSee2() throws Exception { doTest(); } public void testSee3() throws Exception { doTest(); } public void testPackageInfo() throws Exception { doTest(BASE_PATH + "/pkg/package-info.java", BASE_PATH, false, false); } + public void testBrokenPackageInfo() throws Exception { doTest(BASE_PATH + "/pkg1/package-info.java", BASE_PATH, false, false); } private void doTest() throws Exception { doTest(BASE_PATH + "/pkg/" + getTestName(false) + ".java", BASE_PATH, false, false); From a5bc5cc382382b6799ec3b4e37adcaf73c2fdebc Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 28 Oct 2014 11:36:38 +0100 Subject: [PATCH 18/90] EA-38267 - CCE: OfflineInspectionRVContentProvider$OfflineProblemDescriptorContainer.areEqual --- .../codeInspection/ex/InspectionRVContentProvider.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java index df797ef8115a..8769cb4f6181 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java @@ -234,7 +234,9 @@ public abstract class InspectionRVContentProvider { public boolean accept(Object node) { if (node instanceof RefElementNode) { final RefElementNode refElementNode = (RefElementNode)node; - if (finalContainer.areEqual(refElementNode.getUserObject(), finalContainer.getUserObject())) { + final Object finalContainerUserObject = finalContainer.getUserObject(); + if (finalContainerUserObject instanceof RefEntity && + finalContainer.areEqual(refElementNode.getUserObject(), finalContainerUserObject)) { if (firstLevel.get()) { result.set(refElementNode); return false; From 2237606d9366c2b02f5e0c9172354b69f8a5202f Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 28 Oct 2014 11:49:58 +0100 Subject: [PATCH 19/90] Cleanup (deprecated methods; minor optimization; formatting) --- .../jetbrains/jps/builders/BuildResult.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/builders/BuildResult.java b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/BuildResult.java index 1dc08ba8d8ce..157495ef0a4a 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/jps/builders/BuildResult.java +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/BuildResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -17,7 +17,6 @@ package org.jetbrains.jps.builders; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; -import junit.framework.Assert; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.incremental.MessageHandler; import org.jetbrains.jps.incremental.messages.BuildMessage; @@ -26,9 +25,11 @@ import org.jetbrains.jps.incremental.messages.DoneSomethingNotification; import java.util.ArrayList; import java.util.List; +import static org.junit.Assert.*; + /** -* @author nik -*/ + * @author nik + */ public class BuildResult implements MessageHandler { private final List myErrorMessages; private final List myWarnMessages; @@ -59,11 +60,11 @@ public class BuildResult implements MessageHandler { } public void assertUpToDate() { - Assert.assertTrue("Project sources weren't up to date", myUpToDate); + assertTrue("Project sources weren't up to date", myUpToDate); } public void assertFailed() { - Assert.assertFalse("Build not failed as expected", isSuccessful()); + assertFalse("Build not failed as expected", isSuccessful()); } public boolean isSuccessful() { @@ -71,9 +72,12 @@ public class BuildResult implements MessageHandler { } public void assertSuccessful() { - final Function toStringFunction = StringUtil.createToStringFunction(BuildMessage.class); - Assert.assertTrue("Build failed. \nErrors:\n" + StringUtil.join(myErrorMessages, toStringFunction, "\n") + - "\nInfo messages:\n" + StringUtil.join(myInfoMessages, toStringFunction, "\n"), isSuccessful()); + if (!isSuccessful()) { + Function toStringFunction = StringUtil.createToStringFunction(BuildMessage.class); + fail("Build failed.\n" + + "Errors:\n" + StringUtil.join(myErrorMessages, toStringFunction, "\n") + "\n" + + "Info messages:\n" + StringUtil.join(myInfoMessages, toStringFunction, "\n")); + } } @NotNull From 5611a35bf19ae2d5a364260c43d47421fc56163a Mon Sep 17 00:00:00 2001 From: Liana Bakradze Date: Tue, 28 Oct 2014 14:04:55 +0300 Subject: [PATCH 20/90] EDU-258 Actions names in the keymap are not consistent to other names --- .../resources/META-INF/plugin.xml | 2 +- .../actions/CCAddTaskWindow.java | 2 +- .../actions/CCChangeCourseInfo.java | 2 +- .../actions/CCDeleteTaskWindow.java | 2 +- .../coursecreator/actions/CCShowPreview.java | 2 +- .../actions/CCShowTaskWindowDetails.java | 2 +- .../resources/META-INF/plugin.xml | 31 ++++++++++--------- .../python/edu/editor/StudyEditor.java | 12 +++---- 8 files changed, 29 insertions(+), 26 deletions(-) diff --git a/python/edu/course-creator/resources/META-INF/plugin.xml b/python/edu/course-creator/resources/META-INF/plugin.xml index f4e0d510a8d8..636927381260 100644 --- a/python/edu/course-creator/resources/META-INF/plugin.xml +++ b/python/edu/course-creator/resources/META-INF/plugin.xml @@ -80,7 +80,7 @@ - + \ No newline at end of file diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java index e423da553d1b..340add19f7d8 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java @@ -24,7 +24,7 @@ public class CCAddTaskWindow extends DumbAwareAction { private static final Logger LOG = Logger.getInstance(CCAddTaskWindow.class); public CCAddTaskWindow() { - super("Add problem to solve", "Add problem to solve", null); + super("Add Problem To Solve", "Add problem to solve", null); } diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCChangeCourseInfo.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCChangeCourseInfo.java index a556cd1113f1..653af6c691f6 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCChangeCourseInfo.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCChangeCourseInfo.java @@ -21,7 +21,7 @@ import javax.swing.*; public class CCChangeCourseInfo extends DumbAwareAction { public CCChangeCourseInfo() { - super("Change Course information", "Change Course Information", null); + super("Change Course Information", "Change Course Information", null); } @Override diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCDeleteTaskWindow.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCDeleteTaskWindow.java index cae8393c8a37..c7d8cd91cf4b 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCDeleteTaskWindow.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCDeleteTaskWindow.java @@ -18,7 +18,7 @@ public class CCDeleteTaskWindow extends CCTaskWindowAction { private static final Logger LOG = Logger.getInstance(CCDeleteTaskWindow.class); public CCDeleteTaskWindow() { - super("Delete problem","Delete problem", null); + super("Delete Problem","Delete problem", null); } @Override diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowPreview.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowPreview.java index 5c9cf6d1e323..97a1b0300688 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowPreview.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowPreview.java @@ -50,7 +50,7 @@ public class CCShowPreview extends DumbAwareAction { private static final Logger LOG = Logger.getInstance(CCShowPreview.class.getName()); public CCShowPreview() { - super("Show preview","Show preview", null); + super("Show Preview","Show preview", null); } @Override diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowTaskWindowDetails.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowTaskWindowDetails.java index e08743fc6941..30ba802dbedc 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowTaskWindowDetails.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowTaskWindowDetails.java @@ -11,7 +11,7 @@ import org.jetbrains.plugins.coursecreator.ui.CreateTaskWindowDialog; public class CCShowTaskWindowDetails extends CCTaskWindowAction { public CCShowTaskWindowDetails() { - super("Show problem details", "Show problem details", null); + super("Show Problem Details", "Show problem details", null); } @Override diff --git a/python/edu/learn-python/resources/META-INF/plugin.xml b/python/edu/learn-python/resources/META-INF/plugin.xml index 01c0b4b9a6a8..328ce29de0e3 100644 --- a/python/edu/learn-python/resources/META-INF/plugin.xml +++ b/python/edu/learn-python/resources/META-INF/plugin.xml @@ -40,24 +40,27 @@ - + - + - - + - - - + + - - - + + + diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java index ec661f8f0b88..e84539773aa6 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java @@ -192,11 +192,11 @@ public class StudyEditor implements TextEditor { } private void initializeButtons(@NotNull final JPanel taskActionsPanel, @NotNull final TaskFile taskFile) { - myCheckButton = addButton(taskActionsPanel, "Check task (Ctrl + Alt + Enter)", StudyIcons.Resolve); - myPrevTaskButton = addButton(taskActionsPanel, "Previous task (Ctrl + <)", StudyIcons.Prev); - myNextTaskButton = addButton(taskActionsPanel, "Next task (Ctrl + >)", AllIcons.Actions.Forward); - myRefreshButton = addButton(taskActionsPanel, "Reset task file (Ctrl + Shift + X)", AllIcons.Actions.Refresh); - JButton myShowHintButton = addButton(taskActionsPanel, "Show hint for task window (Ctrl + 7)", StudyIcons.ShowHint); + myCheckButton = addButton(taskActionsPanel, "Check Task (Ctrl + Alt + Enter)", StudyIcons.Resolve); + myPrevTaskButton = addButton(taskActionsPanel, "Previous Task (Ctrl + <)", StudyIcons.Prev); + myNextTaskButton = addButton(taskActionsPanel, "Next Task (Ctrl + >)", AllIcons.Actions.Forward); + myRefreshButton = addButton(taskActionsPanel, "Reset Task File (Ctrl + Shift + X)", AllIcons.Actions.Refresh); + JButton myShowHintButton = addButton(taskActionsPanel, "Show Hint For Task Window (Ctrl + 7)", StudyIcons.ShowHint); if (!taskFile.getTask().getUserTests().isEmpty()) { JButton runButton = addButton(taskActionsPanel, "Run", AllIcons.General.Run); runButton.addActionListener(new ActionListener() { @@ -206,7 +206,7 @@ public class StudyEditor implements TextEditor { studyRunAction.run(myProject); } }); - JButton watchInputButton = addButton(taskActionsPanel, "Watch test input", StudyIcons.WatchInput); + JButton watchInputButton = addButton(taskActionsPanel, "Watch Test Input", StudyIcons.WatchInput); watchInputButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { From 81168ea14489f66cf6cfe75539a48b5faf1a7b75 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Tue, 28 Oct 2014 14:20:11 +0300 Subject: [PATCH 21/90] emmet preview editor should be aware of additional page at bottom --- .../intellij/codeInsight/template/emmet/EmmetPreviewHint.java | 1 + 1 file changed, 1 insertion(+) diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java index f9777958e689..01c809e6a459 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java @@ -157,6 +157,7 @@ public class EmmetPreviewHint extends LightweightHint implements Disposable { settings.setIndentGuidesShown(false); settings.setVirtualSpace(false); settings.setWheelFontChangeEnabled(false); + settings.setAdditionalPageAtBottom(false); previewEditor.setCaretEnabled(false); previewEditor.setBorder(IdeBorderFactory.createEmptyBorder()); From 896ec1edde3ed2934a0e7a4ad43f260cb9790d9e Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Tue, 28 Oct 2014 13:08:29 +0400 Subject: [PATCH 22/90] corrected test data of "MoveMembersTest#testscr40064", due to introducing "initializer block" arrangement entry and providing changes in default arrangement configuration (98b4ec4), instance and static fields are now placed before instance initializer blocks (default order: "static fields", "static initializers", "fields", "instance initializers") --- .../testData/refactoring/moveMembers/scr40064/after/Test.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/java-tests/testData/refactoring/moveMembers/scr40064/after/Test.java b/java/java-tests/testData/refactoring/moveMembers/scr40064/after/Test.java index bf7239b2509f..4afb887f978b 100644 --- a/java/java-tests/testData/refactoring/moveMembers/scr40064/after/Test.java +++ b/java/java-tests/testData/refactoring/moveMembers/scr40064/after/Test.java @@ -6,9 +6,9 @@ class Test { } class Test1 { + static int i; + { i = 0; } - - static int i; } \ No newline at end of file From 660c6d43e9f92e98cd1db67d0d094685e8386e86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20Kr=C3=A1sa?= Date: Tue, 28 Oct 2014 15:27:46 +0400 Subject: [PATCH 23/90] fix processing of console filters in dumb mode --- .../filters/CompositeInputFilter.java | 22 +++++++++++++++++-- .../execution/impl/ConsoleViewImpl.java | 21 ++---------------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/platform/lang-api/src/com/intellij/execution/filters/CompositeInputFilter.java b/platform/lang-api/src/com/intellij/execution/filters/CompositeInputFilter.java index 1801f74869dc..0f7469dfc6a6 100644 --- a/platform/lang-api/src/com/intellij/execution/filters/CompositeInputFilter.java +++ b/platform/lang-api/src/com/intellij/execution/filters/CompositeInputFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * 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. @@ -59,6 +59,24 @@ public class CompositeInputFilter implements InputFilter { } public void addFilter(@NotNull final InputFilter filter) { - myFilters.add(Pair.create(filter, DumbService.isDumbAware(filter))); + InputFilter wrapper = new InputFilter() { + boolean isBroken; + + @Nullable + @Override + public List> applyFilter(String text, ConsoleViewContentType contentType) { + if (!isBroken) { + try { + return filter.applyFilter(text, contentType); + } + catch (Throwable e) { + isBroken = true; + LOG.error(e); + } + } + return null; + } + }; + myFilters.add(Pair.create(wrapper, DumbService.isDumbAware(filter))); } } diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java index c20c8195ac56..325cd41dc501 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java @@ -316,25 +316,8 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo myInputMessageFilter = compositeInputFilter; for (ConsoleInputFilterProvider eachProvider : inputFilters) { InputFilter[] filters = eachProvider.getDefaultFilters(project); - for (final InputFilter filter : filters) { - compositeInputFilter.addFilter(new InputFilter() { - boolean isBroken; - - @Nullable - @Override - public List> applyFilter(String text, ConsoleViewContentType contentType) { - if (!isBroken) { - try { - return filter.applyFilter(text, contentType); - } - catch (Throwable e) { - isBroken = true; - LOG.error(e); - } - } - return null; - } - }); + for (InputFilter filter : filters) { + compositeInputFilter.addFilter(filter); } } } From 58a6dde3cdbbc2e9387876186fdb94cd45a7bef7 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 28 Oct 2014 14:46:57 +0300 Subject: [PATCH 24/90] IDEA-120611 github: select default branch by default, not the first one --- .../github/ui/GithubCreatePullRequestDialog.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java index c9b213db4358..47e090f94c14 100644 --- a/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java +++ b/plugins/github/src/org/jetbrains/plugins/github/ui/GithubCreatePullRequestDialog.java @@ -18,7 +18,6 @@ package org.jetbrains.plugins.github.ui; import com.intellij.CommonBundle; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.ValidationInfo; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; @@ -151,8 +150,13 @@ public class GithubCreatePullRequestDialog extends DialogWrapper { }); myPanel.setForks(myWorker.getForks()); - myPanel.setSelectedFork(myProjectSettings.getCreatePullRequestDefaultRepo()); - myPanel.setSelectedBranch(myProjectSettings.getCreatePullRequestDefaultBranch()); + + GithubFullPath defaultRepo = myProjectSettings.getCreatePullRequestDefaultRepo(); + String defaultBranch = myProjectSettings.getCreatePullRequestDefaultBranch(); + myPanel.setSelectedFork(defaultRepo); + if (defaultBranch != null) { // do not rewrite default value of Fork.getDefaultBranch() by null + myPanel.setSelectedBranch(defaultBranch); + } setTitle("Create Pull Request - " + myWorker.getCurrentBranch()); init(); From 8355d5450afdf67336ac8369a940a31dde1a9e21 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 28 Oct 2014 13:19:14 +0100 Subject: [PATCH 25/90] regex: try and fix relexing for CR-IC-6677 --- .../org/intellij/lang/regexp/_RegExLexer.java | 178 ++++++++---------- .../org/intellij/lang/regexp/RegExpLexer.java | 15 +- .../intellij/lang/regexp/regexp-lexer.flex | 4 +- 3 files changed, 92 insertions(+), 105 deletions(-) diff --git a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java index 531087761da2..d859ab6d3301 100644 --- a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java +++ b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 10/24/14 4:28 PM */ +/* The following code was generated by JFlex 1.4.3 on 10/28/14 12:58 PM */ /* It's an automatically generated code. Do not modify it. */ package org.intellij.lang.regexp; @@ -15,7 +15,7 @@ import java.util.EnumSet; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 10/24/14 4:28 PM from the specification file + * on 10/28/14 12:58 PM from the specification file * /Users/bas/Projects/IntelliJ IDEA Ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex */ class _RegExLexer implements FlexLexer { @@ -62,84 +62,64 @@ class _RegExLexer implements FlexLexer { "\1\46\1\34\4\47\1\22\1\47\1\35\1\47\1\22\1\27\1\22"+ "\1\43\1\27\1\27\1\42\1\47\1\25\1\6\1\21\1\7\54\0"+ "\1\47\12\0\1\47\4\0\1\47\5\0\27\47\1\0\37\47\1\0"+ - "\u01ca\47\4\0\14\47\16\0\5\47\7\0\1\47\1\0\1\47\201\0"+ - "\5\47\1\0\2\47\2\0\4\47\10\0\1\47\1\0\3\47\1\0"+ - "\1\47\1\0\24\47\1\0\123\47\1\0\213\47\10\0\236\47\11\0"+ - "\46\47\2\0\1\47\7\0\47\47\110\0\33\47\5\0\3\47\55\0"+ - "\53\47\25\0\12\53\4\0\2\47\1\0\143\47\1\0\1\47\17\0"+ - "\2\47\7\0\2\47\12\53\3\47\2\0\1\47\20\0\1\47\1\0"+ - "\36\47\35\0\131\47\13\0\1\47\16\0\12\53\41\47\11\0\2\47"+ - "\4\0\1\47\5\0\26\47\4\0\1\47\11\0\1\47\3\0\1\47"+ - "\27\0\31\47\107\0\1\47\1\0\13\47\127\0\66\47\3\0\1\47"+ - "\22\0\1\47\7\0\12\47\4\0\12\53\1\0\7\47\1\0\7\47"+ - "\5\0\10\47\2\0\2\47\2\0\26\47\1\0\7\47\1\0\1\47"+ - "\3\0\4\47\3\0\1\47\20\0\1\47\15\0\2\47\1\0\3\47"+ - "\4\0\12\53\2\47\23\0\6\47\4\0\2\47\2\0\26\47\1\0"+ - "\7\47\1\0\2\47\1\0\2\47\1\0\2\47\37\0\4\47\1\0"+ - "\1\47\7\0\12\53\2\0\3\47\20\0\11\47\1\0\3\47\1\0"+ - "\26\47\1\0\7\47\1\0\2\47\1\0\5\47\3\0\1\47\22\0"+ - "\1\47\17\0\2\47\4\0\12\53\25\0\10\47\2\0\2\47\2\0"+ - "\26\47\1\0\7\47\1\0\2\47\1\0\5\47\3\0\1\47\36\0"+ - "\2\47\1\0\3\47\4\0\12\53\1\0\1\47\21\0\1\47\1\0"+ - "\6\47\3\0\3\47\1\0\4\47\3\0\2\47\1\0\1\47\1\0"+ - "\2\47\3\0\2\47\3\0\3\47\3\0\14\47\26\0\1\47\25\0"+ - "\12\53\25\0\10\47\1\0\3\47\1\0\27\47\1\0\12\47\1\0"+ - "\5\47\3\0\1\47\32\0\2\47\6\0\2\47\4\0\12\53\25\0"+ - "\10\47\1\0\3\47\1\0\27\47\1\0\12\47\1\0\5\47\3\0"+ - "\1\47\40\0\1\47\1\0\2\47\4\0\12\53\1\0\2\47\22\0"+ - "\10\47\1\0\3\47\1\0\51\47\2\0\1\47\20\0\1\47\21\0"+ - "\2\47\4\0\12\53\12\0\6\47\5\0\22\47\3\0\30\47\1\0"+ - "\11\47\1\0\1\47\2\0\7\47\72\0\60\47\1\0\2\47\14\0"+ - "\7\47\11\0\12\53\47\0\2\47\1\0\1\47\2\0\2\47\1\0"+ - "\1\47\2\0\1\47\6\0\4\47\1\0\7\47\1\0\3\47\1\0"+ - "\1\47\1\0\1\47\2\0\2\47\1\0\4\47\1\0\2\47\11\0"+ - "\1\47\2\0\5\47\1\0\1\47\11\0\12\53\2\0\4\47\40\0"+ - "\1\47\37\0\12\53\26\0\10\47\1\0\44\47\33\0\5\47\163\0"+ - "\53\47\24\0\1\47\12\53\6\0\6\47\4\0\4\47\3\0\1\47"+ - "\3\0\2\47\7\0\3\47\4\0\15\47\14\0\1\47\1\0\12\53"+ - "\6\0\46\47\1\0\1\47\5\0\1\47\2\0\53\47\1\0\u014d\47"+ - "\1\0\4\47\2\0\7\47\1\0\1\47\1\0\4\47\2\0\51\47"+ - "\1\0\4\47\2\0\41\47\1\0\4\47\2\0\7\47\1\0\1\47"+ - "\1\0\4\47\2\0\17\47\1\0\71\47\1\0\4\47\2\0\103\47"+ - "\45\0\20\47\20\0\125\47\14\0\u026c\47\2\0\21\47\1\0\32\47"+ - "\5\0\113\47\25\0\15\47\1\0\4\47\16\0\22\47\16\0\22\47"+ - "\16\0\15\47\1\0\3\47\17\0\64\47\43\0\1\47\4\0\1\47"+ - "\3\0\12\53\46\0\12\53\6\0\130\47\10\0\51\47\1\0\1\47"+ - "\5\0\106\47\12\0\35\47\51\0\12\53\36\47\2\0\5\47\13\0"+ - "\54\47\25\0\7\47\10\0\12\53\46\0\27\47\11\0\65\47\53\0"+ - "\12\53\6\0\12\53\15\0\1\47\135\0\57\47\21\0\7\47\4\0"+ - "\12\53\51\0\36\47\15\0\2\47\12\53\54\47\32\0\44\47\34\0"+ - "\12\53\3\0\3\47\12\53\44\47\153\0\4\47\1\0\4\47\3\0"+ - "\2\47\11\0\300\47\100\0\u0116\47\2\0\6\47\2\0\46\47\2\0"+ + "\u013f\47\31\0\162\47\4\0\14\47\16\0\5\47\11\0\1\47\213\0"+ + "\1\47\13\0\1\47\1\0\3\47\1\0\1\47\1\0\24\47\1\0"+ + "\54\47\1\0\46\47\1\0\5\47\4\0\202\47\10\0\105\47\1\0"+ + "\46\47\2\0\2\47\6\0\20\47\41\0\46\47\2\0\1\47\7\0"+ + "\47\47\110\0\33\47\5\0\3\47\56\0\32\47\5\0\13\47\25\0"+ + "\12\53\4\0\2\47\1\0\143\47\1\0\1\47\17\0\2\47\7\0"+ + "\2\47\12\53\3\47\2\0\1\47\20\0\1\47\1\0\36\47\35\0"+ + "\3\47\60\0\46\47\13\0\1\47\u0152\0\66\47\3\0\1\47\22\0"+ + "\1\47\7\0\12\47\4\0\12\53\25\0\10\47\2\0\2\47\2\0"+ + "\26\47\1\0\7\47\1\0\1\47\3\0\4\47\3\0\1\47\36\0"+ + "\2\47\1\0\3\47\4\0\12\53\2\47\23\0\6\47\4\0\2\47"+ + "\2\0\26\47\1\0\7\47\1\0\2\47\1\0\2\47\1\0\2\47"+ + "\37\0\4\47\1\0\1\47\7\0\12\53\2\0\3\47\20\0\11\47"+ + "\1\0\3\47\1\0\26\47\1\0\7\47\1\0\2\47\1\0\5\47"+ + "\3\0\1\47\22\0\1\47\17\0\2\47\4\0\12\53\25\0\10\47"+ + "\2\0\2\47\2\0\26\47\1\0\7\47\1\0\2\47\1\0\5\47"+ + "\3\0\1\47\36\0\2\47\1\0\3\47\4\0\12\53\1\0\1\47"+ + "\21\0\1\47\1\0\6\47\3\0\3\47\1\0\4\47\3\0\2\47"+ + "\1\0\1\47\1\0\2\47\3\0\2\47\3\0\3\47\3\0\10\47"+ + "\1\0\3\47\55\0\11\53\25\0\10\47\1\0\3\47\1\0\27\47"+ + "\1\0\12\47\1\0\5\47\46\0\2\47\4\0\12\53\25\0\10\47"+ + "\1\0\3\47\1\0\27\47\1\0\12\47\1\0\5\47\3\0\1\47"+ + "\40\0\1\47\1\0\2\47\4\0\12\53\25\0\10\47\1\0\3\47"+ + "\1\0\27\47\1\0\20\47\46\0\2\47\4\0\12\53\25\0\22\47"+ + "\3\0\30\47\1\0\11\47\1\0\1\47\2\0\7\47\72\0\60\47"+ + "\1\0\2\47\14\0\7\47\11\0\12\53\47\0\2\47\1\0\1\47"+ + "\2\0\2\47\1\0\1\47\2\0\1\47\6\0\4\47\1\0\7\47"+ + "\1\0\3\47\1\0\1\47\1\0\1\47\2\0\2\47\1\0\4\47"+ + "\1\0\2\47\11\0\1\47\2\0\5\47\1\0\1\47\11\0\12\53"+ + "\2\0\2\47\42\0\1\47\37\0\12\53\26\0\10\47\1\0\42\47"+ + "\35\0\4\47\164\0\42\47\1\0\5\47\1\0\2\47\25\0\12\53"+ + "\6\0\6\47\112\0\46\47\12\0\51\47\7\0\132\47\5\0\104\47"+ + "\5\0\122\47\6\0\7\47\1\0\77\47\1\0\1\47\1\0\4\47"+ + "\2\0\7\47\1\0\1\47\1\0\4\47\2\0\47\47\1\0\1\47"+ + "\1\0\4\47\2\0\37\47\1\0\1\47\1\0\4\47\2\0\7\47"+ + "\1\0\1\47\1\0\4\47\2\0\7\47\1\0\7\47\1\0\27\47"+ + "\1\0\37\47\1\0\1\47\1\0\4\47\2\0\7\47\1\0\47\47"+ + "\1\0\23\47\16\0\11\53\56\0\125\47\14\0\u026c\47\2\0\10\47"+ + "\12\0\32\47\5\0\113\47\25\0\15\47\1\0\4\47\16\0\22\47"+ + "\16\0\22\47\16\0\15\47\1\0\3\47\17\0\64\47\43\0\1\47"+ + "\4\0\1\47\3\0\12\53\46\0\12\53\6\0\130\47\10\0\51\47"+ + "\127\0\35\47\51\0\12\53\36\47\2\0\5\47\u038b\0\154\47\224\0"+ + "\234\47\4\0\132\47\6\0\26\47\2\0\6\47\2\0\46\47\2\0"+ "\6\47\2\0\10\47\1\0\1\47\1\0\1\47\1\0\1\47\1\0"+ "\37\47\2\0\65\47\1\0\7\47\1\0\1\47\3\0\3\47\1\0"+ "\7\47\3\0\4\47\2\0\6\47\4\0\15\47\5\0\3\47\1\0"+ - "\7\47\164\0\1\47\15\0\1\47\20\0\15\47\145\0\1\47\4\0"+ - "\1\47\2\0\12\47\1\0\1\47\3\0\5\47\6\0\1\47\1\0"+ - "\1\47\1\0\1\47\1\0\4\47\1\0\13\47\2\0\4\47\5\0"+ - "\5\47\4\0\1\47\64\0\2\47\u0a7b\0\57\47\1\0\57\47\1\0"+ - "\205\47\6\0\4\47\3\0\2\47\14\0\46\47\1\0\1\47\5\0"+ - "\1\47\2\0\70\47\7\0\1\47\20\0\27\47\11\0\7\47\1\0"+ - "\7\47\1\0\7\47\1\0\7\47\1\0\7\47\1\0\7\47\1\0"+ - "\7\47\1\0\7\47\120\0\1\47\u01d5\0\2\47\52\0\5\47\5\0"+ - "\2\47\4\0\126\47\6\0\3\47\1\0\132\47\1\0\4\47\5\0"+ - "\51\47\3\0\136\47\21\0\33\47\65\0\20\47\u0200\0\u19b6\47\112\0"+ - "\u51cd\47\63\0\u048d\47\103\0\56\47\2\0\u010d\47\3\0\20\47\12\53"+ - "\2\47\24\0\57\47\20\0\31\47\10\0\106\47\61\0\11\47\2\0"+ - "\147\47\2\0\4\47\1\0\4\47\14\0\13\47\115\0\12\47\1\0"+ - "\3\47\1\0\4\47\1\0\27\47\35\0\64\47\16\0\62\47\34\0"+ - "\12\53\30\0\6\47\3\0\1\47\4\0\12\53\34\47\12\0\27\47"+ - "\31\0\35\47\7\0\57\47\34\0\1\47\12\53\46\0\51\47\27\0"+ - "\3\47\1\0\10\47\4\0\12\53\6\0\27\47\3\0\1\47\5\0"+ - "\60\47\1\0\1\47\3\0\2\47\2\0\5\47\2\0\1\47\1\0"+ - "\1\47\30\0\3\47\2\0\13\47\7\0\3\47\14\0\6\47\2\0"+ - "\6\47\2\0\6\47\11\0\7\47\1\0\7\47\221\0\43\47\15\0"+ - "\12\53\6\0\u2ba4\47\14\0\27\47\4\0\61\47\u2104\0\u016e\47\2\0"+ - "\152\47\46\0\7\47\14\0\5\47\5\0\1\47\1\0\12\47\1\0"+ - "\15\47\1\0\5\47\1\0\1\47\1\0\2\47\1\0\2\47\1\0"+ - "\154\47\41\0\u016b\47\22\0\100\47\2\0\66\47\50\0\14\47\164\0"+ - "\5\47\1\0\207\47\23\0\12\53\7\0\32\47\6\0\32\47\13\0"+ - "\131\47\3\0\6\47\2\0\6\47\2\0\6\47\2\0\3\47\43\0"; + "\7\47\164\0\1\47\15\0\1\47\202\0\1\47\4\0\1\47\2\0"+ + "\12\47\1\0\1\47\3\0\5\47\6\0\1\47\1\0\1\47\1\0"+ + "\1\47\1\0\4\47\1\0\3\47\1\0\7\47\3\0\3\47\5\0"+ + "\5\47\u0ebb\0\2\47\52\0\5\47\5\0\2\47\4\0\126\47\6\0"+ + "\3\47\1\0\132\47\1\0\4\47\5\0\50\47\4\0\136\47\21\0"+ + "\30\47\70\0\20\47\u0200\0\u19b6\47\112\0\u51a6\47\132\0\u048d\47\u0773\0"+ + "\u2ba4\47\u215c\0\u012e\47\2\0\73\47\225\0\7\47\14\0\5\47\5\0"+ + "\1\47\1\0\12\47\1\0\15\47\1\0\5\47\1\0\1\47\1\0"+ + "\2\47\1\0\2\47\1\0\154\47\41\0\u016b\47\22\0\100\47\2\0"+ + "\66\47\50\0\14\47\164\0\5\47\1\0\207\47\23\0\12\53\7\0"+ + "\32\47\6\0\32\47\13\0\131\47\3\0\6\47\2\0\6\47\2\0"+ + "\6\47\2\0\3\47\43\0"; /** * Translates characters to character classes @@ -405,7 +385,7 @@ class _RegExLexer implements FlexLexer { /* user code: */ // This adds support for nested states. I'm no JFlex pro, so maybe this is overkill, but it works quite well. - private final ArrayList states = new ArrayList(); + final ArrayList states = new ArrayList(); // This was an idea to use the regex implementation for XML schema regexes (which use a slightly different syntax) // as well, but is currently unfinished as it requires to tweak more places than just the lexer. @@ -480,7 +460,7 @@ class _RegExLexer implements FlexLexer { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 1760) { + while (i < 1348) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); @@ -866,14 +846,22 @@ class _RegExLexer implements FlexLexer { { return RegExpTT.POS_LOOKBEHIND; } case 113: break; + case 20: + { if (allowDanglingMetacharacters) { + yypopstate(); yypushback(1); + } else { + return RegExpTT.BAD_CHARACTER; + } + } + case 114: break; case 73: { return RegExpTT.HEX_CHAR; } - case 114: break; + case 115: break; case 1: { handleOptions(); return RegExpTT.OPTIONS_ON; } - case 115: break; + case 116: break; case 43: { if (yystate() == CLASS2) return RegExpTT.ESC_CHARACTER; while (yylength() > 2 && Integer.parseInt(yytext().toString().substring(1)) > capturingGroupCount) { @@ -881,54 +869,46 @@ class _RegExLexer implements FlexLexer { } return RegExpTT.BACKREF; } - case 116: break; + case 117: break; case 59: { return allowNestedCharacterClasses ? RegExpTT.ANDAND : RegExpTT.CHARACTER; } - case 117: break; + case 118: break; case 2: { yypopstate(); return RegExpTT.COMMENT; } - case 118: break; + case 119: break; case 17: { return RegExpTT.MINUS; } - case 119: break; + case 120: break; case 47: { return RegExpTT.ESC_CTRL_CHARACTER; } - case 120: break; + case 121: break; case 32: { yypopstate(); yypushstate(EMBRACED); return RegExpTT.LBRACE; } - case 121: break; + case 122: break; case 13: { return RegExpTT.QUEST; } - case 122: break; + case 123: break; case 5: { capturingGroupCount++; return RegExpTT.GROUP_BEGIN; } - case 123: break; + case 124: break; case 15: { return RegExpTT.PLUS; } - case 124: break; + case 125: break; case 67: { return RegExpTT.OCT_CHAR; } - case 125: break; + case 126: break; case 39: { yybegin(YYINITIAL); return RegExpTT.QUOTE; } - case 126: break; - case 20: - { if (allowDanglingMetacharacters) { - yypopstate(); yypushback(1); - } else { - return RegExpTT.BAD_CHARACTER; - } - } case 127: break; case 31: { yypopstate(); yypushback(1); diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLexer.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLexer.java index 09ee6a5bd471..1a7fefdce32f 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLexer.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLexer.java @@ -23,12 +23,13 @@ import java.util.EnumSet; public class RegExpLexer extends FlexAdapter { private static final int COMMENT_MODE = 1 << 14; + private static final int NESTED_STATES = 1 << 15; private final EnumSet myCapabilities; public RegExpLexer(EnumSet capabilities) { super(new _RegExLexer(capabilities)); myCapabilities = capabilities; - } + } public void start(@NotNull CharSequence buffer, int startOffset, int endOffset, int initialState) { getFlex().commentMode = (initialState & COMMENT_MODE) != 0 || myCapabilities.contains(RegExpCapability.COMMENT_MODE); @@ -40,8 +41,14 @@ public class RegExpLexer extends FlexAdapter { } public int getState() { - final boolean commentMode = getFlex().commentMode; - final int state = super.getState(); - return commentMode ? state | COMMENT_MODE : state; + final _RegExLexer flex = getFlex(); + int state = super.getState(); + if (flex.commentMode) { + state |= COMMENT_MODE; + } + if (!flex.states.isEmpty()) { + state |= NESTED_STATES; + } + return state; } } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex index d429bd24c6ac..3ad8a7e45394 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex +++ b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex @@ -21,7 +21,7 @@ import java.util.EnumSet; %{ // This adds support for nested states. I'm no JFlex pro, so maybe this is overkill, but it works quite well. - private final ArrayList states = new ArrayList(); + final ArrayList states = new ArrayList(); // This was an idea to use the regex implementation for XML schema regexes (which use a slightly different syntax) // as well, but is currently unfinished as it requires to tweak more places than just the lexer. @@ -202,7 +202,7 @@ HEX_CHAR=[0-9a-fA-F] {RBRACE} { yypopstate(); return RegExpTT.RBRACE; } {ANY} { if (allowDanglingMetacharacters) { - yypopstate(); yypushback(1); + yypopstate(); yypushback(1); } else { return RegExpTT.BAD_CHARACTER; } From 43e1049e593c9114b0467c9df3bc8e57d551c337 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 28 Oct 2014 10:31:14 +0100 Subject: [PATCH 26/90] =?UTF-8?q?update=20gson=20=E2=80=94=202.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/libraries/gson.xml | 4 ++-- lib/gson-2.2.4.jar | Bin 190418 -> 0 bytes lib/gson-2.3.jar | Bin 0 -> 206853 bytes lib/required_for_dist.txt | 2 +- lib/src/gson-2.2.4-sources.jar | Bin 127564 -> 0 bytes lib/src/gson-2.3-sources.jar | Bin 0 -> 139767 bytes 6 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 lib/gson-2.2.4.jar create mode 100644 lib/gson-2.3.jar delete mode 100644 lib/src/gson-2.2.4-sources.jar create mode 100644 lib/src/gson-2.3-sources.jar diff --git a/.idea/libraries/gson.xml b/.idea/libraries/gson.xml index 38af989a0d75..71942d6c4994 100644 --- a/.idea/libraries/gson.xml +++ b/.idea/libraries/gson.xml @@ -1,11 +1,11 @@ - + - + \ No newline at end of file diff --git a/lib/gson-2.2.4.jar b/lib/gson-2.2.4.jar deleted file mode 100644 index 9478253e8cb62cd840a21e1f323b68a507c98d66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190418 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

y)d@^y=s9`#39r;>ehppwbYq0U{|$2}4K7 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

-X*@Tz0V@JE<{JVc!OO7(MCcH*%up!yjaDX0y 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 M$1P8rF<>(NAA9kPA^-pY diff --git a/lib/gson-2.3.jar b/lib/gson-2.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..a7f7ce5e993d6eba344ef9ea2c20ee525d67c7fa GIT binary patch literal 206853 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

8pu^>z)tD3grF12*!9sJy6je0BmJJ!KpauD}5Ii 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 literal 0 HcmV?d00001 diff --git a/lib/required_for_dist.txt b/lib/required_for_dist.txt index a989728f72e1..60d8770051a9 100644 --- a/lib/required_for_dist.txt +++ b/lib/required_for_dist.txt @@ -16,7 +16,7 @@ freemarker.jar httpmime-4.3.2.jar ecj-4.4.jar groovy-all-2.2.1.jar -gson-2.2.4.jar +gson-2.3.jar guava-17.0.jar hamcrest-core-1.3.jar hamcrest-library-1.3.jar diff --git a/lib/src/gson-2.2.4-sources.jar b/lib/src/gson-2.2.4-sources.jar deleted file mode 100644 index 30b13f653e5792dfe19105787826b101039e4fd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127564 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%0D8MXgmqob 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 h&k&!M!-=ei# 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�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 p?tcEV Date: Tue, 28 Oct 2014 13:26:09 +0100 Subject: [PATCH 27/90] continue Firefox RDP --- .../src/org/jetbrains/rpc/CommandProcessor.java | 2 +- .../src/org/jetbrains/rpc/CommandSender.java | 2 ++ .../src/org/jetbrains/rpc/CommandSenderBase.java | 8 ++++++++ .../src/org/jetbrains/io/JsonReaderEx.java | 14 +++++++++----- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java index 49a45554600f..035da28f1685 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java @@ -11,7 +11,7 @@ public abstract class CommandProcessor, ResultReader, MessageProcessor { - public static final Logger LOG = Logger.getInstance(MessageManager.class); + public static final Logger LOG = Logger.getInstance(CommandProcessor.class); private final AtomicInteger currentSequence = new AtomicInteger(); protected final MessageManager messageManager; diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSender.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSender.java index 8df0824db5ae..d1ec67796bf8 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSender.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSender.java @@ -12,6 +12,8 @@ import org.jetbrains.jsonProtocol.RequestWithResponse; public interface CommandSender { ActionCallback send(Request message); + AsyncResult send(@NotNull RequestWithResponse message); + AsyncResult send(@NotNull RequestWithResponse message, @NotNull Function transform); AsyncResult send(@NotNull RequestWithResponse message, diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSenderBase.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSenderBase.java index 381be59ebb93..b1365a1d95a7 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSenderBase.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSenderBase.java @@ -10,6 +10,8 @@ import org.jetbrains.jsonProtocol.Request; import org.jetbrains.jsonProtocol.RequestWithResponse; public abstract class CommandSenderBase implements CommandSender { + private static final Function.Self SELF_TRANSFORM = new Function.Self(); + protected abstract void send(@NotNull Request message, @NotNull AsyncResultCallback callback); @Override @@ -24,6 +26,12 @@ public abstract class CommandSenderBase impleme return send(message, transform, null); } + @Override + public final AsyncResult send(@NotNull RequestWithResponse message) { + //noinspection unchecked + return send(message, SELF_TRANSFORM, null); + } + @Override public final AsyncResult send(@NotNull RequestWithResponse message, @NotNull Function transform, diff --git a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/io/JsonReaderEx.java b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/io/JsonReaderEx.java index eaf83b872be8..806bfdde7deb 100644 --- a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/io/JsonReaderEx.java +++ b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/io/JsonReaderEx.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.Closeable; +import java.util.Arrays; public final class JsonReaderEx implements Closeable { /** The only non-execute prefix this parser permits */ @@ -75,7 +76,7 @@ public final class JsonReaderEx implements Closeable { /* * The nesting stack. Using a manual array rather than an ArrayList saves 20%. */ - private int[] stack = new int[32]; + private int[] stack; private int stackSize = 0; private StringBuilder builder; @@ -88,14 +89,16 @@ public final class JsonReaderEx implements Closeable { } public JsonReaderEx(@NotNull CharSequence in, int start) { - this(in, start, JsonScope.EMPTY_DOCUMENT); + this(in, start, new int[32]); + + stack[stackSize++] = JsonScope.EMPTY_DOCUMENT; } - private JsonReaderEx(@NotNull CharSequence in, int start, int scope) { + private JsonReaderEx(@NotNull CharSequence in, int start, @NotNull int[] stack) { this.in = in; position = start; limit = in.length(); - stack[stackSize++] = scope; + this.stack = stack; } private final static class JsonScope { @@ -162,7 +165,8 @@ public final class JsonReaderEx implements Closeable { throw createParseError("Cannot create sub reader, next token " + nextToken + " is not value"); } - JsonReaderEx subReader = new JsonReaderEx(in, position, stack[stackSize - 1]); + JsonReaderEx subReader = new JsonReaderEx(in, position, Arrays.copyOf(stack, stack.length)); + subReader.stackSize = stackSize; subReader.peeked = peeked; subReader.peekedLong = peekedLong; subReader.peekedNumberLength = peekedNumberLength; From 135e259ee37fe7aac9ad28f9c0f78bb51a8fbe02 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Tue, 28 Oct 2014 16:01:15 +0300 Subject: [PATCH 28/90] deprecate TypeSafeDataProvider --- .../intellij/openapi/actionSystem/TypeSafeDataProvider.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/TypeSafeDataProvider.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/TypeSafeDataProvider.java index ac9ef8b1599a..5919c3928946 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/TypeSafeDataProvider.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/TypeSafeDataProvider.java @@ -22,6 +22,10 @@ */ package com.intellij.openapi.actionSystem; +/** + * @deprecated This API proved to be rather inconvenient + * @see com.intellij.openapi.actionSystem.DataProvider + */ public interface TypeSafeDataProvider { void calcData(DataKey key, DataSink sink); } \ No newline at end of file From 3df87fdae2017b04771f964731e72bf6acacaee9 Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Tue, 28 Oct 2014 16:18:32 +0400 Subject: [PATCH 29/90] Do not let anyone change HTML highlighting attributes (fixes WEB-13867 Can't change color of HTML tag names, WEB-13867 Can't change color of HTML tag names) --- .../ide/highlighter/HtmlFileHighlighter.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/xml/xml-psi-impl/src/com/intellij/ide/highlighter/HtmlFileHighlighter.java b/xml/xml-psi-impl/src/com/intellij/ide/highlighter/HtmlFileHighlighter.java index 715c068d80ae..9496604413e5 100644 --- a/xml/xml-psi-impl/src/com/intellij/ide/highlighter/HtmlFileHighlighter.java +++ b/xml/xml-psi-impl/src/com/intellij/ide/highlighter/HtmlFileHighlighter.java @@ -96,16 +96,18 @@ public class HtmlFileHighlighter extends SyntaxHighlighterBase { public static void registerEmbeddedTokenAttributes(Map _keys1, Map _keys2) { if (_keys1 != null) { - for (Iterator iterator = _keys1.keySet().iterator(); iterator.hasNext();) { - IElementType iElementType = iterator.next(); - keys1.put(iElementType,_keys1.get(iElementType)); + for (IElementType iElementType : _keys1.keySet()) { + if (!keys1.containsKey(iElementType)) { + keys1.put(iElementType, _keys1.get(iElementType)); + } } } if (_keys2 != null) { - for (Iterator iterator = _keys2.keySet().iterator(); iterator.hasNext();) { - IElementType iElementType = iterator.next(); - keys2.put(iElementType,_keys2.get(iElementType)); + for (IElementType iElementType : _keys2.keySet()) { + if (!keys2.containsKey(iElementType)) { + keys2.put(iElementType, _keys2.get(iElementType)); + } } } } From bb676fbd111b7fcecee24b1bc9e09d75b2bb7685 Mon Sep 17 00:00:00 2001 From: Liana Bakradze Date: Tue, 28 Oct 2014 16:47:56 +0300 Subject: [PATCH 30/90] EDU-227 Show balloon with link to tutorials and add action to help --- .../resources/META-INF/plugin.xml | 5 +- .../python/edu/StudyInstructionPainter.java | 2 +- .../python/edu/StudyTaskManager.java | 68 +++++++++++++++++++ .../edu/actions/StudyWatchTutorialAction.java | 17 +++++ 4 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyWatchTutorialAction.java diff --git a/python/edu/learn-python/resources/META-INF/plugin.xml b/python/edu/learn-python/resources/META-INF/plugin.xml index 328ce29de0e3..465d39252d35 100644 --- a/python/edu/learn-python/resources/META-INF/plugin.xml +++ b/python/edu/learn-python/resources/META-INF/plugin.xml @@ -22,8 +22,6 @@ com.intellij.modules.lang com.intellij.modules.python - - @@ -64,6 +62,9 @@ + + + diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java index b78111b442c8..4fa323172bcc 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java @@ -33,7 +33,7 @@ public class StudyInstructionPainter extends EditorEmptyTextPainter { painter.appendLine("Reset current task file with Ctrl + Shift + X").smaller().withBullet(); painter.appendLine("Check task with Alt + Ctrl + Enter").smaller().withBullet(); painter.appendLine("Get hint for the task window using Ctrl + 7").smaller().withBullet(); - painter.appendLine("To see your progress, open the 'Course Description' panel").smaller().withBullet(); + painter.appendLine("To see your progress open the 'Course Description' panel").smaller().withBullet(); painter.draw(g, new PairFunction>() { @Override public Couple fun(Integer width, Integer height) { diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java index 9b935504bd5c..ec7caf38eac4 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java @@ -1,6 +1,12 @@ package com.jetbrains.python.edu; +import com.intellij.ide.BrowserUtil; import com.intellij.ide.ui.UISettings; +import com.intellij.ide.util.PropertiesComponent; +import com.intellij.notification.Notification; +import com.intellij.notification.NotificationListener; +import com.intellij.notification.NotificationType; +import com.intellij.notification.Notifications; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.AnActionListener; import com.intellij.openapi.application.ApplicationManager; @@ -14,11 +20,15 @@ import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.DumbAwareRunnable; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupManager; +import com.intellij.openapi.ui.popup.Balloon; +import com.intellij.openapi.ui.popup.JBPopupAdapter; +import com.intellij.openapi.ui.popup.LightweightWindowEvent; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileAdapter; import com.intellij.openapi.vfs.VirtualFileEvent; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.wm.*; +import com.intellij.util.ui.update.UiNotifyConnector; import com.intellij.util.xmlb.XmlSerializer; import com.jetbrains.python.edu.actions.*; import com.jetbrains.python.edu.course.Course; @@ -32,7 +42,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import javax.swing.event.HyperlinkEvent; import java.lang.reflect.Method; +import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -145,9 +157,65 @@ public class StudyTaskManager implements ProjectComponent, PersistentStateCompon } final ToolWindow studyToolWindow = toolWindowManager.getToolWindow(toolWindowId); + class UrlOpeningListener implements NotificationListener { + private final boolean myExpireNotification; + + public UrlOpeningListener(boolean expireNotification) { + myExpireNotification = expireNotification; + } + + protected void hyperlinkActivated(@NotNull Notification notification, @NotNull HyperlinkEvent event) { + URL url = event.getURL(); + if (url == null) { + BrowserUtil.browse(event.getDescription()); + } + else { + BrowserUtil.browse(url); + } + if (myExpireNotification) { + notification.expire(); + } + } + + @Override + public void hyperlinkUpdate(@NotNull Notification notification, @NotNull HyperlinkEvent event) { + if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { + hyperlinkActivated(notification, event); + } + } + } if (studyToolWindow != null) { StudyUtils.updateStudyToolWindow(myProject); studyToolWindow.show(null); + UiNotifyConnector.doWhenFirstShown(studyToolWindow.getComponent(), new Runnable() { + @Override + public void run() { + if (PropertiesComponent.getInstance().getBoolean("StudyShowPopup", true)) { + String content = "If you'd like to learn" + + " more about PyCharm " + + "Educational Edition, " + + "click here to watch a tutorial"; + final Notification notification = + new Notification("Watch Tutorials!", "", content, NotificationType.INFORMATION, new UrlOpeningListener(true)); + Notifications.Bus.notify(notification); + Balloon balloon = notification.getBalloon(); + if (balloon != null) { + balloon.addListener(new JBPopupAdapter() { + @Override + public void onClosed(LightweightWindowEvent event) { + notification.expire(); + } + }); + } + notification.whenExpired(new Runnable() { + @Override + public void run() { + PropertiesComponent.getInstance().setValue("StudyShowPopup", String.valueOf(false)); + } + }); + } + } + }); } addShortcut(StudyNextWindowAction.SHORTCUT, StudyNextWindowAction.ACTION_ID); addShortcut(StudyPrevWindowAction.SHORTCUT, StudyPrevWindowAction.ACTION_ID); diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyWatchTutorialAction.java b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyWatchTutorialAction.java new file mode 100644 index 000000000000..abe38b9708cb --- /dev/null +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyWatchTutorialAction.java @@ -0,0 +1,17 @@ +package com.jetbrains.python.edu.actions; + +import com.intellij.ide.BrowserUtil; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.project.DumbAwareAction; +import org.jetbrains.annotations.NotNull; + +public class StudyWatchTutorialAction extends DumbAwareAction { + public StudyWatchTutorialAction() { + super("Learn more about PyCharm Educational Edition", null, null); + } + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + BrowserUtil.browse("http://www.jetbrains.com/pycharm-educational/quickstart/"); + } +} From e6a18af6cbbc69c24004b4ad2fbc38f9650cc65a Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 28 Oct 2014 10:27:08 +0100 Subject: [PATCH 31/90] fix dialog presentation: message is expected to be inside html --- .../src/com/intellij/execution/runners/ExecutionUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java b/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java index 5a395ab5dd79..1c3d265e4c86 100644 --- a/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java +++ b/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java @@ -122,7 +122,7 @@ public class ExecutionUtil { toolWindowManager.notifyByBalloon(toolWindowId, MessageType.ERROR, fullMessage, null, finalListener); } else { - Messages.showErrorDialog(project, fullMessage, ""); + Messages.showErrorDialog(project, UIUtil.toHtml(fullMessage), ""); } NotificationListener notificationListener = ObjectUtils.tryCast(finalListener, NotificationListener.class); ourNotificationGroup.createNotification(title, finalDescription, NotificationType.ERROR, notificationListener).notify(project); From 8cf9b22f149fd0fa1c82a1e6e801c0d49daffdfc Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 28 Oct 2014 14:29:17 +0100 Subject: [PATCH 32/90] dynamic classpath supported for fork mode (IDEA-120630) --- .../intellij/execution/junit/TestObject.java | 62 ++++++++++++++++--- .../execution/junit/JUnitForkedStarter.java | 51 ++++++++++++--- 2 files changed, 97 insertions(+), 16 deletions(-) diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index eb9de875c346..896a1aa24020 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -48,7 +48,9 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; +import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.JavaSdkType; +import com.intellij.openapi.projectRoots.JdkUtil; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.ex.JavaSdkUtil; import com.intellij.openapi.roots.ModuleRootManager; @@ -60,9 +62,13 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.util.text.StringUtilRt; import com.intellij.openapi.vfs.CharsetToolkit; import com.intellij.psi.*; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.GlobalSearchScopesCore; import com.intellij.refactoring.listeners.RefactoringElementListener; +import com.intellij.rt.execution.CommandLineWrapper; import com.intellij.rt.execution.junit.IDEAJUnitListener; import com.intellij.rt.execution.junit.JUnitStarter; import com.intellij.util.Function; @@ -422,7 +428,29 @@ public abstract class TestObject implements JavaCommandLine { final String workingDirectory = myConfiguration.getWorkingDirectory(); return JUnitConfiguration.TEST_PACKAGE.equals(myConfiguration.getPersistentData().TEST_OBJECT) && myConfiguration.getPersistentData().getScope() != TestSearchScope.SINGLE_MODULE && - ("$" + PathMacroUtil.MODULE_DIR_MACRO_NAME + "$").equals(workingDirectory); + ("$" + PathMacroUtil.MODULE_DIR_MACRO_NAME + "$").equals(workingDirectory) && + spansMultipleModules(); + } + + private boolean spansMultipleModules() { + final String qualifiedName = myConfiguration.getPackage(); + if (qualifiedName != null) { + final Project project = myConfiguration.getProject(); + final PsiPackage aPackage = JavaPsiFacade.getInstance(project).findPackage(qualifiedName); + if (aPackage != null) { + final TestSearchScope scope = myConfiguration.getPersistentData().getScope(); + if (scope != null) { + final SourceScope sourceScope = scope.getSourceScope(myConfiguration); + if (sourceScope != null) { + final GlobalSearchScope configurationSearchScope = GlobalSearchScopesCore.projectTestScope(project).intersectWith( + sourceScope.getGlobalSearchScope()); + final PsiDirectory[] directories = aPackage.getDirectories(configurationSearchScope); + return directories.length > 1; + } + } + } + } + return false; } private void appendForkInfo(Executor executor) throws ExecutionException { @@ -452,12 +480,22 @@ public abstract class TestObject implements JavaCommandLine { final File tempFile = FileUtil.createTempFile("command.line", "", true); final PrintWriter writer = new PrintWriter(tempFile, CharsetToolkit.UTF8); try { + if (JdkUtil.useDynamicClasspath(myConfiguration.getProject())) { + String classpath = PathUtil.getJarPathForClass(CommandLineWrapper.class); + final String utilRtPath = PathUtil.getJarPathForClass(StringUtilRt.class); + if (!classpath.equals(utilRtPath)) { + classpath += File.pathSeparator + utilRtPath; + } + writer.println(classpath); + } + else { + writer.println(""); + } + writer.println(((JavaSdkType)jdk.getSdkType()).getVMExecutablePath(jdk)); for (String vmParameter : javaParameters.getVMParametersList().getList()) { writer.println(vmParameter); } - writer.println("-classpath"); - writer.println(javaParameters.getClassPath().getPathsString()); } finally { writer.close(); @@ -524,6 +562,9 @@ public abstract class TestObject implements JavaCommandLine { JUnitStarter.printClassesList(testNames, packageName, category, myTempFile); if (perModule != null && perModule.size() > 1) { + final String classpath = myConfiguration.getPersistentData().getScope() == TestSearchScope.WHOLE_PROJECT + ? null : myJavaParameters.getClassPath().getPathsString(); + final PrintWriter wWriter = new PrintWriter(myWorkingDirsFile, CharsetToolkit.UTF8); try { wWriter.println(packageName); @@ -531,11 +572,16 @@ public abstract class TestObject implements JavaCommandLine { final String moduleDir = PathMacroUtil.getModuleDir(module.getModuleFilePath()); wWriter.println(moduleDir); - final JavaParameters parameters = new JavaParameters(); - JavaParametersUtil.configureModule(module, parameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS, - myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null); - configureAdditionalClasspath(parameters); - wWriter.println(parameters.getClassPath().getPathsString()); + if (classpath == null) { + final JavaParameters parameters = new JavaParameters(); + configureAdditionalClasspath(parameters); + JavaParametersUtil.configureModule(module, parameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS, + myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null); + wWriter.println(parameters.getClassPath().getPathsString()); + } else { + wWriter.println(classpath); + } + final List classNames = perModule.get(module); wWriter.println(classNames.size()); for (String className : classNames) { diff --git a/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitForkedStarter.java b/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitForkedStarter.java index e79ab8e677b3..6b58cd009b87 100644 --- a/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitForkedStarter.java +++ b/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitForkedStarter.java @@ -15,6 +15,7 @@ */ package com.intellij.rt.execution.junit; +import com.intellij.rt.execution.CommandLineWrapper; import com.intellij.rt.execution.junit.segments.SegmentedOutputStream; import java.io.*; @@ -76,6 +77,7 @@ public class JUnitForkedStarter { String path) throws Exception { final List parameters = new ArrayList(); final BufferedReader bufferedReader = new BufferedReader(new FileReader(path)); + final String dynamicClasspath = bufferedReader.readLine(); try { String line; while ((line = bufferedReader.readLine()) != null) { @@ -99,7 +101,7 @@ public class JUnitForkedStarter { if (workingDirsPath == null || new File(workingDirsPath).length() == 0) { final List children = testRunner.getChildTests(description); final boolean forkTillMethod = forkMode.equalsIgnoreCase("method"); - result = processChildren(isJUnit4, listeners, out, err, parameters, testRunner, children, 0, forkTillMethod, null, System.getProperty("java.class.path")); + result = processChildren(isJUnit4, listeners, out, err, parameters, testRunner, children, 0, forkTillMethod, null, System.getProperty("java.class.path"), dynamicClasspath); } else { final BufferedReader perDirReader = new BufferedReader(new FileReader(workingDirsPath)); try { @@ -129,7 +131,7 @@ public class JUnitForkedStarter { JUnitStarter.printClassesList(classNames, packageName + ", working directory: \'" + workingDir + "\'", "", tempFile); childResult = runChild(isJUnit4, listeners, out, err, parameters, "@" + tempFile.getAbsolutePath(), dir, - String.valueOf(testRunner.getRegistry().getKnownObject(rootDescriptor) - 1), classpath); + String.valueOf(testRunner.getRegistry().getKnownObject(rootDescriptor) - 1), classpath, dynamicClasspath); } else { final List children = new ArrayList(testRunner.getChildTests(description)); for (Iterator iterator = children.iterator(); iterator.hasNext(); ) { @@ -138,7 +140,7 @@ public class JUnitForkedStarter { } } final boolean forkTillMethod = forkMode.equalsIgnoreCase("method"); - childResult = processChildren(isJUnit4, listeners, out, err, parameters, testRunner, children, result, forkTillMethod, dir, classpath); + childResult = processChildren(isJUnit4, listeners, out, err, parameters, testRunner, children, result, forkTillMethod, dir, classpath, dynamicClasspath); } result = Math.min(childResult, result); } @@ -180,7 +182,7 @@ public class JUnitForkedStarter { IdeaTestRunner testRunner, List children, int result, - boolean forkTillMethod, File workingDir, String classpath) throws IOException, InterruptedException { + boolean forkTillMethod, File workingDir, String classpath, String dynamicClasspath) throws IOException, InterruptedException { for (int i = 0, argsLength = children.size(); i < argsLength; i++) { final Object child = children.get(i); final List childTests = testRunner.getChildTests(child); @@ -188,11 +190,11 @@ public class JUnitForkedStarter { if (childTests.isEmpty() || !forkTillMethod) { final int startIndex = testRunner.getRegistry().getKnownObject(child); childResult = - runChild(isJUnit4, listeners, out, err, parameters, testRunner.getStartDescription(child), workingDir, String.valueOf(startIndex), classpath); + runChild(isJUnit4, listeners, out, err, parameters, testRunner.getStartDescription(child), workingDir, String.valueOf(startIndex), classpath, dynamicClasspath); } else { childResult = - processChildren(isJUnit4, listeners, out, err, parameters, testRunner, childTests, result, forkTillMethod, workingDir, classpath); + processChildren(isJUnit4, listeners, out, err, parameters, testRunner, childTests, result, forkTillMethod, workingDir, classpath, dynamicClasspath); } result = Math.min(childResult, result); } @@ -207,7 +209,8 @@ public class JUnitForkedStarter { String description, File workingDir, String startIndex, - String classpath) throws IOException, InterruptedException { + String classpath, + String dynamicClasspath) throws IOException, InterruptedException { //noinspection SSBasedInspection final File tempFile = File.createTempFile("fork", "test"); final String testOutputPath = tempFile.getAbsolutePath(); @@ -215,7 +218,39 @@ public class JUnitForkedStarter { final ProcessBuilder builder = new ProcessBuilder(); builder.add(parameters); builder.add("-classpath"); - builder.add(classpath); + if (dynamicClasspath.length() > 0) { + try { + final File classpathFile = File.createTempFile("classpath", null); + classpathFile.deleteOnExit(); + final PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(classpathFile), "UTF-8")); + try { + int idx = 0; + while (idx < classpath.length()) { + final int endIdx = classpath.indexOf(File.pathSeparator, idx); + if (endIdx < 0) { + writer.println(classpath.substring(idx)); + break; + } + writer.println(classpath.substring(idx, endIdx)); + idx = endIdx + File.pathSeparator.length(); + } + } + finally { + writer.close(); + } + + builder.add(dynamicClasspath); + builder.add(CommandLineWrapper.class.getName()); + builder.add(classpathFile.getAbsolutePath()); + } + catch (Throwable e) { + builder.add(classpath); + } + } + else { + builder.add(classpath); + } + builder.add(JUnitForkedStarter.class.getName()); builder.add(testOutputPath); builder.add(startIndex); From c0519d634d1fae061ab142845f49462e48f8981b Mon Sep 17 00:00:00 2001 From: Liana Bakradze Date: Tue, 28 Oct 2014 16:58:15 +0300 Subject: [PATCH 33/90] changed case in action names --- .../plugins/coursecreator/actions/CCAddTaskWindow.java | 2 +- python/edu/learn-python/resources/META-INF/plugin.xml | 2 +- .../src/com/jetbrains/python/edu/editor/StudyEditor.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java index 340add19f7d8..3df30b7a4608 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java @@ -24,7 +24,7 @@ public class CCAddTaskWindow extends DumbAwareAction { private static final Logger LOG = Logger.getInstance(CCAddTaskWindow.class); public CCAddTaskWindow() { - super("Add Problem To Solve", "Add problem to solve", null); + super("Add Problem to Solve", "Add problem to solve", null); } diff --git a/python/edu/learn-python/resources/META-INF/plugin.xml b/python/edu/learn-python/resources/META-INF/plugin.xml index 465d39252d35..62f5bdc6ef85 100644 --- a/python/edu/learn-python/resources/META-INF/plugin.xml +++ b/python/edu/learn-python/resources/META-INF/plugin.xml @@ -55,7 +55,7 @@ description="Refresh current task"/> - diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java index e84539773aa6..1deeb4e0de39 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java @@ -196,7 +196,7 @@ public class StudyEditor implements TextEditor { myPrevTaskButton = addButton(taskActionsPanel, "Previous Task (Ctrl + <)", StudyIcons.Prev); myNextTaskButton = addButton(taskActionsPanel, "Next Task (Ctrl + >)", AllIcons.Actions.Forward); myRefreshButton = addButton(taskActionsPanel, "Reset Task File (Ctrl + Shift + X)", AllIcons.Actions.Refresh); - JButton myShowHintButton = addButton(taskActionsPanel, "Show Hint For Task Window (Ctrl + 7)", StudyIcons.ShowHint); + JButton myShowHintButton = addButton(taskActionsPanel, "Show Hint for Task Window (Ctrl + 7)", StudyIcons.ShowHint); if (!taskFile.getTask().getUserTests().isEmpty()) { JButton runButton = addButton(taskActionsPanel, "Run", AllIcons.General.Run); runButton.addActionListener(new ActionListener() { From 7f87ee264d44f61905170cb9fbecf90ff3a2b14a Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Tue, 28 Oct 2014 17:34:38 +0300 Subject: [PATCH 34/90] IDEA-130032 Compare with screen smooshes commit messages. * font size is a little bigger on windows 8.1 and several others OS; * titled border may disappear if there is no enough space --- .../CompareWithSelectedRevisionAction.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/CompareWithSelectedRevisionAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/CompareWithSelectedRevisionAction.java index 2fb5b60e0d39..a4acd1d4864b 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/CompareWithSelectedRevisionAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/CompareWithSelectedRevisionAction.java @@ -28,10 +28,7 @@ import com.intellij.openapi.vcs.diff.DiffProvider; import com.intellij.openapi.vcs.history.*; import com.intellij.openapi.vcs.impl.VcsBackgroundableActions; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.ui.IdeBorderFactory; -import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.SpeedSearchBase; -import com.intellij.ui.TableUtil; +import com.intellij.ui.*; import com.intellij.ui.dualView.TreeTableView; import com.intellij.ui.table.TableView; import com.intellij.ui.treeStructure.treetable.ListTreeTableModelOnColumns; @@ -322,10 +319,12 @@ public class CompareWithSelectedRevisionAction extends AbstractVcsAction { JPanel jPanel = new JPanel(new BorderLayout()); final JScrollPane textScrollPane = ScrollPaneFactory.createScrollPane(textArea); - textScrollPane.setBorder(IdeBorderFactory.createTitledBorder(VcsBundle.message("border.selected.revision.commit.message"), false - )); - jPanel.add(textScrollPane, BorderLayout.SOUTH); - + // text on title border has some problems if text font size is bigger than expected. + final JLabel commentLabel = new JLabel(VcsBundle.message("border.selected.revision.commit.message")); + jPanel.add(commentLabel, BorderLayout.NORTH); + commentLabel.setBorder(IdeBorderFactory.createBorder(SideBorder.TOP | SideBorder.LEFT | SideBorder.BOTTOM)); + textScrollPane.setBorder(null); + jPanel.add(textScrollPane, BorderLayout.CENTER); jPanel.setPreferredSize(new Dimension(300, 100)); return jPanel; } From 4b8c4cea5199d54ee47add88743d011ffdb93531 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Tue, 28 Oct 2014 17:38:47 +0300 Subject: [PATCH 35/90] UI: one simple way to control toolwindow toolbars visibility 3 --- .../openapi/vcs/impl/ProjectLevelVcsManagerImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java index 45f550271825..6886dd5098d8 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java @@ -16,6 +16,7 @@ package com.intellij.openapi.vcs.impl; import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.components.ProjectComponent; @@ -33,6 +34,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ex.ProjectEx; import com.intellij.openapi.roots.FileIndexFacade; import com.intellij.openapi.startup.StartupManager; +import com.intellij.openapi.ui.SimpleToolWindowPanel; import com.intellij.openapi.util.*; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; @@ -57,6 +59,7 @@ import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; +import com.intellij.openapi.wm.ex.ToolWindowEx; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentFactory; import com.intellij.ui.content.ContentManager; @@ -238,6 +241,9 @@ public class ProjectLevelVcsManagerImpl extends ProjectLevelVcsManagerEx impleme toolWindowManager.registerToolWindow(ToolWindowId.VCS, true, ToolWindowAnchor.BOTTOM, myProject, true); myContentManager = toolWindow.getContentManager(); toolWindow.setIcon(AllIcons.Toolwindows.VcsSmallTab); + DefaultActionGroup gearActions = new DefaultActionGroup(); + gearActions.addAction(SimpleToolWindowPanel.createToggleToolbarAction(myProject, toolWindow)).setAsSecondary(true); + ((ToolWindowEx)toolWindow).setAdditionalGearActions(gearActions); toolWindow.installWatcher(myContentManager); } else { From afe016bf6f43425c29aebd02a8f07cc09fdb63a3 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Tue, 28 Oct 2014 17:39:54 +0300 Subject: [PATCH 36/90] DFM: use editor scheme foreground color for progress messages --- .../wm/impl/status/InfoAndProgressPanel.java | 2 +- .../impl/status/PresentationModeProgressPanel.java | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java index 386eae1ef478..0aa196baedef 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java @@ -388,7 +388,7 @@ public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidge final Component anchor = getAnchor(pane); - JBPopupFactory.getInstance().createBalloonBuilder(panel.getRootPanel()) + JBPopupFactory.getInstance().createBalloonBuilder(panel.getProgressPanel()) .setFadeoutTime(0) .setFillColor(Gray.TRANSPARENT) .setShowCallout(false) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java index 9f82a2f60cdf..f62910ffd556 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java @@ -16,6 +16,7 @@ package com.intellij.openapi.wm.impl.status; import com.intellij.icons.AllIcons; +import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.ui.popup.IconButton; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.InplaceButton; @@ -48,6 +49,7 @@ public class PresentationModeProgressPanel { myText.setIcon(EmptyIcon.create(1, 16)); myText2.setIcon(EmptyIcon.create(1, 16)); } + public void update() { UIUtil.invokeLaterIfNeeded(new Runnable() { @Override @@ -57,7 +59,15 @@ public class PresentationModeProgressPanel { }); } + @NotNull + public Color getTextForeground() { + return EditorColorsManager.getInstance().getGlobalScheme().getDefaultForeground(); + } + private void updateImpl() { + myText.setForeground(getTextForeground()); + myText2.setForeground(getTextForeground()); + if (!StringUtil.equals(myText.getText(), myProgress.getText())) { myText.setText(myProgress.getText()); } @@ -74,7 +84,8 @@ public class PresentationModeProgressPanel { } } - public JPanel getRootPanel() { + @NotNull + public JComponent getProgressPanel() { return myRootPanel; } From bf123d7252eb6fa619352c1faba66a46be306536 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Tue, 28 Oct 2014 15:39:23 +0100 Subject: [PATCH 37/90] enabling process pre-load optimization by default --- platform/util/resources/misc/registry.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index d9f47ad0209a..405bd3383775 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -198,7 +198,7 @@ compiler.process.use.memory.temp.cache=true compiler.process.use.memory.temp.cache.description=Store temporary data in memory for faster compilation;\ requires larger heap size for the build process. If parallel build is enabled, the option is ignored and temp data is always stored in memory. -compiler.process.preload=false +compiler.process.preload=true compiler.process.preload.description=After build finishes, the IDE will pre-load and leave waiting in memory the build process for the next compilation. This will save time for process start and project model loading (may be noticeable for big projects).\ compiler.process.debug.port=-1 From da577a31736273a7a905f3f170a709221336ef3e Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Tue, 28 Oct 2014 17:56:47 +0400 Subject: [PATCH 38/90] Enable "Only VCS change checkbox" if file has only deletion changes (IDEA-131975). It will allow to optimize imports through "reformat code dialog" on file having only deletion changes with no reformatting (Previously checkbox was disabled and optimize imports can only be used with whole file reformatting) --- .../actions/FormatChangedTextUtil.java | 10 +--------- .../ReformatOnlyVcsChangedTextTest.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/actions/FormatChangedTextUtil.java b/platform/lang-impl/src/com/intellij/codeInsight/actions/FormatChangedTextUtil.java index dadafc7a7d84..72fe48a46e42 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/actions/FormatChangedTextUtil.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/FormatChangedTextUtil.java @@ -86,15 +86,7 @@ public class FormatChangedTextUtil { return false; } final List ranges = lineStatusTracker.getRanges(); - if (ranges == null || ranges.isEmpty()) { - return false; - } - for (Range range : ranges) { - if (range.getType() != Range.DELETED) { - return true; - } - } - return false; + return !ranges.isEmpty(); } /** diff --git a/platform/platform-tests/testSrc/com/intellij/codeInsight/actions/ReformatOnlyVcsChangedTextTest.java b/platform/platform-tests/testSrc/com/intellij/codeInsight/actions/ReformatOnlyVcsChangedTextTest.java index d66988ab2ef5..4b7ac648fd95 100644 --- a/platform/platform-tests/testSrc/com/intellij/codeInsight/actions/ReformatOnlyVcsChangedTextTest.java +++ b/platform/platform-tests/testSrc/com/intellij/codeInsight/actions/ReformatOnlyVcsChangedTextTest.java @@ -141,6 +141,24 @@ public class ReformatOnlyVcsChangedTextTest extends LightPlatformTestCase { ); } + public void testNoReformatOn_DeletionModification() throws IOException { + doTest( + "public class B {\n" + + " int a = 3;\n" + + " String text;\n" + + " Object last = null;\n" + + " Object first = null;\n" + + " Object second = null;\n" + + "}", + + "public class B {\n" + + " int a = 3;\n" + + " String text;\n" + + " Object last = null;\n" + + "}" + ); + } + public void testModification() throws IOException { doTest( "public class B {\n" + From af4004f538caa2c6900c4a9bbe568ba555f5aed5 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 28 Oct 2014 15:12:47 +0100 Subject: [PATCH 39/90] =?UTF-8?q?EncodingProjectManager=20=E2=80=94=20don'?= =?UTF-8?q?t=20save=20defaults?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../encoding/EncodingProjectManagerImpl.java | 77 ++++++++++++------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/EncodingProjectManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/EncodingProjectManagerImpl.java index 722865c2ff07..c61bd9e79362 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/EncodingProjectManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/EncodingProjectManagerImpl.java @@ -67,6 +67,10 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement private Charset myDefaultCharsetForPropertiesFiles; private final SimpleModificationTracker myModificationTracker = new SimpleModificationTracker(); + // we should avoid changed file + private String myOldUTFGuessing; + private boolean myNative2AsciiForPropertiesFilesWasSpecified; + public EncodingProjectManagerImpl(Project project, PsiDocumentManager documentManager) { myProject = project; documentManager.addListener(new PsiDocumentManager.Listener() { @@ -87,23 +91,32 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement @Override public Element getState() { Element element = new Element("x"); - List files = new ArrayList(myMapping.keySet()); - ContainerUtil.quickSort(files, new Comparator() { - @Override - public int compare(final VirtualFile o1, final VirtualFile o2) { - if (o1 == null || o2 == null) return o1 == null ? o2 == null ? 0 : 1 : -1; - return o1.getPath().compareTo(o2.getPath()); + if (!myMapping.isEmpty()) { + List files = new ArrayList(myMapping.keySet()); + ContainerUtil.quickSort(files, new Comparator() { + @Override + public int compare(final VirtualFile o1, final VirtualFile o2) { + if (o1 == null || o2 == null) return o1 == null ? o2 == null ? 0 : 1 : -1; + return o1.getPath().compareTo(o2.getPath()); + } + }); + for (VirtualFile file : files) { + Charset charset = myMapping.get(file); + Element child = new Element("file"); + element.addContent(child); + child.setAttribute("url", file == null ? PROJECT_URL : file.getUrl()); + child.setAttribute("charset", charset.name()); } - }); - for (VirtualFile file : files) { - Charset charset = myMapping.get(file); - Element child = new Element("file"); - element.addContent(child); - child.setAttribute("url", file == null ? PROJECT_URL : file.getUrl()); - child.setAttribute("charset", charset.name()); } - element.setAttribute("useUTFGuessing", Boolean.toString(true)); - element.setAttribute("native2AsciiForPropertiesFiles", Boolean.toString(myNative2AsciiForPropertiesFiles)); + + if (myOldUTFGuessing != null) { + element.setAttribute("useUTFGuessing", myOldUTFGuessing); + } + + if (myNative2AsciiForPropertiesFiles || myNative2AsciiForPropertiesFilesWasSpecified) { + element.setAttribute("native2AsciiForPropertiesFiles", Boolean.toString(myNative2AsciiForPropertiesFiles)); + } + if (myDefaultCharsetForPropertiesFiles != null) { element.setAttribute("defaultCharsetForPropertiesFiles", myDefaultCharsetForPropertiesFiles.name()); } @@ -112,25 +125,31 @@ public class EncodingProjectManagerImpl extends EncodingProjectManager implement @Override public void loadState(Element element) { - List files = element.getChildren("file"); - final Map mapping = new HashMap(); - for (Element fileElement : files) { - String url = fileElement.getAttributeValue("url"); - String charsetName = fileElement.getAttributeValue("charset"); - Charset charset = CharsetToolkit.forName(charsetName); - if (charset == null) continue; - VirtualFile file = url.equals(PROJECT_URL) ? null : VirtualFileManager.getInstance().findFileByUrl(url); - if (file != null || url.equals(PROJECT_URL)) { - mapping.put(file, charset); - } - } myMapping.clear(); - myMapping.putAll(mapping); + List files = element.getChildren("file"); + if (!files.isEmpty()) { + Map mapping = new HashMap(); + for (Element fileElement : files) { + String url = fileElement.getAttributeValue("url"); + String charsetName = fileElement.getAttributeValue("charset"); + Charset charset = CharsetToolkit.forName(charsetName); + if (charset == null) continue; + VirtualFile file = url.equals(PROJECT_URL) ? null : VirtualFileManager.getInstance().findFileByUrl(url); + if (file != null || url.equals(PROJECT_URL)) { + mapping.put(file, charset); + } + } + myMapping.putAll(mapping); + } - myNative2AsciiForPropertiesFiles = Boolean.parseBoolean(element.getAttributeValue("native2AsciiForPropertiesFiles")); + String native2AsciiForPropertiesFiles = element.getAttributeValue("native2AsciiForPropertiesFiles"); + myNative2AsciiForPropertiesFiles = Boolean.parseBoolean(native2AsciiForPropertiesFiles); myDefaultCharsetForPropertiesFiles = CharsetToolkit.forName(element.getAttributeValue("defaultCharsetForPropertiesFiles")); myModificationTracker.incModificationCount(); + + myOldUTFGuessing = element.getAttributeValue("useUTFGuessing"); + myNative2AsciiForPropertiesFilesWasSpecified = native2AsciiForPropertiesFiles != null; } @Override From 537d2a7267a5659fb252fcb51869a7095d00fab7 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 28 Oct 2014 15:13:33 +0100 Subject: [PATCH 40/90] regex: also fix relexing when using capturing groups for CR-IC-6678 --- RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java | 6 +++--- RegExpSupport/src/org/intellij/lang/regexp/RegExpLexer.java | 4 ++++ .../src/org/intellij/lang/regexp/regexp-lexer.flex | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java index d859ab6d3301..cc1fd353a327 100644 --- a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java +++ b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 10/28/14 12:58 PM */ +/* The following code was generated by JFlex 1.4.3 on 10/28/14 3:07 PM */ /* It's an automatically generated code. Do not modify it. */ package org.intellij.lang.regexp; @@ -15,7 +15,7 @@ import java.util.EnumSet; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 10/28/14 12:58 PM from the specification file + * on 10/28/14 3:07 PM from the specification file * /Users/bas/Projects/IntelliJ IDEA Ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex */ class _RegExLexer implements FlexLexer { @@ -391,7 +391,7 @@ class _RegExLexer implements FlexLexer { // as well, but is currently unfinished as it requires to tweak more places than just the lexer. private boolean xmlSchemaMode; - private int capturingGroupCount = 0; + int capturingGroupCount = 0; private boolean allowDanglingMetacharacters; private boolean allowNestedCharacterClasses; diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLexer.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLexer.java index 1a7fefdce32f..b028a08df024 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLexer.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLexer.java @@ -24,6 +24,7 @@ public class RegExpLexer extends FlexAdapter { private static final int COMMENT_MODE = 1 << 14; private static final int NESTED_STATES = 1 << 15; + private static final int CAPTURING_GROUPS = 1 << 16; private final EnumSet myCapabilities; public RegExpLexer(EnumSet capabilities) { @@ -49,6 +50,9 @@ public class RegExpLexer extends FlexAdapter { if (!flex.states.isEmpty()) { state |= NESTED_STATES; } + if (flex.capturingGroupCount != 0) { + state |= CAPTURING_GROUPS; + } return state; } } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex index 3ad8a7e45394..2d5daf7f65ab 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex +++ b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex @@ -27,7 +27,7 @@ import java.util.EnumSet; // as well, but is currently unfinished as it requires to tweak more places than just the lexer. private boolean xmlSchemaMode; - private int capturingGroupCount = 0; + int capturingGroupCount = 0; private boolean allowDanglingMetacharacters; private boolean allowNestedCharacterClasses; From d22630881ca41860054ef064c7ecbbe93de47fe9 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 28 Oct 2014 17:14:25 +0300 Subject: [PATCH 41/90] library table: load libraries from configuration files silently only if they weren't modified via API before that --- .../intellij/openapi/roots/impl/libraries/LibraryTableBase.java | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTableBase.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTableBase.java index 86bdce6a4a9d..1bc1c4c1c32c 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTableBase.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryTableBase.java @@ -156,6 +156,7 @@ public abstract class LibraryTableBase implements PersistentStateComponent addedLibraries = ContainerUtil.newIdentityTroveSet(model.myLibraries); From c168c8b0ab37879a0dada878608123777f90ab8d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 28 Oct 2014 15:10:13 +0100 Subject: [PATCH 42/90] search for tests in single module by default --- .../com/intellij/execution/testframework/TestSearchScope.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/testRunner/src/com/intellij/execution/testframework/TestSearchScope.java b/platform/testRunner/src/com/intellij/execution/testframework/TestSearchScope.java index 33cbb108efe1..efa2d8855123 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/TestSearchScope.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/TestSearchScope.java @@ -65,7 +65,7 @@ public interface TestSearchScope { class Wrapper implements JDOMExternalizable { @NonNls private static final String DEFAULT_NAME = "defaultName"; - private TestSearchScope myScope = MODULE_WITH_DEPENDENCIES; + private TestSearchScope myScope = SINGLE_MODULE; @NonNls private static final String WHOLE_PROJECT_NAE = "wholeProject"; @NonNls private static final String SINGLE_MODULE_NAME = "singleModule"; @NonNls private static final String MODULE_WITH_DEPENDENCIES_NAME = "moduleWithDependencies"; From ff76e6fabdff424f2a18453bd585d9dbc679e7bb Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 27 Oct 2014 15:40:15 +0300 Subject: [PATCH 43/90] vcs: cleanup --- .../unscramble/AnnotateStackTraceAction.java | 91 ++++++++++--------- 1 file changed, 50 insertions(+), 41 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java b/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java index 450b82e3cddc..bda0e16bc7a1 100644 --- a/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java +++ b/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java @@ -55,6 +55,7 @@ import com.intellij.util.text.DateFormatUtil; import com.intellij.vcsUtil.VcsUtil; import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.awt.*; import java.util.*; @@ -218,51 +219,59 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { for (VirtualFile file : files) { indicator.checkCanceled(); - final AbstractVcs vcs = VcsUtil.getVcsFor(myEditor.getProject(), file); - FilePath filePath = VcsContextFactory.SERVICE.getInstance().createFilePathOn(file); - if (vcs != null) { - try { - final VcsHistoryProvider provider = vcs.getVcsHistoryProvider(); - final VcsHistorySession session; - if (provider != null) { - session = provider.createSessionFor(filePath); - final List list; - if (session != null) { - list = session.getRevisionList(); - final List lines = files2lines.get(file); - if (list != null && !list.isEmpty()) { - final VcsFileRevision revision = list.get(0); - final Date date = revision.getRevisionDate(); - if (newestDate == null || date.after(newestDate)) { - newestDate = date; - newestLine = lines.get(0); - } - final int length = DateFormatUtil.formatPrettyDate(date).length(); - if (length > maxDateLength) { - maxDateLength = length; - } - for (Integer line : lines) { - cache.put(line, revision); - } - ApplicationManager.getApplication().invokeLater(new Runnable() { - @Override - public void run() { - if (!myGutterShowed) { - showGutter(); - } else { - ((EditorGutterComponentEx)myEditor.getGutter()).revalidateMarkup(); - } - } - }); - } + + VcsFileRevision revision = getLastRevision(file); + if (revision != null) { + final List lines = files2lines.get(file); + + final Date date = revision.getRevisionDate(); + if (newestDate == null || date.after(newestDate)) { + newestDate = date; + newestLine = lines.get(0); + } + final int length = DateFormatUtil.formatPrettyDate(date).length(); + if (length > maxDateLength) { + maxDateLength = length; + } + for (Integer line : lines) { + cache.put(line, revision); + } + ApplicationManager.getApplication().invokeLater(new Runnable() { + @Override + public void run() { + if (!myGutterShowed) { + showGutter(); + } + else { + ((EditorGutterComponentEx)myEditor.getGutter()).revalidateMarkup(); } } - } - catch (VcsException ignored) { - ignored.printStackTrace(); - } + }); } + } + } + @Nullable + private VcsFileRevision getLastRevision(@NotNull VirtualFile file) { + try { + final AbstractVcs vcs = VcsUtil.getVcsFor(myEditor.getProject(), file); + if (vcs == null) return null; + + VcsHistoryProvider historyProvider = vcs.getVcsHistoryProvider(); + if (historyProvider == null) return null; + + FilePath filePath = VcsContextFactory.SERVICE.getInstance().createFilePathOn(file); + VcsHistorySession session = historyProvider.createSessionFor(filePath); + if (session == null) return null; + + List list = session.getRevisionList(); + if (list == null || list.isEmpty()) return null; + + return list.get(0); + } + catch (VcsException ignored) { + ignored.printStackTrace(); + return null; } } }); From d0be58534610cadaee57c416cfac599ce9ae9144 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 27 Oct 2014 16:10:30 +0300 Subject: [PATCH 44/90] vcs: extract required data into separate class --- .../unscramble/AnnotateStackTraceAction.java | 70 +++++++++++++++---- 1 file changed, 57 insertions(+), 13 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java b/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java index bda0e16bc7a1..fa9c5fb62f1e 100644 --- a/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java +++ b/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java @@ -37,6 +37,7 @@ import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vcs.VcsException; @@ -66,7 +67,7 @@ import java.util.List; */ public class AnnotateStackTraceAction extends AnAction implements DumbAware { private final EditorHyperlinkSupport myHyperlinks; - private Map cache; + private Map cache; private int newestLine = -1; private int maxDateLength = 0; private final Editor myEditor; @@ -83,7 +84,7 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { @Override public void actionPerformed(AnActionEvent e) { - cache = new HashMap(); + cache = new HashMap(); ProgressManager.getInstance().run( new Task.Backgroundable(myEditor.getProject(), "Getting file history", true, PerformInBackgroundOption.ALWAYS_BACKGROUND) { @@ -100,7 +101,7 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { final EditorGutterAction action = new EditorGutterAction() { @Override public void doAction(int lineNum) { - final VcsFileRevision revision = cache.get(lineNum); + final LastRevision revision = cache.get(lineNum); final List links = myHyperlinks.findAllHyperlinksOnLine(lineNum); if (!links.isEmpty()) { final RangeHighlighter key = links.get(links.size() - 1); @@ -111,7 +112,7 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { final Project project = getProject(); final AbstractVcs vcs = ProjectLevelVcsManagerEx.getInstanceEx(project).getVcsFor(file); if (vcs != null) { - final VcsRevisionNumber number = revision.getRevisionNumber(); + final VcsRevisionNumber number = revision.getNumber(); final VcsKey vcsKey = vcs.getKeyInstanceMethod(); ShowAllAffectedGenericAction.showSubmittedFiles(project, number, file, vcsKey); } @@ -137,23 +138,23 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { @Override public String getLineText(int line, Editor editor) { - final VcsFileRevision revision = cache.get(line); + final LastRevision revision = cache.get(line); if (revision != null) { - return String.format("%"+maxDateLength+"s", DateFormatUtil.formatPrettyDate(revision.getRevisionDate())) + " " + revision.getAuthor(); + return String.format("%"+maxDateLength+"s", DateFormatUtil.formatPrettyDate(revision.getDate())) + " " + revision.getAuthor(); } return ""; } @Override public String getToolTip(int line, Editor editor) { - final VcsFileRevision revision = cache.get(line); + final LastRevision revision = cache.get(line); if (revision != null) { return XmlStringUtil.wrapInHtml( revision.getAuthor() + " " + - DateFormatUtil.formatDateTime(revision.getRevisionDate()) + + DateFormatUtil.formatDateTime(revision.getDate()) + "
" + - revision.getCommitMessage() + revision.getMessage() ); } return null; @@ -220,11 +221,11 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { for (VirtualFile file : files) { indicator.checkCanceled(); - VcsFileRevision revision = getLastRevision(file); + LastRevision revision = getLastRevision(file); if (revision != null) { final List lines = files2lines.get(file); - final Date date = revision.getRevisionDate(); + final Date date = revision.getDate(); if (newestDate == null || date.after(newestDate)) { newestDate = date; newestLine = lines.get(0); @@ -252,7 +253,7 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { } @Nullable - private VcsFileRevision getLastRevision(@NotNull VirtualFile file) { + private LastRevision getLastRevision(@NotNull VirtualFile file) { try { final AbstractVcs vcs = VcsUtil.getVcsFor(myEditor.getProject(), file); if (vcs == null) return null; @@ -267,7 +268,7 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { List list = session.getRevisionList(); if (list == null || list.isEmpty()) return null; - return list.get(0); + return LastRevision.create(list.get(0)); } catch (VcsException ignored) { ignored.printStackTrace(); @@ -281,4 +282,47 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { public void update(AnActionEvent e) { e.getPresentation().setEnabled(cache == null || !myGutterShowed); } + + private static class LastRevision { + @NotNull private final VcsRevisionNumber myNumber; + @NotNull private final String myAuthor; + @NotNull private final Date myDate; + @NotNull private final String myMessage; + + public LastRevision(@NotNull VcsRevisionNumber number, @NotNull String author, @NotNull Date date, @NotNull String message) { + myNumber = number; + myAuthor = author; + myDate = date; + myMessage = message; + } + + @NotNull + public static LastRevision create(@NotNull VcsFileRevision revision) { + VcsRevisionNumber number = revision.getRevisionNumber(); + String author = StringUtil.notNullize(revision.getAuthor(), "Unknown"); + Date date = revision.getRevisionDate(); + String message = StringUtil.notNullize(revision.getCommitMessage()); + return new LastRevision(number, author, date, message); + } + + @NotNull + public VcsRevisionNumber getNumber() { + return myNumber; + } + + @NotNull + public String getAuthor() { + return myAuthor; + } + + @NotNull + public Date getDate() { + return myDate; + } + + @NotNull + public String getMessage() { + return myMessage; + } + } } From 3aa90c59abcea062a89d5a50a3c21e0bcd5ed205 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 27 Oct 2014 16:27:24 +0300 Subject: [PATCH 45/90] vcs: speedup AnnotateStackTrace - load last revision only, instead of full history --- .../unscramble/AnnotateStackTraceAction.java | 24 ++++++++++------- .../vcs/history/VcsHistoryProviderEx.java | 27 +++++++++++++++++++ 2 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 platform/vcs-impl/src/com/intellij/openapi/vcs/history/VcsHistoryProviderEx.java diff --git a/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java b/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java index fa9c5fb62f1e..42b1ef5e79be 100644 --- a/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java +++ b/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java @@ -47,10 +47,7 @@ import com.intellij.openapi.vcs.actions.VcsContextFactory; import com.intellij.openapi.vcs.annotate.AnnotationSource; import com.intellij.openapi.vcs.annotate.ShowAllAffectedGenericAction; import com.intellij.openapi.vcs.ex.ProjectLevelVcsManagerEx; -import com.intellij.openapi.vcs.history.VcsFileRevision; -import com.intellij.openapi.vcs.history.VcsHistoryProvider; -import com.intellij.openapi.vcs.history.VcsHistorySession; -import com.intellij.openapi.vcs.history.VcsRevisionNumber; +import com.intellij.openapi.vcs.history.*; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.text.DateFormatUtil; import com.intellij.vcsUtil.VcsUtil; @@ -83,7 +80,7 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { } @Override - public void actionPerformed(AnActionEvent e) { + public void actionPerformed(final AnActionEvent e) { cache = new HashMap(); ProgressManager.getInstance().run( @@ -262,13 +259,20 @@ public class AnnotateStackTraceAction extends AnAction implements DumbAware { if (historyProvider == null) return null; FilePath filePath = VcsContextFactory.SERVICE.getInstance().createFilePathOn(file); - VcsHistorySession session = historyProvider.createSessionFor(filePath); - if (session == null) return null; - List list = session.getRevisionList(); - if (list == null || list.isEmpty()) return null; + if (historyProvider instanceof VcsHistoryProviderEx) { + VcsFileRevision revision = ((VcsHistoryProviderEx)historyProvider).getLastRevision(filePath); + if (revision == null) return null; + return LastRevision.create(revision); + } else { + VcsHistorySession session = historyProvider.createSessionFor(filePath); + if (session == null) return null; - return LastRevision.create(list.get(0)); + List list = session.getRevisionList(); + if (list == null || list.isEmpty()) return null; + + return LastRevision.create(list.get(0)); + } } catch (VcsException ignored) { ignored.printStackTrace(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/VcsHistoryProviderEx.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/VcsHistoryProviderEx.java new file mode 100644 index 000000000000..093cbf45185c --- /dev/null +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/VcsHistoryProviderEx.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2009 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.openapi.vcs.history; + +import com.intellij.openapi.vcs.CalledInBackground; +import com.intellij.openapi.vcs.FilePath; +import com.intellij.openapi.vcs.VcsException; +import org.jetbrains.annotations.Nullable; + +public interface VcsHistoryProviderEx extends VcsHistoryProvider { + @Nullable + @CalledInBackground + VcsFileRevision getLastRevision(FilePath filePath) throws VcsException; +} From 1c82b0471d28c68a9a087793778031094a12cde1 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 27 Oct 2014 16:31:56 +0300 Subject: [PATCH 46/90] git: implement fast exception annotations --- .../src/git4idea/history/GitHistoryProvider.java | 10 +++++++++- .../git4idea/src/git4idea/history/GitHistoryUtils.java | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java b/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java index 7550f804fb21..0d4942f2add2 100644 --- a/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java +++ b/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java @@ -52,7 +52,7 @@ import java.util.List; /** * Git history provider implementation */ -public class GitHistoryProvider implements VcsHistoryProvider, VcsCacheableHistorySessionFactory, +public class GitHistoryProvider implements VcsHistoryProviderEx, VcsCacheableHistorySessionFactory, VcsBaseRevisionAdviser { private static final Logger log = Logger.getInstance(GitHistoryProvider.class.getName()); @@ -139,6 +139,14 @@ public class GitHistoryProvider implements VcsHistoryProvider, VcsCacheableHisto }; } + @Nullable + @Override + public VcsFileRevision getLastRevision(FilePath filePath) throws VcsException { + List history = GitHistoryUtils.history(myProject, filePath, "--max-count=1"); + if (history == null || history.isEmpty()) return null; + return history.get(0); + } + @Override public boolean getBaseVersionContent(FilePath filePath, Processor processor, diff --git a/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java b/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java index 1337735820ac..1c310492059d 100644 --- a/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java +++ b/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java @@ -650,9 +650,9 @@ public class GitHistoryUtils { * @return the list of the revisions * @throws VcsException if there is problem with running git */ - public static List history(final Project project, final FilePath path) throws VcsException { + public static List history(final Project project, final FilePath path, String... parameters) throws VcsException { final VirtualFile root = GitUtil.getGitRoot(path); - return history(project, path, root); + return history(project, path, root, parameters); } /** From 3b35b879ecb9ba18ecf12032f56f11969627b400 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 28 Oct 2014 16:04:23 +0100 Subject: [PATCH 47/90] IDEA-129887 Welcome screen redesign --- .../wm/impl/welcomeScreen/FlatWelcomeFrame.java | 10 +++++----- .../wm/impl/welcomeScreen/NewRecentProjectPanel.java | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index b93a024a1660..72f9fbf05459 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -283,7 +283,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { panel.add(toolbar, BorderLayout.EAST); - panel.setBorder(new EmptyBorder(0,0,8,21)); + panel.setBorder(new EmptyBorder(0,0,8,11)); return panel; } @@ -302,7 +302,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { ref.get().setPaintUnderline(false); ref.get().setNormalColor(getLinkNormalColor()); NonOpaquePanel panel = new NonOpaquePanel(new BorderLayout()); - panel.setBorder(new EmptyBorder(4, 10, 4, 10)); + panel.setBorder(new EmptyBorder(4, 6, 4, 6)); panel.add(ref.get()); panel.add(createArrow(ref.get()), BorderLayout.EAST); installFocusable(panel, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, focusListOnLeft); @@ -346,7 +346,6 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } } - actions.setBorder(new EmptyBorder(0, 0, 0, 0)); WelcomeScreenActionsPanel panel = new WelcomeScreenActionsPanel(); panel.actions.add(actions); return panel.root; @@ -366,6 +365,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { NonOpaquePanel panel = new NonOpaquePanel(new BorderLayout()); ApplicationInfoEx app = ApplicationInfoEx.getInstanceEx(); JLabel logo = new JLabel(IconLoader.getIcon(app.getWelcomeScreenLogoUrl())); + logo.setBorder(new EmptyBorder(30,0,10,0)); logo.setHorizontalAlignment(SwingConstants.CENTER); panel.add(logo, BorderLayout.NORTH); JLabel appName = new JLabel(ApplicationNamesInfo.getInstance().getFullProductName()); @@ -380,13 +380,13 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } JLabel version = new JLabel(appVersion); - version.setFont(font.deriveFont(16f).deriveFont(Font.PLAIN)); + version.setFont(getProductFont().deriveFont(16f)); version.setHorizontalAlignment(SwingConstants.CENTER); version.setForeground(Gray._128); panel.add(appName); panel.add(version, BorderLayout.SOUTH); - panel.setBorder(new EmptyBorder(20, 10, 30, 10)); + panel.setBorder(new EmptyBorder(0, 0, 20, 0)); return panel; } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java index fb1fc55c32ae..827c9ba5d1ab 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java @@ -98,8 +98,8 @@ public class NewRecentProjectPanel extends RecentProjectPanel { @Override protected void layoutComponents() { setLayout(new BorderLayout()); - myName.setBorder(new EmptyBorder(6, 5, 1, 5)); - myPath.setBorder(new EmptyBorder(1, 5, 6, 5)); + myName.setBorder(new EmptyBorder(6, 0, 1, 5)); + myPath.setBorder(new EmptyBorder(1, 0, 6, 5)); add(myName, BorderLayout.NORTH); add(myPath, BorderLayout.SOUTH); } From 86eb7b96a31debd3d3ce98d80ce33a0ead97d24d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 28 Oct 2014 16:13:06 +0100 Subject: [PATCH 48/90] CCE --- .../codeInspection/ex/InspectionRVContentProvider.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java index 8769cb4f6181..001930c3cbfc 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionRVContentProvider.java @@ -21,6 +21,7 @@ package com.intellij.codeInspection.ex; import com.intellij.codeInspection.CommonProblemDescriptor; +import com.intellij.codeInspection.offlineViewer.OfflineInspectionRVContentProvider; import com.intellij.codeInspection.reference.RefEntity; import com.intellij.codeInspection.ui.*; import com.intellij.openapi.application.ApplicationManager; @@ -234,9 +235,9 @@ public abstract class InspectionRVContentProvider { public boolean accept(Object node) { if (node instanceof RefElementNode) { final RefElementNode refElementNode = (RefElementNode)node; - final Object finalContainerUserObject = finalContainer.getUserObject(); - if (finalContainerUserObject instanceof RefEntity && - finalContainer.areEqual(refElementNode.getUserObject(), finalContainerUserObject)) { + final Object userObject = finalContainer.getUserObject(); + final Object object = refElementNode.getUserObject(); + if ((object == null || userObject.getClass().equals(object.getClass())) && finalContainer.areEqual(object, userObject)) { if (firstLevel.get()) { result.set(refElementNode); return false; From 15843d4bce37563a8b816515862828c1286bbfb6 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Tue, 28 Oct 2014 16:56:19 +0300 Subject: [PATCH 49/90] Emmet: replace hardcoded xml zen generator with extension --- .../platform-resources/src/META-INF/XmlPlugin.xml | 1 + .../codeInsight/template/emmet/ZenCodingTemplate.java | 2 +- .../template/emmet/generators/ZenCodingGenerator.java | 11 +++-------- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/platform/platform-resources/src/META-INF/XmlPlugin.xml b/platform/platform-resources/src/META-INF/XmlPlugin.xml index 00f42a06cd93..b2c30eb04746 100644 --- a/platform/platform-resources/src/META-INF/XmlPlugin.xml +++ b/platform/platform-resources/src/META-INF/XmlPlugin.xml @@ -198,6 +198,7 @@ + diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java index 433e7c680304..4b22ccf7e3db 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java @@ -132,7 +132,7 @@ public class ZenCodingTemplate extends CustomLiveTemplateBase { @Nullable private static ZenCodingGenerator findApplicableGenerator(ZenCodingNode node, PsiElement context, boolean wrapping) { ZenCodingGenerator defaultGenerator = null; - List generators = ZenCodingGenerator.getInstances(); + ZenCodingGenerator[] generators = ZenCodingGenerator.getInstances(); for (ZenCodingGenerator generator : generators) { if (defaultGenerator == null && generator.isMyContext(context, wrapping) && generator.isAppliedByDefault(context)) { defaultGenerator = generator; diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java index 846eb867d844..fd3706df1036 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java @@ -30,8 +30,6 @@ import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; @@ -39,7 +37,7 @@ import java.util.List; * @author Eugene.Kudelevsky */ public abstract class ZenCodingGenerator { - private static final ExtensionPointName EP_NAME = new ExtensionPointName("com.intellij.xml.zenCodingGenerator"); + public static final ExtensionPointName EP_NAME = new ExtensionPointName("com.intellij.xml.zenCodingGenerator"); public abstract TemplateImpl generateTemplate(@NotNull TemplateToken token, boolean hasChildren, @NotNull PsiElement context); @@ -59,11 +57,8 @@ public abstract class ZenCodingGenerator { public abstract boolean isEnabled(); - public static List getInstances() { - List generators = new ArrayList(); - Collections.addAll(generators, EP_NAME.getExtensions()); - generators.add(XmlZenCodingGeneratorImpl.INSTANCE); - return generators; + public static ZenCodingGenerator[] getInstances() { + return EP_NAME.getExtensions(); } @Nullable From 35bcc58d4a4ac6270a155cd584d075b51da2262a Mon Sep 17 00:00:00 2001 From: Sergey Savenko Date: Mon, 27 Oct 2014 16:51:53 +0300 Subject: [PATCH 50/90] ToolWindowManagerImpl: remove useless method parameters --- .../wm/impl/ToolWindowManagerImpl.java | 34 +++++++------------ 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java index 95b3d54f8030..6c4b505f7350 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java @@ -414,7 +414,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements appendSetEditorComponentCmd(editorComponent, commandsList); if (myEditorWasActive && editorComponent instanceof EditorsSplitters) { - activateEditorComponentImpl(FileEditorManagerEx.getInstanceEx(myProject).getSplitters(), commandsList, true); + activateEditorComponentImpl(commandsList, true); } execute(commandsList); @@ -610,7 +610,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements @Override public void run() { final ArrayList commandList = new ArrayList(); - activateEditorComponentImpl(getSplittersFromFocus(), commandList, forced); + activateEditorComponentImpl(commandList, forced); execute(commandList); } }; @@ -637,16 +637,10 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements } } - private EditorsSplitters getSplittersFromFocus() { - return FileEditorManagerEx.getInstanceEx(myProject).getSplitters(); - } - - private void activateEditorComponentImpl(EditorsSplitters splitters, - List commandList, - final boolean forced) { + private void activateEditorComponentImpl(List commandList, final boolean forced) { final String active = getActiveToolWindowId(); // Now we have to request focus into most recent focused editor - appendRequestFocusInEditorComponentCmd(splitters, commandList, forced).doWhenDone(new Runnable() { + appendRequestFocusInEditorComponentCmd(commandList, forced).doWhenDone(new Runnable() { @Override public void run() { final ArrayList postExecute = new ArrayList(); @@ -949,7 +943,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements } } - activateEditorComponentImpl(getSplittersFromFocus(), commandList, true); + activateEditorComponentImpl(commandList, true); } else if (isStackEnabled()) { @@ -988,7 +982,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements if (wasActive && moveFocus) { if (myActiveStack.isEmpty()) { if (hasOpenEditorFiles()) { - activateEditorComponentImpl(getSplittersFromFocus(), commandList, false); + activateEditorComponentImpl(commandList, false); } else { focusToolWinowByDefault(id); @@ -1008,7 +1002,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements //todo[kb] it's just a temporary solution due a number of focus issues in JDK 7 if (SystemInfo.isJavaVersionAtLeast("1.7")) { if (hasOpenEditorFiles()) { - activateEditorComponentImpl(getSplittersFromFocus(), commandList, false); + activateEditorComponentImpl(commandList, false); } else { focusToolWinowByDefault(id); @@ -1213,7 +1207,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements } } else if (wasActive) { // tool window was active but it cannot be activate again - activateEditorComponentImpl(getSplittersFromFocus(), commandsList, true); + activateEditorComponentImpl(commandsList, true); } execute(commandsList); @@ -1353,7 +1347,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements // if there is no any active tool window and editor is also inactive // then activate editor if (!myEditorWasActive && getActiveToolWindowId() == null) { - activateEditorComponentImpl(getSplittersFromFocus(), commandList, true); + activateEditorComponentImpl(commandList, true); } execute(commandList); } @@ -1798,13 +1792,11 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements commandsList.add(command); } - private ActionCallback appendRequestFocusInEditorComponentCmd(EditorsSplitters splitters, - List commandList, - boolean forced) { + private ActionCallback appendRequestFocusInEditorComponentCmd(List commandList, boolean forced) { if (myProject.isDisposed()) return new ActionCallback.Done(); - final CommandProcessor commandProcessor = myWindowManager.getCommandProcessor(); - final RequestFocusInEditorComponentCmd command = - new RequestFocusInEditorComponentCmd(splitters, getFocusManager(), commandProcessor, forced); + EditorsSplitters splitters = FileEditorManagerEx.getInstanceEx(myProject).getSplitters(); + CommandProcessor commandProcessor = myWindowManager.getCommandProcessor(); + RequestFocusInEditorComponentCmd command = new RequestFocusInEditorComponentCmd(splitters, getFocusManager(), commandProcessor, forced); commandList.add(command); return command.getDoneCallback(); } From 0f01b22273ae3feebea35b97198ab8d68ef53b64 Mon Sep 17 00:00:00 2001 From: Sergey Savenko Date: Mon, 27 Oct 2014 21:03:03 +0300 Subject: [PATCH 51/90] prevent main editor gaining focus when opening a floating toolwindow --- .../com/intellij/ide/impl/DataManagerImpl.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/ide/impl/DataManagerImpl.java b/platform/platform-impl/src/com/intellij/ide/impl/DataManagerImpl.java index bea92c9626b9..2a13e1c73889 100644 --- a/platform/platform-impl/src/com/intellij/ide/impl/DataManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/impl/DataManagerImpl.java @@ -30,7 +30,9 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.UserDataHolder; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.ex.WindowManagerEx; +import com.intellij.openapi.wm.impl.FloatingDecorator; import com.intellij.util.KeyedLazyInstanceEP; import com.intellij.util.containers.WeakValueHashMap; import gnu.trove.THashMap; @@ -248,6 +250,21 @@ public class DataManagerImpl extends DataManager { } } + // In case we have an active floating toolwindow and some component in another window focused, + // we want this other component to receive key events. + // Walking up the window ownership hierarchy from the floating toolwindow would have led us to the main IdeFrame + // whereas we want to be able to type in other frames as well. + if (activeWindow instanceof FloatingDecorator) { + IdeFocusManager ideFocusManager = IdeFocusManager.findInstanceByComponent(activeWindow); + IdeFrame lastFocusedFrame = ideFocusManager.getLastFocusedFrame(); + JComponent frameComponent = lastFocusedFrame != null ? lastFocusedFrame.getComponent() : null; + Window lastFocusedWindow = frameComponent != null ? SwingUtilities.getWindowAncestor(frameComponent) : null; + boolean toolWindowIsNotFocused = myWindowManager.getFocusedComponent(activeWindow) == null; + if (toolWindowIsNotFocused && lastFocusedWindow != null) { + activeWindow = lastFocusedWindow; + } + } + // try to find first parent window that has focus Window window = activeWindow; Component focusedComponent = null; From 6e88001f78bf190204c1df134e20e84a0b3f06da Mon Sep 17 00:00:00 2001 From: Sergey Savenko Date: Tue, 28 Oct 2014 13:17:08 +0300 Subject: [PATCH 52/90] return focus from floating toolwindows to the last focused editor --- .../wm/impl/ToolWindowManagerImpl.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java index 6c4b505f7350..c0c27ba8c128 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java @@ -56,10 +56,7 @@ import com.intellij.ui.ColorUtil; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.switcher.QuickAccessSettings; import com.intellij.ui.switcher.SwitchManager; -import com.intellij.util.Alarm; -import com.intellij.util.ArrayUtil; -import com.intellij.util.EventDispatcher; -import com.intellij.util.IJSwingUtilities; +import com.intellij.util.*; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import com.intellij.util.ui.PositionTracker; @@ -1794,7 +1791,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements private ActionCallback appendRequestFocusInEditorComponentCmd(List commandList, boolean forced) { if (myProject.isDisposed()) return new ActionCallback.Done(); - EditorsSplitters splitters = FileEditorManagerEx.getInstanceEx(myProject).getSplitters(); + EditorsSplitters splitters = getSplittersToFocus(); CommandProcessor commandProcessor = myWindowManager.getCommandProcessor(); RequestFocusInEditorComponentCmd command = new RequestFocusInEditorComponentCmd(splitters, getFocusManager(), commandProcessor, forced); commandList.add(command); @@ -1823,6 +1820,22 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements commandsList.add(command); } + private EditorsSplitters getSplittersToFocus() { + Window activeWindow = myWindowManager.getMostRecentFocusedWindow(); + + if (activeWindow instanceof FloatingDecorator) { + IdeFocusManager ideFocusManager = IdeFocusManager.findInstanceByComponent(activeWindow); + IdeFrame lastFocusedFrame = ideFocusManager.getLastFocusedFrame(); + JComponent frameComponent = lastFocusedFrame != null ? lastFocusedFrame.getComponent() : null; + Window lastFocusedWindow = frameComponent != null ? SwingUtilities.getWindowAncestor(frameComponent) : null; + activeWindow = ObjectUtils.notNull(lastFocusedWindow, activeWindow); + } + + FileEditorManagerEx fem = FileEditorManagerEx.getInstanceEx(myProject); + EditorsSplitters splitters = activeWindow != null ? fem.getSplittersFor(activeWindow) : null; + return splitters != null ? splitters : fem.getSplitters(); + } + /** * @return true if tool window with the specified id * is floating and has modal showing child dialog. Such windows should not be closed From 20938f8638bcd826ca1788c1d5e8ab189a6d92b1 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 28 Oct 2014 17:19:19 +0300 Subject: [PATCH 53/90] remember corresponding XDebugProcess in DebugProcessImpl --- .../intellij/debugger/engine/DebugProcessImpl.java | 8 ++++++-- .../com/intellij/debugger/impl/DebuggerSession.java | 11 ++--------- .../intellij/debugger/impl/GenericDebuggerRunner.java | 4 +++- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java index 132e631e4052..e61e6773c422 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java @@ -112,6 +112,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb private ExecutionResult myExecutionResult; private RemoteConnection myConnection; + private JavaDebugProcess myXDebugProcess; private ConnectionServiceWrapper myConnectionService; private Map myArguments; @@ -1990,10 +1991,13 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb return mySession.getContextManager().getContext(); } + public void setXDebugProcess(JavaDebugProcess XDebugProcess) { + myXDebugProcess = XDebugProcess; + } + @Nullable public JavaDebugProcess getXdebugProcess() { - XDebugSession session = mySession.getXDebugSession(); - return session != null ? (JavaDebugProcess)session.getDebugProcess() : null; + return myXDebugProcess; } public boolean areBreakpointsMuted() { diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java index 53f298853139..26d0820fedc9 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java @@ -57,9 +57,7 @@ import com.intellij.unscramble.ThreadState; import com.intellij.util.Alarm; import com.intellij.util.TimeoutUtil; import com.intellij.xdebugger.AbstractDebuggerSession; -import com.intellij.xdebugger.XDebugProcess; import com.intellij.xdebugger.XDebugSession; -import com.intellij.xdebugger.XDebuggerManager; import com.intellij.xdebugger.impl.actions.XDebuggerActions; import com.intellij.xdebugger.impl.evaluate.quick.common.ValueLookupManager; import com.sun.jdi.ObjectCollectedException; @@ -690,12 +688,7 @@ public class DebuggerSession implements AbstractDebuggerSession { @Nullable public XDebugSession getXDebugSession() { - for (XDebugSession xDebugSession : XDebuggerManager.getInstance(getProject()).getDebugSessions()) { - XDebugProcess process = xDebugSession.getDebugProcess(); - if (process instanceof JavaDebugProcess && ((JavaDebugProcess)process).getDebuggerSession() == this) { - return xDebugSession; - } - } - return null; + JavaDebugProcess process = myDebugProcess.getXdebugProcess(); + return process != null ? process.getSession() : null; } } diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java index c6491a2b8a3f..db350c2b3d70 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java @@ -122,7 +122,9 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner Date: Tue, 28 Oct 2014 21:07:17 +0300 Subject: [PATCH 54/90] fixed leaking MethodOccurence objects --- .../ui/impl/watch/MethodsTracker.java | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/MethodsTracker.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/MethodsTracker.java index 0662112bca6a..40435a0f14a7 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/MethodsTracker.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/MethodsTracker.java @@ -16,9 +16,12 @@ package com.intellij.debugger.ui.impl.watch; import com.sun.jdi.Method; +import org.jetbrains.annotations.Nullable; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; /** * @author Eugene Zhuravlev @@ -26,7 +29,7 @@ import java.util.Map; */ public class MethodsTracker { private final Map myMethodToOccurrenceMap = new HashMap(); - private final Map myOccurences = new HashMap(); + private final Set myProcessedFrames = new HashSet(); public final class MethodOccurrence { private final Method myMethod; @@ -50,13 +53,13 @@ public class MethodsTracker { } } - public MethodOccurrence getMethodOccurrence(int frameIndex, Method method) { - MethodOccurrence occurrence = myOccurences.get(frameIndex); - if (occurrence == null) { - occurrence = new MethodOccurrence(method, assignOccurrenceIndex(method)); - myOccurences.put(frameIndex, occurrence); + public MethodOccurrence getMethodOccurrence(int frameIndex, @Nullable Method method) { + int occurenceIndex = getOccurrenceCount(method); + if (!myProcessedFrames.contains(frameIndex)) { + myMethodToOccurrenceMap.put(method, occurenceIndex + 1); + myProcessedFrames.add(frameIndex); } - return occurrence; + return new MethodOccurrence(method, occurenceIndex); } private int getOccurrenceCount(Method method) { @@ -66,13 +69,4 @@ public class MethodsTracker { final Integer integer = myMethodToOccurrenceMap.get(method); return integer != null? integer.intValue(): 0; } - - private int assignOccurrenceIndex(Method method) { - if (method == null) { - return 0; - } - final int count = getOccurrenceCount(method); - myMethodToOccurrenceMap.put(method, count + 1); - return count; - } } From 474dd67a8d169293360d3d86db54b7ff90c44c8d Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 28 Oct 2014 21:43:25 +0300 Subject: [PATCH 55/90] produce less trash objects --- .../com/intellij/debugger/NoDataException.java | 11 ++++++++++- .../debugger/engine/JSR45PositionManager.java | 4 ++-- .../groovy/debugger/GroovyPositionManager.java | 16 ++++++++-------- .../SpringLoadedPositionManager.java | 12 ++++++------ 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/java/debugger/openapi/src/com/intellij/debugger/NoDataException.java b/java/debugger/openapi/src/com/intellij/debugger/NoDataException.java index b3f30af716be..707ba0f445f3 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/NoDataException.java +++ b/java/debugger/openapi/src/com/intellij/debugger/NoDataException.java @@ -15,7 +15,16 @@ */ package com.intellij.debugger; -public class NoDataException extends Exception{ +public class NoDataException extends Exception { + public static final NoDataException INSTANCE = new NoDataException(); + + /** + * @deprecated Use shared {@link com.intellij.debugger.NoDataException#INSTANCE} instead + */ + @Deprecated + public NoDataException() { + } + @Override public Throwable fillInStackTrace() { return this; diff --git a/java/debugger/openapi/src/com/intellij/debugger/engine/JSR45PositionManager.java b/java/debugger/openapi/src/com/intellij/debugger/engine/JSR45PositionManager.java index d33e9ade7e08..df2d9bb2e415 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/engine/JSR45PositionManager.java +++ b/java/debugger/openapi/src/com/intellij/debugger/engine/JSR45PositionManager.java @@ -97,7 +97,7 @@ public abstract class JSR45PositionManager implements PositionManager { LOG.info(e); } if(sourcePosition == null) { - throw new NoDataException(); + throw NoDataException.INSTANCE; } return sourcePosition; } @@ -135,7 +135,7 @@ public abstract class JSR45PositionManager implements PositionManager { private void checkSourcePositionFileType(final SourcePosition classPosition) throws NoDataException { final FileType fileType = classPosition.getFile().getFileType(); if(!myFileTypes.contains(fileType)) { - throw new NoDataException(); + throw NoDataException.INSTANCE; } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java index dbbc4333a02d..74972e6165e1 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java @@ -77,11 +77,11 @@ public class GroovyPositionManager implements PositionManager { List locations = getDebugProcess().getVirtualMachineProxy().versionHigher("1.4") ? type.locationsOfLine(DebugProcess.JAVA_STRATUM, null, line) : type.locationsOfLine(line); - if (locations == null || locations.isEmpty()) throw new NoDataException(); + if (locations == null || locations.isEmpty()) throw NoDataException.INSTANCE; return locations; } catch (AbsentInformationException e) { - throw new NoDataException(); + throw NoDataException.INSTANCE; } } @@ -112,7 +112,7 @@ public class GroovyPositionManager implements PositionManager { private static void checkGroovyFile(@NotNull SourcePosition position) throws NoDataException { if (!(position.getFile() instanceof GroovyFileBase)) { - throw new NoDataException(); + throw NoDataException.INSTANCE; } } @@ -127,7 +127,7 @@ public class GroovyPositionManager implements PositionManager { qName = findEnclosingName(position); - if (qName == null) throw new NoDataException(); + if (qName == null) throw NoDataException.INSTANCE; ClassPrepareRequestor waitRequestor = new ClassPrepareRequestor() { @Override public void processClassPrepare(DebugProcess debuggerProcess, ReferenceType referenceType) { @@ -205,13 +205,13 @@ public class GroovyPositionManager implements PositionManager { @Override public SourcePosition getSourcePosition(final Location location) throws NoDataException { - if (location == null) throw new NoDataException(); + if (location == null) throw NoDataException.INSTANCE; PsiFile psiFile = getPsiFileByLocation(getDebugProcess().getProject(), location); - if (psiFile == null) throw new NoDataException(); + if (psiFile == null) throw NoDataException.INSTANCE; int lineNumber = calcLineIndex(location); - if (lineNumber < 0) throw new NoDataException(); + if (lineNumber < 0) throw NoDataException.INSTANCE; return SourcePosition.createFromLine(psiFile, lineNumber); } @@ -323,7 +323,7 @@ public class GroovyPositionManager implements PositionManager { } }); - if (result == null) throw new NoDataException(); + if (result == null) throw NoDataException.INSTANCE; return result; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/springloaded/SpringLoadedPositionManager.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/springloaded/SpringLoadedPositionManager.java index 6adf50e75094..378c15695fd9 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/springloaded/SpringLoadedPositionManager.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/springloaded/SpringLoadedPositionManager.java @@ -62,7 +62,7 @@ public class SpringLoadedPositionManager implements PositionManager { @Override public SourcePosition getSourcePosition(@Nullable Location location) throws NoDataException { - throw new NoDataException(); + throw NoDataException.INSTANCE; } @NotNull @@ -74,7 +74,7 @@ public class SpringLoadedPositionManager implements PositionManager { AccessToken accessToken = ReadAction.start(); try { className = findEnclosingName(classPosition); - if (className == null) throw new NoDataException(); + if (className == null) throw NoDataException.INSTANCE; line = classPosition.getLine(); } @@ -83,7 +83,7 @@ public class SpringLoadedPositionManager implements PositionManager { } List referenceTypes = myDebugProcess.getVirtualMachineProxy().classesByName(className); - if (referenceTypes.isEmpty()) throw new NoDataException(); + if (referenceTypes.isEmpty()) throw NoDataException.INSTANCE; Set res = new HashSet(); @@ -92,7 +92,7 @@ public class SpringLoadedPositionManager implements PositionManager { } if (res.isEmpty()) { - throw new NoDataException(); + throw NoDataException.INSTANCE; } return new ArrayList(res); @@ -101,7 +101,7 @@ public class SpringLoadedPositionManager implements PositionManager { @NotNull @Override public List locationsOfLine(@NotNull ReferenceType type, @NotNull SourcePosition position) throws NoDataException { - throw new NoDataException(); + throw NoDataException.INSTANCE; } @Nullable @@ -164,7 +164,7 @@ public class SpringLoadedPositionManager implements PositionManager { public ClassPrepareRequest createPrepareRequest(@NotNull ClassPrepareRequestor requestor, @NotNull SourcePosition position) throws NoDataException { String className = getOuterClassName(position); if (className == null) { - throw new NoDataException(); + throw NoDataException.INSTANCE; } return myDebugProcess.getRequestsManager().createClassPrepareRequest(requestor, className + "*"); From c17cba6cf3c7913d7fef65a25af088d841891f4e Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 28 Oct 2014 19:59:56 +0100 Subject: [PATCH 56/90] import installed plugins for mac (IDEA-132024) --- .../application/ConfigImportHelper.java | 48 +++++++++++++++---- .../openapi/application/PathManager.java | 5 ++ 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java b/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java index b376ad8c324d..10c1b8078c6f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java @@ -22,10 +22,7 @@ import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.AppUIUtil; -import com.intellij.util.PlatformUtils; -import com.intellij.util.ReflectionUtil; -import com.intellij.util.SmartList; -import com.intellij.util.ThreeState; +import com.intellij.util.*; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -74,7 +71,7 @@ public class ConfigImportHelper { } assert oldConfigDir != null; - doImport(newConfigDir, oldConfigDir); + doImport(newConfigDir, oldConfigDir, settings, installationHome); settings.importFinished(newConfigPath); System.setProperty(CONFIG_IMPORTED_IN_CURRENT_SESSION_KEY, Boolean.TRUE.toString()); } @@ -139,9 +136,9 @@ public class ConfigImportHelper { return (SystemInfo.isMac ? "" : ".") + selector.replaceAll("\\d", ""); } - private static void doImport(@NotNull File newConfigDir, @NotNull File oldConfigDir) { + private static void doImport(@NotNull File newConfigDir, @NotNull File oldConfigDir, ConfigImportSettings settings, File installationHome) { try { - copy(oldConfigDir, newConfigDir); + copy(oldConfigDir, newConfigDir, settings, installationHome); } catch (IOException e) { JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), @@ -169,7 +166,7 @@ public class ConfigImportHelper { return true; } - private static void copy(@NotNull File src, @NotNull File dest) throws IOException { + private static void copy(@NotNull File src, @NotNull File dest, ConfigImportSettings settings, File oldInstallationHome) throws IOException { src = src.getCanonicalFile(); dest = dest.getCanonicalFile(); if (!src.isDirectory()) { @@ -207,6 +204,23 @@ public class ConfigImportHelper { } File plugins = new File(src, PLUGINS_PATH); + if (!loadOldPlugins(plugins, dest) && SystemInfo.isMac) { + File oldPluginsDir = getOldPath(oldInstallationHome, settings, PathManager.PROPERTY_PLUGINS_PATH, + new Function() { + @Override + public String fun(String pathSelector) { + return PathManager.getDefaultPluginPathFor(pathSelector); + } + }); + if (oldPluginsDir == null) { + //e.g. installation home referred to config home. Try with default selector, same as config name + oldPluginsDir = new File(PathManager.getDefaultPluginPathFor(src.getName())); + } + loadOldPlugins(oldPluginsDir, dest); + } + } + + private static boolean loadOldPlugins(File plugins, File dest) throws IOException { if (plugins.exists()) { List descriptors = new SmartList(); PluginManagerCore.loadDescriptors(plugins, descriptors, null, 0); @@ -220,7 +234,9 @@ public class ConfigImportHelper { if (!oldPlugins.isEmpty()) { PluginManagerCore.savePluginsList(oldPlugins, false, new File(dest, PluginManager.INSTALLED_TXT)); } + return true; } + return false; } @Nullable @@ -244,12 +260,24 @@ public class ConfigImportHelper { return new File(oldInstallHome, "config"); } + return getOldPath(oldInstallHome, settings, PathManager.PROPERTY_CONFIG_PATH, new Function() { + @Override + public String fun(String pathsSelector) { + return PathManager.getDefaultConfigPathFor(pathsSelector); + } + }); + } + + private static File getOldPath(final File oldInstallHome, + final ConfigImportSettings settings, + final String propertyName, + final Function fromPathSelector) { final File[] launchFileCandidates = getLaunchFilesCandidates(oldInstallHome, settings); // custom config folder for (File candidate : launchFileCandidates) { if (candidate.exists()) { - String configDir = PathManager.substituteVars(getPropertyFromLaxFile(candidate, PathManager.PROPERTY_CONFIG_PATH), + String configDir = PathManager.substituteVars(getPropertyFromLaxFile(candidate, propertyName), oldInstallHome.getPath()); if (configDir != null) { File probableConfig = new File(configDir); @@ -263,7 +291,7 @@ public class ConfigImportHelper { if (candidate.exists()) { final String pathsSelector = getPropertyFromLaxFile(candidate, PathManager.PROPERTY_PATHS_SELECTOR); if (pathsSelector != null) { - final String configDir = PathManager.getDefaultConfigPathFor(pathsSelector); + final String configDir = fromPathSelector.fun(pathsSelector); final File probableConfig = new File(configDir); if (probableConfig.exists()) { return probableConfig; diff --git a/platform/util/src/com/intellij/openapi/application/PathManager.java b/platform/util/src/com/intellij/openapi/application/PathManager.java index f457c6cecd7c..f561652450e6 100644 --- a/platform/util/src/com/intellij/openapi/application/PathManager.java +++ b/platform/util/src/com/intellij/openapi/application/PathManager.java @@ -159,6 +159,11 @@ public class PathManager { return platformPath(selector, "Library/Preferences", CONFIG_FOLDER); } + @NotNull + public static String getDefaultPluginPathFor(@NotNull String selector) { + return platformPath(selector, "Library/Application Support", PLUGINS_FOLDER); + } + public static void ensureConfigFolderExists() { checkAndCreate(getConfigPath(), true); } From a373577a1fc9c4a9e605dcc66baec1e3e36d9abc Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 28 Oct 2014 20:14:16 +0100 Subject: [PATCH 57/90] compilation fix: ambiguity resolved --- .../src/git4idea/changes/GitCommittedChangeListProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/git4idea/src/git4idea/changes/GitCommittedChangeListProvider.java b/plugins/git4idea/src/git4idea/changes/GitCommittedChangeListProvider.java index 31e731f44937..f34279bdf6dd 100644 --- a/plugins/git4idea/src/git4idea/changes/GitCommittedChangeListProvider.java +++ b/plugins/git4idea/src/git4idea/changes/GitCommittedChangeListProvider.java @@ -207,7 +207,7 @@ public class GitCommittedChangeListProvider implements CommittedChangesProvider< } } final String afterTime = "--after=" + GitUtil.gitTime(gitCommit.getDate()); - final List history = GitHistoryUtils.history(myProject, filePath, null, afterTime); + final List history = GitHistoryUtils.history(myProject, filePath, (VirtualFile)null, afterTime); if (history.isEmpty()) { return new Pair(commit, filePath); } From 9e9a585b18c0201c00b0ee0d03e17d0f1a9b1a01 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Tue, 28 Oct 2014 20:08:32 +0100 Subject: [PATCH 58/90] preloading builders and target states --- .../src/org/jetbrains/jps/cmdline/BuildMain.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java index 7837b954da81..19d55e28c5b5 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java @@ -36,11 +36,14 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.api.CmdlineProtoUtil; import org.jetbrains.jps.api.CmdlineRemoteProto; import org.jetbrains.jps.api.GlobalOptions; +import org.jetbrains.jps.builders.BuildTarget; +import org.jetbrains.jps.incremental.BuilderRegistry; import org.jetbrains.jps.incremental.MessageHandler; import org.jetbrains.jps.incremental.Utils; import org.jetbrains.jps.incremental.fs.BuildFSState; import org.jetbrains.jps.incremental.fs.FSState; import org.jetbrains.jps.incremental.messages.BuildMessage; +import org.jetbrains.jps.incremental.storage.BuildTargetsState; import org.jetbrains.jps.service.SharedThreadPool; import java.io.*; @@ -77,6 +80,7 @@ public class BuildMain { private static PreloadedData ourPreloadedData; public static void main(String[] args){ + final long processStart = System.currentTimeMillis(); System.out.println("Build process started. Classpath: " + System.getProperty("java.class.path")); final String host = args[HOST_ARG]; final int port = Integer.parseInt(args[PORT_ARG]); @@ -125,7 +129,6 @@ public class BuildMain { final String projectPathToPreload = System.getProperty(PRELOAD_PROJECT_PATH, null); final String globalsPathToPreload = System.getProperty(PRELOAD_CONFIG_PATH, null); if (projectPathToPreload != null && globalsPathToPreload != null) { - final long preloadStart = System.currentTimeMillis(); final PreloadedData data = new PreloadedData(); ourPreloadedData = data; try { @@ -166,7 +169,16 @@ public class BuildMain { LOG.info("Error pre-loading FS state", e); fsState.clearAll(); } - LOG.info("Pre-loaded project model in " + (System.currentTimeMillis() - preloadStart) + " ms"); + + // preloading target configurations + final BuildTargetsState targetsState = pd.getTargetsState(); + for (BuildTarget target : pd.getBuildTargetIndex().getAllTargets()) { + targetsState.getTargetConfiguration(target); + } + + BuilderRegistry.getInstance(); + + LOG.info("Pre-loaded process ready in " + (System.currentTimeMillis() - processStart) + " ms"); } catch (Throwable e) { LOG.info("Failed to pre-load project " + projectPathToPreload, e); From cf2c38a205da0d7a8ce74662c829f9296de6df59 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 28 Oct 2014 16:24:57 +0400 Subject: [PATCH 59/90] IDEA-131537 Inspection "Setter parameter for @Nullable field is annotated @NotNull" is doubtful --- .../nullable/NullableStuffInspectionBase.java | 3 +-- .../GetterSetterProblems.java | 20 ++++++++++++++----- .../HonorParameterDefaultInSetters.java | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java index 736cb4dec27d..0ade64997b4a 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java @@ -161,8 +161,7 @@ public class NullableStuffInspectionBase extends BaseJavaBatchLocalInspectionToo addAnnoFix); } if (PropertyUtil.isSimpleSetter(setter)) { - if (annotated.isDeclaredNotNull && isNullableNotInferred(parameter, false) || - annotated.isDeclaredNullable && isNotNullNotInferred(parameter, false, false)) { + if (annotated.isDeclaredNotNull && isNullableNotInferred(parameter, false)) { final PsiIdentifier nameIdentifier1 = parameter.getNameIdentifier(); assertValidElement(setter, parameter, nameIdentifier1); holder.registerProblem(nameIdentifier1, InspectionsBundle.message( diff --git a/java/java-tests/testData/inspection/nullableProblems/GetterSetterProblems.java b/java/java-tests/testData/inspection/nullableProblems/GetterSetterProblems.java index c8a5816ec741..e12d8e2de3d4 100644 --- a/java/java-tests/testData/inspection/nullableProblems/GetterSetterProblems.java +++ b/java/java-tests/testData/inspection/nullableProblems/GetterSetterProblems.java @@ -1,4 +1,7 @@ import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.lang.Object; class B { @NotNull @@ -26,16 +29,16 @@ class C { this.c = c; } - C(@Nullable C c, int i) { + C(@Nullable C c, int i) { this.c = c; } - @Nullable - public C getC() { + @Nullable + public C getC() { return c; } - public void setC(@Nullable C c) { + public void setC(@Nullable C c) { this.c = c; } @@ -50,7 +53,7 @@ class C { } class D { - @Nullable Long myL; + @Nullable Long myL; D(long l) { myL = l; @@ -64,4 +67,11 @@ class E { this.c = c; } +} +class F { + @Nullable Object field; + + public void setField(@NotNull Object field) { + this.field = field; + } } \ No newline at end of file diff --git a/java/java-tests/testData/inspection/nullableProblems/HonorParameterDefaultInSetters.java b/java/java-tests/testData/inspection/nullableProblems/HonorParameterDefaultInSetters.java index a6b9b17afe42..8d74c640e574 100644 --- a/java/java-tests/testData/inspection/nullableProblems/HonorParameterDefaultInSetters.java +++ b/java/java-tests/testData/inspection/nullableProblems/HonorParameterDefaultInSetters.java @@ -7,7 +7,7 @@ class C { private String a; private String b; - public void setA(String a) { + public void setA(String a) { this.a = a; } From 5d9196835e3f3eef81b38ba2bf39b9876ba49655 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 28 Oct 2014 17:47:01 +0400 Subject: [PATCH 60/90] ignore inferred @NotNull when there's explicit @Nullable --- .../codeInsight/InferredAnnotationsManagerImpl.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java index 5b30ad6941cc..7e5583961969 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java @@ -74,10 +74,13 @@ public class InferredAnnotationsManagerImpl extends InferredAnnotationsManager { if (ORG_JETBRAINS_ANNOTATIONS_CONTRACT.equals(annotationFQN) && hasHardcodedContracts(owner)) { return true; } - if (AnnotationUtil.NOT_NULL.equals(annotationFQN) && - owner instanceof PsiParameter && owner.getParent() != null && - hasHardcodedContracts(owner.getParent().getParent())) { - return true; + if (AnnotationUtil.NOT_NULL.equals(annotationFQN) && owner instanceof PsiParameter && owner.getParent() != null) { + if (AnnotationUtil.isAnnotated(owner, NullableNotNullManager.getInstance(owner.getProject()).getNullables())) { + return true; + } + if (hasHardcodedContracts(owner.getParent().getParent())) { + return true; + } } return false; } From 85d93e57e3fe14e4f6f853691b6c5970e04683d3 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Tue, 28 Oct 2014 22:02:51 +0300 Subject: [PATCH 61/90] svn: Refactored SvnExecutableChecker - made accept SvnVcs instance (instead of Project instance) --- .../src/org/jetbrains/idea/svn/SvnVcs.java | 2 +- .../svn/commandLine/SvnExecutableChecker.java | 20 +++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java index b4ac1190009a..531431cd53de 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java @@ -197,7 +197,7 @@ public class SvnVcs extends AbstractVcs { VcsDirtyScopeManager.getInstance(project)); myWorkingCopiesContent = new WorkingCopiesContent(this); - myChecker = new SvnExecutableChecker(myProject); + myChecker = new SvnExecutableChecker(this); Application app = ApplicationManager.getApplication(); myLogExceptions = app != null && (app.isInternal() || app.isUnitTestMode()); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java index 9ce0dda3ada9..e96e250f1e88 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java @@ -18,7 +18,6 @@ package org.jetbrains.idea.svn.commandLine; import com.intellij.execution.ExecutableValidator; import com.intellij.notification.Notification; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Version; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -34,8 +33,12 @@ public class SvnExecutableChecker extends ExecutableValidator { private static final Logger LOG = Logger.getInstance(SvnExecutableChecker.class); - public SvnExecutableChecker(Project project) { - super(project, getNotificationTitle(), getWrongPathMessage()); + @NotNull private final SvnVcs myVcs; + + public SvnExecutableChecker(@NotNull SvnVcs vcs) { + super(vcs.getProject(), getNotificationTitle(), getWrongPathMessage()); + + myVcs = vcs; } @Override @@ -49,18 +52,13 @@ public class SvnExecutableChecker extends ExecutableValidator { return SvnConfigurable.DISPLAY_NAME; } - @NotNull - private SvnVcs getVcs() { - return SvnVcs.getInstance(myProject); - } - @Override protected void showSettingsAndExpireIfFixed(@NotNull Notification notification) { showSettings(); // always expire notification as different message could be detected notification.expire(); - getVcs().checkCommandLineVersion(); + myVcs.checkCommandLineVersion(); } @Override @@ -84,7 +82,7 @@ public class SvnExecutableChecker extends ExecutableValidator { @Nullable private Notification validateVersion(@NotNull Version version) { - return !getVcs().isSupportedByCommandLine(WorkingCopyFormat.from(version)) ? new ExecutableNotValidNotification( + return !myVcs.isSupportedByCommandLine(WorkingCopyFormat.from(version)) ? new ExecutableNotValidNotification( getOldExecutableMessage(version)) : null; } @@ -93,7 +91,7 @@ public class SvnExecutableChecker extends ExecutableValidator { Version result = null; try { - result = getVcs().getCommandLineFactory().createVersionClient().getVersion(); + result = myVcs.getCommandLineFactory().createVersionClient().getVersion(); } catch (Throwable e) { LOG.info(e); From 0fbf050516cd8a7f2c08c44e31997a343e0c8053 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Tue, 28 Oct 2014 22:28:53 +0300 Subject: [PATCH 62/90] IDEA-118571 Implemented validation checking if executing svn command line client (with configured locale) produces english output (and display corresponding warning notification if necessary) --- .../execution/ExecutableValidator.java | 17 ++++++--- .../jetbrains/idea/svn/SvnBundle.properties | 1 + .../idea/svn/api/CmdVersionClient.java | 6 ++-- .../svn/commandLine/SvnExecutableChecker.java | 36 ++++++++++++++++++- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java b/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java index 3b0b330b86a0..b63fd4de6de1 100644 --- a/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java +++ b/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java @@ -136,15 +136,22 @@ public abstract class ExecutableValidator { } @NotNull - private String prepareDescription(@NotNull String description) { + protected String prepareDescription(@NotNull String description, boolean appendFixIt) { + StringBuilder result = new StringBuilder(); String executable = getCurrentExecutable(); + if (executable.isEmpty()) { - return String.format("%s%s Fix it.", myNotificationErrorTitle, description); + result.append(String.format("%s%s", myNotificationErrorTitle, description)); } else { - return String.format("%s: %s
%s Fix it.", - myNotificationErrorTitle, executable, description); + result.append( + String.format("%s: %s
%s", myNotificationErrorTitle, executable, description)); } + if (appendFixIt) { + result.append(" Fix it."); + } + + return result.toString(); } protected void showSettingsAndExpireIfFixed(@NotNull Notification notification) { @@ -224,7 +231,7 @@ public abstract class ExecutableValidator { } public ExecutableNotValidNotification(@NotNull String description) { - this(prepareDescription(description), NotificationType.ERROR); + this(prepareDescription(description, true), NotificationType.ERROR); } public ExecutableNotValidNotification(@NotNull String preparedDescription, @NotNull NotificationType type) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties index f06a4e9b3ddd..bf26a95b26b3 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties @@ -204,6 +204,7 @@ confirmation.title.clear.authentication.cache=Clear Authentication Cache command.line.interactive.mode.title=Enable interactive mode command.line.interactive.mode.description=Emulates the behavior when Subversion commands are executed directly from the terminal (in the interactive mode).
\ This is required to handle password/passphrase prompts for svn+ssh repositories, and trust invalid server certificates for https repositories. +non.english.locale.detected.warning=A non-English locale is used. ssh.settings.title=SSH Settings ssh.settings.executable.label=SSH executable\: diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java index ec7fd2109941..5b1cffd1afb7 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java @@ -21,13 +21,15 @@ public class CmdVersionClient extends BaseSvnClient implements VersionClient { @NotNull @Override public Version getVersion() throws SvnBindException { - return parseVersion(runCommand()); + return parseVersion(runCommand(true)); } @NotNull - private ProcessOutput runCommand() throws SvnBindException { + public ProcessOutput runCommand(boolean quiet) throws SvnBindException { Command command = new Command(SvnCommandName.version); + if (quiet) { command.put("--quiet"); + } return newRuntime(myVcs).runLocal(command, COMMAND_TIMEOUT).getProcessOutput(); } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java index e96e250f1e88..d34014e49a06 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java @@ -16,12 +16,16 @@ package org.jetbrains.idea.svn.commandLine; import com.intellij.execution.ExecutableValidator; +import com.intellij.execution.process.ProcessOutput; import com.intellij.notification.Notification; +import com.intellij.notification.NotificationType; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Version; +import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.svn.*; +import org.jetbrains.idea.svn.api.CmdVersionClient; /** * Created with IntelliJ IDEA. @@ -33,6 +37,8 @@ public class SvnExecutableChecker extends ExecutableValidator { private static final Logger LOG = Logger.getInstance(SvnExecutableChecker.class); + private static final String SVN_VERSION_ENGLISH_OUTPUT = "The following repository access (RA) modules are available"; + @NotNull private final SvnVcs myVcs; public SvnExecutableChecker(@NotNull SvnVcs vcs) { @@ -71,6 +77,10 @@ public class SvnExecutableChecker extends ExecutableValidator { if (version != null) { try { result = validateVersion(version); + + if (result == null) { + result = validateEnglishOutput(); + } } catch (Throwable e) { LOG.info(e); @@ -86,12 +96,27 @@ public class SvnExecutableChecker extends ExecutableValidator { getOldExecutableMessage(version)) : null; } + @Nullable + private Notification validateEnglishOutput() throws SvnBindException { + ProcessOutput versionOutput = getVersionClient().runCommand(false); + Notification result = null; + + if (!isEnglishOutput(versionOutput.getStdout())) { + LOG.info("\"svn --version\" command contains non-English output " + versionOutput.getStdout()); + + result = new ExecutableNotValidNotification(prepareDescription(SvnBundle.message("non.english.locale.detected.warning"), false), + NotificationType.WARNING); + } + + return result; + } + @Nullable private Version getConfiguredClientVersion() { Version result = null; try { - result = myVcs.getCommandLineFactory().createVersionClient().getVersion(); + result = getVersionClient().getVersion(); } catch (Throwable e) { LOG.info(e); @@ -100,6 +125,15 @@ public class SvnExecutableChecker extends ExecutableValidator { return result; } + @NotNull + private CmdVersionClient getVersionClient() { + return (CmdVersionClient)myVcs.getCommandLineFactory().createVersionClient(); + } + + public static boolean isEnglishOutput(@NotNull String versionOutput) { + return StringUtil.containsIgnoreCase(versionOutput, SVN_VERSION_ENGLISH_OUTPUT); + } + private static String getWrongPathMessage() { return SvnBundle.message("subversion.executable.notification.description"); } From 845765105c1587bc9c7a53dbfc4e51007dffe185 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Tue, 28 Oct 2014 22:36:22 +0300 Subject: [PATCH 63/90] IDEA-118571 Added svn command line client re-validation on configured locale ("svn.executable.locale" registry value) change --- .../jetbrains/idea/svn/commandLine/CommandRuntime.java | 2 +- .../idea/svn/commandLine/SvnExecutableChecker.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java index e892d049f040..ec9a504d966d 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java @@ -52,7 +52,7 @@ public class CommandRuntime { SvnApplicationSettings settings = SvnApplicationSettings.getInstance(); exePath = settings.getCommandLinePath(); - executableLocale = Registry.stringValue("svn.executable.locale"); + executableLocale = Registry.stringValue(SvnExecutableChecker.SVN_EXECUTABLE_LOCALE_REGISTRY_KEY); myModules = ContainerUtil.newArrayList(); myModules.add(new CommandParametersResolutionModule(this)); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java index d34014e49a06..45788dea2da2 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java @@ -21,6 +21,9 @@ import com.intellij.notification.Notification; import com.intellij.notification.NotificationType; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Version; +import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.util.registry.RegistryValue; +import com.intellij.openapi.util.registry.RegistryValueListener; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,6 +40,7 @@ public class SvnExecutableChecker extends ExecutableValidator { private static final Logger LOG = Logger.getInstance(SvnExecutableChecker.class); + public static final String SVN_EXECUTABLE_LOCALE_REGISTRY_KEY = "svn.executable.locale"; private static final String SVN_VERSION_ENGLISH_OUTPUT = "The following repository access (RA) modules are available"; @NotNull private final SvnVcs myVcs; @@ -45,6 +49,12 @@ public class SvnExecutableChecker extends ExecutableValidator { super(vcs.getProject(), getNotificationTitle(), getWrongPathMessage()); myVcs = vcs; + Registry.get(SVN_EXECUTABLE_LOCALE_REGISTRY_KEY).addListener(new RegistryValueListener.Adapter() { + @Override + public void afterValueChanged(@NotNull RegistryValue value) { + myVcs.checkCommandLineVersion(); + } + }, myProject); } @Override From 672c42cc8e33ad3ce04599570722821bdfac4dde Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Tue, 28 Oct 2014 22:52:27 +0300 Subject: [PATCH 64/90] svn: Expire all existing svn command line client validation notifications before showing (or not showing if everything is valid) new ones - as different notifications (descriptions, etc.) could be provided for different validation failures --- .../com/intellij/execution/ExecutableValidator.java | 6 +++++- .../idea/svn/commandLine/SvnExecutableChecker.java | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java b/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java index b63fd4de6de1..c8597c393c07 100644 --- a/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java +++ b/platform/platform-impl/src/com/intellij/execution/ExecutableValidator.java @@ -48,7 +48,7 @@ public abstract class ExecutableValidator { private static final NotificationGroup ourNotificationGroup = new NotificationGroup("External Executable Critical Failures", STICKY_BALLOON, true); @NotNull protected final Project myProject; - @NotNull private final NotificationsManager myNotificationManager; + @NotNull protected final NotificationsManager myNotificationManager; @NotNull private final String myNotificationErrorTitle; @NotNull private final String myNotificationErrorDescription; @@ -176,6 +176,10 @@ public abstract class ExecutableValidator { } Notification notification = validate(getCurrentExecutable()); + return notify(notification); + } + + protected boolean notify(@Nullable Notification notification) { if (notification != null) { showExecutableNotConfiguredNotification(notification); return false; diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java index 45788dea2da2..6d1b6733e1bf 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java @@ -68,6 +68,19 @@ public class SvnExecutableChecker extends ExecutableValidator { return SvnConfigurable.DISPLAY_NAME; } + @Override + protected boolean notify(@Nullable Notification notification) { + expireAll(); + + return super.notify(notification); + } + + public void expireAll() { + for (Notification notification : myNotificationManager.getNotificationsOfType(ExecutableNotValidNotification.class, myProject)) { + notification.expire(); + } + } + @Override protected void showSettingsAndExpireIfFixed(@NotNull Notification notification) { showSettings(); From 4e381d7ae2147bbfb226bd7a380192ed2e6a490b Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Tue, 28 Oct 2014 21:28:59 +0100 Subject: [PATCH 65/90] softly reference light tree --- .../src/com/intellij/psi/impl/source/tree/FileElement.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/tree/FileElement.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/FileElement.java index a2348eabbe97..2e0d1a768a3c 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/tree/FileElement.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/tree/FileElement.java @@ -26,6 +26,7 @@ import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IFileElementType; import com.intellij.psi.tree.ILightStubFileElementType; +import com.intellij.reference.SoftReference; import com.intellij.util.CharTable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -50,7 +51,7 @@ public class FileElement extends LazyParseableElement implements FileASTNode, Ge return myCharTable; } - private static final Key ourTreeKey = Key.create("lighter.key"); + private static final Key> ourTreeKey = Key.create("lighter.key"); @Nullable @Override @@ -60,11 +61,11 @@ public class FileElement extends LazyParseableElement implements FileASTNode, Ge LighterAST tree; if (!isParsed()) { - tree = getUserData(ourTreeKey); + tree = SoftReference.dereference(getUserData(ourTreeKey)); if (tree == null) { final ILightStubFileElementType type = (ILightStubFileElementType)contentType; tree = new FCTSBackedLighterAST(getCharTable(), type.parseContentsLight(this)); - putUserData(ourTreeKey, tree); + putUserData(ourTreeKey, new SoftReference(tree)); } } else { From afdc5be84ef7f6cf5ed4004ae95ee47bb4e061c1 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Tue, 28 Oct 2014 23:35:08 +0300 Subject: [PATCH 66/90] UI: one simple way to control toolwindow toolbars visibility 4 --- .../openapi/ui/SimpleToolWindowPanel.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/SimpleToolWindowPanel.java b/platform/platform-api/src/com/intellij/openapi/ui/SimpleToolWindowPanel.java index c4523819c0f1..dfbaa33999fb 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/SimpleToolWindowPanel.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/SimpleToolWindowPanel.java @@ -22,9 +22,11 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.openapi.wm.ToolWindow; import com.intellij.ui.content.Content; +import com.intellij.ui.content.ContentManager; import com.intellij.ui.content.ContentManagerAdapter; import com.intellij.ui.content.ContentManagerEvent; import com.intellij.ui.switcher.QuickActionProvider; +import com.intellij.ui.tabs.JBTabs; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.AwtVisitor; import com.intellij.util.ui.UIUtil; @@ -189,7 +191,21 @@ public class SimpleToolWindowPanel extends JPanel implements QuickActionProvider myToolWindow.getContentManager().addContentManagerListener(new ContentManagerAdapter() { @Override public void contentAdded(ContentManagerEvent event) { - setContentToolbarVisible(event.getContent(), getVisibilityValue()); + JComponent component = event.getContent().getComponent(); + setContentToolbarVisible(component, getVisibilityValue()); + + // support nested content managers, e.g. RunnerLayoutUi as content component + ContentManager contentManager = + component instanceof DataProvider ? PlatformDataKeys.CONTENT_MANAGER.getData((DataProvider)component) : null; + if (contentManager != null) contentManager.addContentManagerListener(this); + } + + @Override + public void selectionChanged(ContentManagerEvent event) { + Content content = event.getContent(); + if (content != null) { + setContentToolbarVisible(content.getComponent(), getVisibilityValue()); + } } }); } @@ -203,7 +219,7 @@ public class SimpleToolWindowPanel extends JPanel implements QuickActionProvider public void setSelected(AnActionEvent e, boolean state) { myPropertiesComponent.setValue(getProperty(), String.valueOf(state), String.valueOf(true)); for (Content content : myToolWindow.getContentManager().getContents()) { - setContentToolbarVisible(content, state); + setContentToolbarVisible(content.getComponent(), state); } } @@ -216,19 +232,17 @@ public class SimpleToolWindowPanel extends JPanel implements QuickActionProvider return myPropertiesComponent.getBoolean(getProperty(), true); } - private static void setContentToolbarVisible(Content content, boolean state) { - LinkedList deque = ContainerUtil.newLinkedList(content.getComponent()); + private static void setContentToolbarVisible(@NotNull JComponent root, boolean state) { + LinkedList deque = ContainerUtil.newLinkedList(root); while(!deque.isEmpty()) { JComponent component = deque.pollFirst(); - if (!(component instanceof JPanel)) continue; - for (int i = 0, count = component.getComponentCount(); i < count; i++) { Component c = component.getComponent(i); if (c instanceof ActionToolbar) { c.setVisible(state); } - else if (c instanceof JPanel) { - deque.addLast((JPanel)c); + else if (c instanceof JPanel || c instanceof JLayeredPane || c instanceof JBTabs) { + deque.addLast((JComponent)c); } } } From a753e9b53ee161ddc0f2fd770dc5dad504c07caa Mon Sep 17 00:00:00 2001 From: "liana.bakradze" Date: Wed, 29 Oct 2014 00:31:46 +0300 Subject: [PATCH 67/90] part of EDU-257 updated all visible information about shortcuts but not immediately --- .../python/edu/StudyInstructionPainter.java | 45 ++++++++++++++++--- .../python/edu/StudyTaskManager.java | 4 ++ .../python/edu/editor/StudyEditor.java | 29 ++++++++---- 3 files changed, 63 insertions(+), 15 deletions(-) diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java index 4fa323172bcc..87f1f7a35454 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java @@ -1,14 +1,20 @@ package com.jetbrains.python.edu; +import com.intellij.openapi.actionSystem.ActionManager; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.KeyboardShortcut; import com.intellij.openapi.fileEditor.impl.EditorEmptyTextPainter; import com.intellij.openapi.fileEditor.impl.EditorsSplitters; +import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.util.Couple; import com.intellij.ui.Gray; import com.intellij.ui.JBColor; import com.intellij.util.PairFunction; import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.UIUtil; +import com.jetbrains.python.edu.actions.*; +import javax.swing.*; import java.awt.*; /** @@ -27,12 +33,18 @@ public class StudyInstructionPainter extends EditorEmptyTextPainter { UIUtil.TextPainter painter = new UIUtil.TextPainter().withLineSpacing(1.5f); painter.appendLine("PyCharm Educational Edition").underlined(new JBColor(Gray._150, Gray._180)); - painter.appendLine("Navigate to the next task window with Ctrl + Enter").smaller().withBullet(); - painter.appendLine("Navigate between task windows with Ctrl + Shift + < and Ctrl + Shift + >").smaller().withBullet(); - painter.appendLine("Navigate between tasks with Ctrl + < and Ctrl + >").smaller().withBullet(); - painter.appendLine("Reset current task file with Ctrl + Shift + X").smaller().withBullet(); - painter.appendLine("Check task with Alt + Ctrl + Enter").smaller().withBullet(); - painter.appendLine("Get hint for the task window using Ctrl + 7").smaller().withBullet(); + addAction(painter, "Navigate to the next task window", StudyNextWindowAction.ACTION_ID, StudyNextWindowAction.SHORTCUT2, true); + String shortcut1 = getShortcutText(StudyPrevWindowAction.ACTION_ID, StudyPrevWindowAction.SHORTCUT, false, false); + String shortcut2 = getShortcutText(StudyNextWindowAction.ACTION_ID, StudyNextWindowAction.SHORTCUT, false, false); + String text = "Navigate between task windows with " + shortcut1 + + " and " + shortcut2; + painter.appendLine(text).smaller().withBullet(); + shortcut1 = getShortcutText(StudyPreviousStudyTaskAction.ACTION_ID, StudyPreviousStudyTaskAction.SHORTCUT, false, false); + shortcut2 = getShortcutText(StudyNextStudyTaskAction.ACTION_ID, StudyNextStudyTaskAction.SHORTCUT, false, false); + painter.appendLine("Navigate between tasks with " + shortcut1 + " and " + shortcut2).smaller().withBullet(); + addAction(painter, "Reset current task file", StudyRefreshTaskFileAction.ACTION_ID, StudyRefreshTaskFileAction.SHORTCUT, false); + addAction(painter, "Check task", StudyCheckAction.ACTION_ID, StudyCheckAction.SHORTCUT, false); + addAction(painter, "Get hint for the task window", StudyShowHintAction.ACTION_ID, StudyShowHintAction.SHORTCUT, false); painter.appendLine("To see your progress open the 'Course Description' panel").smaller().withBullet(); painter.draw(g, new PairFunction>() { @Override @@ -42,4 +54,25 @@ public class StudyInstructionPainter extends EditorEmptyTextPainter { } }); } + private static void addAction(UIUtil.TextPainter painter, String text, String actionId, String defaultShortcutString, boolean useDefault) { + String shortcut = getShortcutText(actionId, defaultShortcutString, useDefault, true); + String actionText = text + " with " + shortcut; + painter.appendLine(actionText).smaller().withBullet(); + } + + private static String getShortcutText(String actionId, String defaultShortcutString, boolean useDefault, boolean wrapTag) { + AnAction action = ActionManager.getInstance().getAction(actionId); + String shortcut = ""; + if (!useDefault) { + shortcut = KeymapUtil.getFirstKeyboardShortcutText(action); + } + if (shortcut.isEmpty() && defaultShortcutString != null) { + KeyboardShortcut keyboardShortcut = new KeyboardShortcut(KeyStroke.getKeyStroke(defaultShortcutString), null); + shortcut = KeymapUtil.getShortcutText(keyboardShortcut); + } + if (!wrapTag) { + return shortcut; + } + return "" + shortcut + ""; + } } diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java index ec7caf38eac4..f37adf0b19f6 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java @@ -235,6 +235,10 @@ public class StudyTaskManager implements ProjectComponent, PersistentStateCompon private static void addShortcut(@NotNull final String shortcutString, @NotNull final String actionIdString) { Keymap keymap = KeymapManager.getInstance().getActiveKeymap(); + Shortcut[] shortcuts = keymap.getShortcuts(actionIdString); + if (shortcuts.length > 0) { + return; + } Shortcut studyActionShortcut = new KeyboardShortcut(KeyStroke.getKeyStroke(shortcutString), null); String[] actionsIds = keymap.getActionIds(studyActionShortcut); for (String actionId : actionsIds) { diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java index 1deeb4e0de39..b497b5216c26 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java @@ -4,6 +4,8 @@ import com.intellij.codeHighlighting.BackgroundEditorHighlighter; import com.intellij.icons.AllIcons; import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.openapi.actionSystem.ActionManager; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.KeyboardShortcut; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; @@ -16,6 +18,7 @@ import com.intellij.openapi.fileEditor.*; import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; import com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl; import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider; +import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; @@ -48,8 +51,9 @@ import java.awt.*; import java.awt.datatransfer.StringSelection; import java.awt.event.*; import java.beans.PropertyChangeListener; -import java.util.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * Implementation of StudyEditor which has panel with special buttons and task text @@ -79,7 +83,14 @@ public class StudyEditor implements TextEditor { return myTaskFile; } - private static JButton addButton(@NotNull final JComponent parentComponent, String toolTipText, Icon icon) { + private static JButton addButton(@NotNull final JComponent parentComponent, String actionID, Icon icon, + @Nullable String defaultShortcutString) { + AnAction action = ActionManager.getInstance().getAction(actionID); + String toolTipText = KeymapUtil.createTooltipText(action.getTemplatePresentation().getText(), action); + if (!toolTipText.contains("(") && defaultShortcutString != null) { + KeyboardShortcut shortcut = new KeyboardShortcut(KeyStroke.getKeyStroke(defaultShortcutString), null); + toolTipText += " (" + KeymapUtil.getShortcutText(shortcut) + ")"; + } JButton newButton = new JButton(); newButton.setToolTipText(toolTipText); newButton.setIcon(icon); @@ -192,13 +203,13 @@ public class StudyEditor implements TextEditor { } private void initializeButtons(@NotNull final JPanel taskActionsPanel, @NotNull final TaskFile taskFile) { - myCheckButton = addButton(taskActionsPanel, "Check Task (Ctrl + Alt + Enter)", StudyIcons.Resolve); - myPrevTaskButton = addButton(taskActionsPanel, "Previous Task (Ctrl + <)", StudyIcons.Prev); - myNextTaskButton = addButton(taskActionsPanel, "Next Task (Ctrl + >)", AllIcons.Actions.Forward); - myRefreshButton = addButton(taskActionsPanel, "Reset Task File (Ctrl + Shift + X)", AllIcons.Actions.Refresh); - JButton myShowHintButton = addButton(taskActionsPanel, "Show Hint for Task Window (Ctrl + 7)", StudyIcons.ShowHint); + myCheckButton = addButton(taskActionsPanel, StudyCheckAction.ACTION_ID, StudyIcons.Resolve, StudyCheckAction.SHORTCUT); + myPrevTaskButton = addButton(taskActionsPanel, StudyPreviousStudyTaskAction.ACTION_ID, StudyIcons.Prev, StudyPreviousStudyTaskAction.SHORTCUT); + myNextTaskButton = addButton(taskActionsPanel, StudyNextStudyTaskAction.ACTION_ID, AllIcons.Actions.Forward, StudyNextStudyTaskAction.SHORTCUT); + myRefreshButton = addButton(taskActionsPanel, StudyRefreshTaskFileAction.ACTION_ID, AllIcons.Actions.Refresh, StudyRefreshTaskFileAction.SHORTCUT); + JButton myShowHintButton = addButton(taskActionsPanel, StudyShowHintAction.ACTION_ID, StudyIcons.ShowHint, StudyShowHintAction.SHORTCUT); if (!taskFile.getTask().getUserTests().isEmpty()) { - JButton runButton = addButton(taskActionsPanel, "Run", AllIcons.General.Run); + JButton runButton = addButton(taskActionsPanel, StudyRunAction.ACTION_ID, AllIcons.General.Run, null); runButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -206,7 +217,7 @@ public class StudyEditor implements TextEditor { studyRunAction.run(myProject); } }); - JButton watchInputButton = addButton(taskActionsPanel, "Watch Test Input", StudyIcons.WatchInput); + JButton watchInputButton = addButton(taskActionsPanel, "WatchInputAction", StudyIcons.WatchInput, null); watchInputButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { From 2b10eade836739f67c5d5d5f57e7b299888eae75 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Tue, 28 Oct 2014 23:00:33 +0100 Subject: [PATCH 68/90] Fix attach to process for paths with spaces (PY-14246). --- .../pydevd_attach_to_process/add_code_to_python_process.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/helpers/pydev/pydevd_attach_to_process/add_code_to_python_process.py b/python/helpers/pydev/pydevd_attach_to_process/add_code_to_python_process.py index 51264ceea75e..a1ec61e9ba4c 100644 --- a/python/helpers/pydev/pydevd_attach_to_process/add_code_to_python_process.py +++ b/python/helpers/pydev/pydevd_attach_to_process/add_code_to_python_process.py @@ -531,7 +531,7 @@ def run_python_code_mac(pid, python_code, connect_debugger_tracing=False, show_d if connect_debugger_tracing: cmd.extend([ # "-o 'expr (int) SetSysTraceFunc(0, 0);'", - "-o 'command script import %s'" % (lldb_threads_settrace_file,), + "-o 'command script import \'%s\''" % (lldb_threads_settrace_file,), ]) cmd.extend([ From 3c8313f95fa9eeba6831a1d71bf14082dcb10556 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Tue, 28 Oct 2014 23:58:48 +0100 Subject: [PATCH 69/90] Execute settrace only for process threads in lldb (PY-14247). --- .../add_code_to_python_process.py | 25 +++++++++++-------- .../linux/lldb_threads_prepare.py | 17 +++++++++++++ .../linux/lldb_threads_settrace.py | 9 +++---- 3 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_prepare.py diff --git a/python/helpers/pydev/pydevd_attach_to_process/add_code_to_python_process.py b/python/helpers/pydev/pydevd_attach_to_process/add_code_to_python_process.py index a1ec61e9ba4c..cf698e5230da 100644 --- a/python/helpers/pydev/pydevd_attach_to_process/add_code_to_python_process.py +++ b/python/helpers/pydev/pydevd_attach_to_process/add_code_to_python_process.py @@ -418,10 +418,7 @@ def run_python_code_linux(pid, python_code, connect_debugger_tracing=False, show if not os.path.exists(target_dll): raise RuntimeError('Could not find dll file to inject: %s' % target_dll) - gdb_threads_settrace_file = os.path.join(filedir, 'linux', 'gdb_threads_settrace.py') - gdb_threads_settrace_file = os.path.normpath(gdb_threads_settrace_file) - if not os.path.exists(gdb_threads_settrace_file): - raise RuntimeError('Could not find file to settrace: %s' % gdb_threads_settrace_file) + gdb_threads_settrace_file = find_helper_script(filedir, 'gdb_threads_settrace.py') # Note: we currently don't support debug builds is_debug = 0 @@ -476,6 +473,15 @@ def run_python_code_linux(pid, python_code, connect_debugger_tracing=False, show return out, err +def find_helper_script(filedir, script_name): + lldb_threads_settrace_file = os.path.join(filedir, 'linux', script_name) + lldb_threads_settrace_file = os.path.normpath(lldb_threads_settrace_file) + if not os.path.exists(lldb_threads_settrace_file): + raise RuntimeError('Could not find file to settrace: %s' % lldb_threads_settrace_file) + + return lldb_threads_settrace_file + + def run_python_code_mac(pid, python_code, connect_debugger_tracing=False, show_debug_info=0): assert '\'' not in python_code, 'Having a single quote messes with our command.' filedir = os.path.dirname(__file__) @@ -498,12 +504,10 @@ def run_python_code_mac(pid, python_code, connect_debugger_tracing=False, show_d if not os.path.exists(target_dll): raise RuntimeError('Could not find dll file to inject: %s' % target_dll) - lldb_threads_settrace_file = os.path.join(filedir, 'linux', 'lldb_threads_settrace.py') - lldb_threads_settrace_file = os.path.normpath(lldb_threads_settrace_file) - if not os.path.exists(lldb_threads_settrace_file): - raise RuntimeError('Could not find file to settrace: %s' % lldb_threads_settrace_file) - + lldb_threads_settrace_file = find_helper_script(filedir, 'lldb_threads_settrace.py') + lldb_threads_prepare_file = find_helper_script(filedir, 'lldb_threads_prepare.py') # Note: we currently don't support debug builds + is_debug = 0 # Note that the space in the beginning of each line in the multi-line is important! cmd = [ @@ -521,8 +525,9 @@ def run_python_code_mac(pid, python_code, connect_debugger_tracing=False, show_d cmd.extend([ "-o 'process attach --pid %d'"%pid, + "-o 'command script import \'%s\''" % (lldb_threads_prepare_file,), "-o 'expr (void*)dlopen(\"%s\", 2);'" % target_dll, - "-o 'expr (int)hello();'", + # "-o 'expr (int)hello();'", "-o 'expr (int)DoAttach(%s, \"%s\", %s);'" % ( is_debug, python_code, show_debug_info), ]) diff --git a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_prepare.py b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_prepare.py new file mode 100644 index 000000000000..3495cd5e25ec --- /dev/null +++ b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_prepare.py @@ -0,0 +1,17 @@ +# This file is meant to be run inside lldb as a command before +# attaching the debugger to mark process threads as suspended +# to distinguish them from debugger threads later + +def __lldb_init_module(debugger, internal_dict): + import lldb + + try: + target = debugger.GetSelectedTarget() + if target: + process = target.GetProcess() + if process: + for thread in process: + internal_dict['_thread_%d' % thread.GetThreadID()] = True + # thread.Suspend() + except: + import traceback;traceback.print_exc() diff --git a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py index b457e1547cd2..b645807367b5 100644 --- a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py +++ b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py @@ -15,14 +15,11 @@ def __lldb_init_module(debugger, internal_dict): for thread in process: # Get the first frame print('Thread %s, suspended %s\n'%(thread, thread.IsStopped())) + print(thread.GetName()) process.SetSelectedThread(thread) - if not thread.IsStopped(): - error = process.Stop() - print(error) - - if thread: + if getattr(internal_dict, '_thread_%d' % thread.GetThreadID(), False): frame = thread.GetSelectedFrame() if frame: print('Will settrace in: %s' % (frame,)) @@ -31,6 +28,6 @@ def __lldb_init_module(debugger, internal_dict): error = res.GetError() if error: print(error) - thread.Resume() + thread.Resume() except: import traceback;traceback.print_exc() From dc14c65ac7e34e4cbac2c41a0407c9cca6a353c9 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Wed, 29 Oct 2014 00:06:53 +0100 Subject: [PATCH 70/90] Less debug info. --- .../pydevd_attach_to_process/linux/lldb_threads_prepare.py | 1 + .../linux/lldb_threads_settrace.py | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_prepare.py b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_prepare.py index 3495cd5e25ec..21025d7e2097 100644 --- a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_prepare.py +++ b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_prepare.py @@ -11,6 +11,7 @@ def __lldb_init_module(debugger, internal_dict): process = target.GetProcess() if process: for thread in process: + # print('Marking process thread %d'%thread.GetThreadID()) internal_dict['_thread_%d' % thread.GetThreadID()] = True # thread.Suspend() except: diff --git a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py index b645807367b5..4abb96ff1d4a 100644 --- a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py +++ b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py @@ -2,7 +2,7 @@ # the attach_linux.dylib dll has already been loaded to settrace for all threads. def __lldb_init_module(debugger, internal_dict): # Command Initialization code goes here - print('Startup LLDB in Python!') + # print('Startup LLDB in Python!') import lldb try: @@ -14,12 +14,11 @@ def __lldb_init_module(debugger, internal_dict): if process: for thread in process: # Get the first frame - print('Thread %s, suspended %s\n'%(thread, thread.IsStopped())) - print(thread.GetName()) + # print('Thread %s, suspended %s\n'%(thread, thread.IsStopped())) process.SetSelectedThread(thread) - if getattr(internal_dict, '_thread_%d' % thread.GetThreadID(), False): + if internal_dict.get('_thread_%d' % thread.GetThreadID(), False): frame = thread.GetSelectedFrame() if frame: print('Will settrace in: %s' % (frame,)) From e25c3661a1861c74786c9ae273096979c9b2b816 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Wed, 29 Oct 2014 00:11:09 +0100 Subject: [PATCH 71/90] Even less debug info. --- .../pydevd_attach_to_process/linux/lldb_threads_settrace.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py index 4abb96ff1d4a..e315d6ea80cd 100644 --- a/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py +++ b/python/helpers/pydev/pydevd_attach_to_process/linux/lldb_threads_settrace.py @@ -6,7 +6,7 @@ def __lldb_init_module(debugger, internal_dict): import lldb try: - show_debug_info = 1 + show_debug_info = 0 is_debug = 0 target = debugger.GetSelectedTarget() if target: From 581b34f67765d5512b9565ad96cc061e090847fd Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Wed, 29 Oct 2014 04:27:31 +0300 Subject: [PATCH 72/90] IDEA-118571 Implemented locale validation - check if "invalid locale" warning is presented in svn command line client output (and display corresponding warning notification if necessary) --- .../idea/svn/api/CmdVersionClient.java | 6 +++--- .../svn/commandLine/SvnExecutableChecker.java | 19 ++++++++++++++++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java index 5b1cffd1afb7..5d4e72d7712a 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java @@ -36,9 +36,9 @@ public class CmdVersionClient extends BaseSvnClient implements VersionClient { @NotNull private static Version parseVersion(@NotNull ProcessOutput output) throws SvnBindException { - if (output.isTimeout() || (output.getExitCode() != 0) || !output.getStderr().isEmpty()) { - throw new SvnBindException( - String.format("Exit code: %d, Error: %s, Timeout: %b", output.getExitCode(), output.getStderr(), output.isTimeout())); + // TODO: This or similar check should likely go to CommandRuntime - to be applied for all commands + if (output.isTimeout()) { + throw new SvnBindException(String.format("Exit code: %d, Error: %s", output.getExitCode(), output.getStderr())); } return parseVersion(output.getStdout()); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java index 6d1b6733e1bf..f9f409e66397 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/SvnExecutableChecker.java @@ -25,11 +25,15 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.registry.RegistryValue; import com.intellij.openapi.util.registry.RegistryValueListener; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.svn.*; import org.jetbrains.idea.svn.api.CmdVersionClient; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * Created with IntelliJ IDEA. * User: Irina.Chernushina @@ -42,6 +46,9 @@ public class SvnExecutableChecker extends ExecutableValidator { public static final String SVN_EXECUTABLE_LOCALE_REGISTRY_KEY = "svn.executable.locale"; private static final String SVN_VERSION_ENGLISH_OUTPUT = "The following repository access (RA) modules are available"; + private static final Pattern INVALID_LOCALE_WARNING_PATTERN = Pattern.compile( + "^.*cannot set .* locale.*please check that your locale name is correct$", + Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); @NotNull private final SvnVcs myVcs; @@ -102,7 +109,7 @@ public class SvnExecutableChecker extends ExecutableValidator { result = validateVersion(version); if (result == null) { - result = validateEnglishOutput(); + result = validateLocale(); } } catch (Throwable e) { @@ -120,11 +127,17 @@ public class SvnExecutableChecker extends ExecutableValidator { } @Nullable - private Notification validateEnglishOutput() throws SvnBindException { + private Notification validateLocale() throws SvnBindException { ProcessOutput versionOutput = getVersionClient().runCommand(false); Notification result = null; - if (!isEnglishOutput(versionOutput.getStdout())) { + Matcher matcher = INVALID_LOCALE_WARNING_PATTERN.matcher(versionOutput.getStderr()); + if (matcher.find()) { + LOG.info(matcher.group()); + + result = new ExecutableNotValidNotification(prepareDescription(UIUtil.getHtmlBody(matcher.group()), false), NotificationType.WARNING); + } + else if (!isEnglishOutput(versionOutput.getStdout())) { LOG.info("\"svn --version\" command contains non-English output " + versionOutput.getStdout()); result = new ExecutableNotValidNotification(prepareDescription(SvnBundle.message("non.english.locale.detected.warning"), false), From 652932af1c2d4856dbca8c0287b814d78dd4468b Mon Sep 17 00:00:00 2001 From: Ilya Klyuchnikov Date: Wed, 29 Oct 2014 10:43:57 +0300 Subject: [PATCH 73/90] @Nullable --- .../intellij/codeInsight/InferredAnnotationsManagerImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java index 7e5583961969..56f6cad1493f 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java @@ -65,12 +65,13 @@ public class InferredAnnotationsManagerImpl extends InferredAnnotationsManager { return null; } + @Nullable private PsiAnnotation getHardcodedContractAnnotation(PsiMethod method) { List contracts = HardcodedContracts.getHardcodedContracts(method, null); return contracts.isEmpty() ? null : createContractAnnotation(contracts, HardcodedContracts.isHardcodedPure(method)); } - private static boolean ignoreBytecodeInference(PsiModifierListOwner owner, String annotationFQN) { + private static boolean ignoreBytecodeInference(PsiModifierListOwner owner, @Nullable String annotationFQN) { if (ORG_JETBRAINS_ANNOTATIONS_CONTRACT.equals(annotationFQN) && hasHardcodedContracts(owner)) { return true; } From 922316eb6223e1151e8d4ae67d87fbc5b4b94f48 Mon Sep 17 00:00:00 2001 From: "Svetlana.Zemlyanskay" Date: Wed, 29 Oct 2014 10:59:43 +0300 Subject: [PATCH 74/90] jsch: update jar from jcraft --- lib/jsch-0.1.51.jar | Bin 260010 -> 261687 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/jsch-0.1.51.jar b/lib/jsch-0.1.51.jar index 70d13988ccec40175d316e28c87fc2c9d2fc4dfd..725745f81a6d1e7ee1fa4fbf0a4c23b2a2f97bda 100644 GIT binary patch delta 73927 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 NR>DqGQwbV~{{gS2`wjpA delta 72405 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 From 1429ce728f6d1f428071af20289285e68b49f79a Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 28 Oct 2014 13:51:00 +0400 Subject: [PATCH 75/90] IDEA-58130 Improve editor performance during working with large files written in a single line Make logicalPositionToOffset calculations faster for long lines (when soft wraps are enabled). Position calculations are more consistent now so this is also supposed to fix EA-53787. --- .../folding/JavaFoldingTest.groovy | 30 +++++ .../injected/editor/EditorWindowImpl.java | 22 +++- .../intellij/openapi/editor/ex/EditorEx.java | 2 + .../openapi/editor/ex/SoftWrapModelEx.java | 8 ++ .../openapi/editor/ex/util/EditorUtil.java | 7 +- .../openapi/editor/impl/CaretImpl.java | 7 +- ...DefaultEditorTextRepresentationHelper.java | 14 +- .../openapi/editor/impl/EditorImpl.java | 19 ++- .../impl/EditorTextRepresentationHelper.java | 23 +++- .../editor/impl/SoftWrapModelImpl.java | 43 ++++++- .../impl/softwrap/SoftWrapDataMapper.java | 11 +- .../mapping/AbstractMappingStrategy.java | 11 +- .../mapping/CachingSoftWrapDataMapper.java | 10 +- .../impl/softwrap/mapping/EditorPosition.java | 10 +- .../LogicalToOffsetCalculationStrategy.java | 120 ++++++++++++++++++ .../LogicalToVisualMappingStrategy.java | 5 +- .../impl/softwrap/mapping/MappingUtil.java | 33 ++++- .../OffsetToLogicalCalculationStrategy.java | 7 +- .../VisualToLogicalCalculationStrategy.java | 3 +- .../MockEditorTextRepresentationHelper.java | 37 ++++-- .../CachingSoftWrapDataMapperTest.java | 17 +-- 21 files changed, 375 insertions(+), 64 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/LogicalToOffsetCalculationStrategy.java diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy index 408130f74f66..7347fe3b190a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy @@ -33,6 +33,7 @@ import com.intellij.psi.PsiClass import com.intellij.psi.PsiLiteralExpression import com.intellij.psi.PsiMethod import com.intellij.psi.search.GlobalSearchScope +import com.intellij.testFramework.EditorTestUtil import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase @@ -1087,6 +1088,35 @@ class Foo { assertEquals 0, expandedFoldRegionsCount } + public void "test processing of tabs inside fold regions"() { + String text = """public class Foo { +\tpublic static void main(String[] args) { +\t\tjavax.swing.SwingUtilities.invokeLater(new Runnable() { +\t\t\t@Override +\t\t\tpublic void run() { +\t\t\t\tSystem.out.println(); +\t\t\t} +\t\t}); +\t} +}"""; + configure text + assert myFixture.editor.getFoldingModel().getCollapsedRegionAtOffset(text.indexOf("new")) + myFixture.editor.settings.useTabCharacter = true + EditorTestUtil.configureSoftWraps(myFixture.editor, 1000) + myFixture.editor.caretModel.moveToOffset(text.indexOf("System")) + myFixture.performEditorAction(IdeActions.ACTION_EDITOR_TAB) + myFixture.checkResult("""public class Foo { +\tpublic static void main(String[] args) { +\t\tjavax.swing.SwingUtilities.invokeLater(new Runnable() { +\t\t\t@Override +\t\t\tpublic void run() { +\t\t\t\t\tSystem.out.println(); +\t\t\t} +\t\t}); +\t} +}"""); + } + private int getFoldRegionsCount() { return myFixture.editor.foldingModel.allFoldRegions.length } diff --git a/platform/lang-impl/src/com/intellij/injected/editor/EditorWindowImpl.java b/platform/lang-impl/src/com/intellij/injected/editor/EditorWindowImpl.java index 10bf53bce6bb..f1619d483e85 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/EditorWindowImpl.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/EditorWindowImpl.java @@ -570,9 +570,15 @@ public class EditorWindowImpl extends UserDataHolderBase implements EditorWindow @Override public int logicalPositionToOffset(@NotNull final LogicalPosition pos) { + return logicalPositionToOffset(pos, true); + } + + @Override + public int logicalPositionToOffset(@NotNull LogicalPosition pos, boolean softWrapAware) { int lineStartOffset = myDocumentWindow.getLineStartOffset(pos.line); return calcOffset(pos.column, pos.line, lineStartOffset); } + private int calcLogicalColumnNumber(int offsetInLine, int lineNumber, int lineStartOffset) { if (myDocumentWindow.getTextLength() == 0) return 0; @@ -583,13 +589,25 @@ public class EditorWindowImpl extends UserDataHolderBase implements EditorWindow CharSequence text = myDocumentWindow.getCharsSequence(); return EditorUtil.calcColumnNumber(this, text, lineStartOffset, lineStartOffset +offsetInLine); } + private int calcOffset(int col, int lineNumber, int lineStartOffset) { if (myDocumentWindow.getTextLength() == 0) return 0; int end = myDocumentWindow.getLineEndOffset(lineNumber); - CharSequence text = myDocumentWindow.getCharsSequence(); - return EditorUtil.calcOffset(this, text, lineStartOffset, end, col, EditorUtil.getTabSize(myDelegate), null); + int x = getDocument().getLineNumber(lineStartOffset) == 0 ? getPrefixTextWidthInPixels() : 0; + + // There is a possible case that target column points inside soft wrap-introduced virtual space. + if (col <= 0) { + return lineStartOffset; + } + + int result = EditorUtil.calcSoftWrapUnawareOffset(this, myDocumentWindow.getCharsSequence(), lineStartOffset, end, col, + EditorUtil.getTabSize(myDelegate), x, new int[]{0}, null); + if (result >= 0) { + return result; + } + return end; } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorEx.java b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorEx.java index 237f272266f0..2776693048fa 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorEx.java @@ -178,6 +178,8 @@ public interface EditorEx extends Editor { @NotNull VisualPosition logicalToVisualPosition(@NotNull LogicalPosition logicalPos, boolean softWrapAware); + int logicalPositionToOffset(@NotNull LogicalPosition logicalPos, boolean softWrapAware); + /** * Creates color scheme delegate which is bound to current editor. E.g. all schema changes will update editor state. * @param customGlobalScheme diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/ex/SoftWrapModelEx.java b/platform/platform-impl/src/com/intellij/openapi/editor/ex/SoftWrapModelEx.java index e3c03c2fbbd4..ed7bd263cf6c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/ex/SoftWrapModelEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/ex/SoftWrapModelEx.java @@ -50,6 +50,14 @@ public interface SoftWrapModelEx extends SoftWrapModel { @NotNull LogicalPosition offsetToLogicalPosition(int offset); + /** + * Asks current model to map given logical position to document offset + * + * @param logicalPosition target editor logical position + * @return document offset for the given editor logical position + */ + int logicalPositionToOffset(@NotNull LogicalPosition logicalPosition); + /** * Asks current model to adjust visual position that corresponds to the given logical position if necessary. *

diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/ex/util/EditorUtil.java b/platform/platform-impl/src/com/intellij/openapi/editor/ex/util/EditorUtil.java index 7d9973fed2d3..037bbc8337bc 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/ex/util/EditorUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/ex/util/EditorUtil.java @@ -222,7 +222,12 @@ public final class EditorUtil { * @param tabSize number of desired visual columns to use for tabulation representation * @param debugBuffer buffer to hold debug info during the processing (if any) * @return given text offset that identifies the same position that is pointed by the given visual column + * + * @deprecated This function can give incorrect results when soft wraps are enabled in editor. It is also slow in case of + * long document lines - {@link com.intellij.openapi.editor.Editor#logicalPositionToOffset(com.intellij.openapi.editor.LogicalPosition)} + * should be faster when soft wraps are enabled. To be removed in IDEA 16. */ + @SuppressWarnings("UnusedDeclaration") public static int calcOffset(@NotNull EditorEx editor, @NotNull CharSequence text, int start, @@ -291,7 +296,7 @@ public final class EditorUtil { * @return target offset that belongs to the [start; end) range and points to the target logical * column if any; -1 otherwise */ - private static int calcSoftWrapUnawareOffset(@NotNull Editor editor, + public static int calcSoftWrapUnawareOffset(@NotNull Editor editor, @NotNull CharSequence text, int start, int end, diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java index a84baee39f19..ca6de1b8c65f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java @@ -200,15 +200,14 @@ public class CaretImpl extends UserDataHolderBase implements Caret { final DocumentEx document = myEditor.getDocument(); int textEnd = Math.min(document.getTextLength() - 1, Math.max(offset, myOffset) + 1); CharSequence text = document.getCharsSequence().subSequence(textStart, textEnd); - StringBuilder positionToOffsetTrace = new StringBuilder(); - int inverseOffset = myEditor.logicalPositionToOffset(logicalPosition, positionToOffsetTrace); + int inverseOffset = myEditor.logicalPositionToOffset(logicalPosition); LogMessageEx.error( LOG, "caret moved to wrong offset. Please submit a dedicated ticket and attach current editor's text to it.", String.format( "Requested: offset=%d, logical position='%s' but actual: offset=%d, logical position='%s' (%s). %s%n" - + "interested text [%d;%d): '%s'%n debug trace: %s%nLogical position -> offset ('%s'->'%d') trace: %s", + + "interested text [%d;%d): '%s'%n debug trace: %s%nLogical position -> offset ('%s'->'%d')", offset, logicalPosition, myOffset, myLogicalCaret, positionByOffsetAfterMove, myEditor.dumpState(), - textStart, textEnd, text, debugBuffer, logicalPosition, inverseOffset, positionToOffsetTrace + textStart, textEnd, text, debugBuffer, logicalPosition, inverseOffset ) ); } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/DefaultEditorTextRepresentationHelper.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DefaultEditorTextRepresentationHelper.java index 61415eb90ce4..483d179fac3a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/DefaultEditorTextRepresentationHelper.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DefaultEditorTextRepresentationHelper.java @@ -19,7 +19,6 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.ex.util.EditorUtil; import gnu.trove.TObjectIntHashMap; import org.intellij.lang.annotations.JdkConstants; -import org.jetbrains.annotations.NotNull; /** * Not thread-safe. Performs caching of char widths, so cache reset must be invoked (via {@link #clearSymbolWidthCache()} method) when @@ -52,8 +51,8 @@ public class DefaultEditorTextRepresentationHelper implements EditorTextRepresen } @Override - public int toVisualColumnSymbolsNumber(@NotNull CharSequence text, int start, int end, int x) { - return EditorUtil.textWidthInColumns(myEditor, text, start, end, x); + public int toVisualColumnSymbolsNumber(int start, int end, int x) { + return EditorUtil.textWidthInColumns(myEditor, myEditor.getDocument().getImmutableCharSequence(), start, end, x); } @Override @@ -67,7 +66,14 @@ public class DefaultEditorTextRepresentationHelper implements EditorTextRepresen } @Override - public int textWidth(@NotNull CharSequence text, int start, int end, int fontType, int x) { + public int calcSoftWrapUnawareOffset(int startOffset, int endOffset, int startColumn, int column, int startX) { + return EditorUtil.calcSoftWrapUnawareOffset(myEditor, myEditor.getDocument().getImmutableCharSequence(), startOffset, endOffset, + column, EditorUtil.getTabSize(myEditor), startX, new int[]{startColumn}, null); + } + + @Override + public int textWidth(int start, int end, int fontType, int x) { + CharSequence text = myEditor.getDocument().getImmutableCharSequence(); int startToUse = start; for (int i = end - 1; i >= start; i--) { if (text.charAt(i) == '\n') { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 861287d8558b..cb2d7cbf079b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -3656,11 +3656,14 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi @Override public int logicalPositionToOffset(@NotNull LogicalPosition pos) { - return logicalPositionToOffset(pos, null); + return logicalPositionToOffset(pos, true); } - - public int logicalPositionToOffset(@NotNull LogicalPosition pos, @Nullable StringBuilder debugBuffer) { + @Override + public int logicalPositionToOffset(@NotNull LogicalPosition pos, boolean softWrapAware) { + if (softWrapAware) { + return mySoftWrapModel.logicalPositionToOffset(pos); + } assertReadAccess(); if (myDocument.getLineCount() == 0) return 0; @@ -3675,9 +3678,15 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi if (pos.column == 0) return start; int end = myDocument.getLineEndOffset(pos.line); - CharSequence text = myDocument.getImmutableCharSequence(); + int x = getDocument().getLineNumber(start) == 0 ? getPrefixTextWidthInPixels() : 0; - return EditorUtil.calcOffset(this, text, start, end, pos.column, EditorUtil.getTabSize(this), debugBuffer); + int result = EditorUtil.calcSoftWrapUnawareOffset(this, myDocument.getImmutableCharSequence(), start, end, pos.column, + EditorUtil.getTabSize(this), x, new int[]{0}, null); + if (result >= 0) { + return result; + } + + return end; } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorTextRepresentationHelper.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorTextRepresentationHelper.java index 85f5bd11ed5d..5c66c0bc64f5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorTextRepresentationHelper.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorTextRepresentationHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * 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. @@ -16,7 +16,6 @@ package com.intellij.openapi.editor.impl; import org.intellij.lang.annotations.JdkConstants; -import org.jetbrains.annotations.NotNull; /** * Strategy interface for various utility methods used for representing document text at the editor. @@ -37,13 +36,12 @@ public interface EditorTextRepresentationHelper { * Allows to answer how many visual columns is necessary for representing target fragment of the given text assuming * that it belongs to the single visual line and should be shown at given 'x' offset from the visual line start. * - * @param text target text holder * @param start start offset of the target text sub-sequence (inclusive) * @param end end offset of the target text sub-sequence (exclusive) * @param x 'x' offset from the visual line start * @return number of visual columns necessary for the target text sub-sequence representation */ - int toVisualColumnSymbolsNumber(@NotNull CharSequence text, int start, int end, int x); + int toVisualColumnSymbolsNumber(int start, int end, int x); /** * Allows to retrieve width (in pixels) necessary to represent given region ([start; end)) starting @@ -52,17 +50,16 @@ public interface EditorTextRepresentationHelper { * Note: target region is allows to contain line feeds, the width is calculated as a difference between 'x' * coordinates of the last and first symbols. * - * @param text target text holder * @param start start offset of the target text sub-sequence (inclusive) * @param end end offset of the target text sub-sequence (exclusive) * @param fontType font type used for the given substring representation * @param x 'x' offset from the visual line start * @return width in pixels necessary for the target text sub-sequence representation */ - int textWidth(@NotNull CharSequence text, int start, int end, @JdkConstants.FontStyle int fontType, int x); + int textWidth(int start, int end, @JdkConstants.FontStyle int fontType, int x); /** - * This is specification of {@link #textWidth(CharSequence, int, int, int, int)} in case of the single character + * This is specification of {@link #textWidth(int, int, int, int)} in case of the single character * (in comparison with the situation when we need to calculate width of particular text). *

* Note: it's assumed that given symbols is a regular one (non-tabulation, non-line feed etc). @@ -72,4 +69,16 @@ public interface EditorTextRepresentationHelper { * @return width in pixels necessary for the target char representation */ int charWidth(char c, @JdkConstants.FontStyle int fontType); + + /** + * Translates column number to offset in the given document interval (which is assumed not to contain line breaks or soft wraps). + * + * @param startOffset interval start offset + * @param endOffset interval end offset + * @param startColumn interval start column + * @param column target column + * @param startX interval start visual coordinate + * @return offset, corresponding to the given column, in the range [startOffset; endOffset), or -1 if such offset doesn't exist + */ + int calcSoftWrapUnawareOffset(int startOffset, int endOffset, int startColumn, int column, int startX); } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java index 94aad9480c12..83cc0387866c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java @@ -16,6 +16,7 @@ package com.intellij.openapi.editor.impl; import com.intellij.diagnostic.Dumpable; +import com.intellij.injected.editor.EditorWindow; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; @@ -62,6 +63,7 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi private static final Logger LOG = Logger.getInstance("#" + SoftWrapModelImpl.class.getName()); + private final LogicalPositionToOffsetTask myLogicalToOffsetTask = new LogicalPositionToOffsetTask(); private final OffsetToLogicalTask myOffsetToLogicalTask = new OffsetToLogicalTask(); private final VisualToLogicalTask myVisualToLogicalTask = new VisualToLogicalTask(); private final LogicalToVisualTask myLogicalToVisualTask = new LogicalToVisualTask(); @@ -148,8 +150,7 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi } } }); - EditorSettings settings = myEditor.getSettings(); - myUseSoftWraps = settings.isUseSoftWraps(); + myUseSoftWraps = areSoftWrapsEnabledInEditor(); myFontPreferences = myEditor.getColorsScheme().getFontPreferences(); editor.addPropertyChangeListener(this); @@ -157,13 +158,16 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi myApplianceManager.addListener(myDataMapper); } + private boolean areSoftWrapsEnabledInEditor() { + return !(myEditor instanceof EditorWindow) && myEditor.getSettings().isUseSoftWraps(); + } + /** * Called on editor settings change. Current model is expected to drop all cached information about the settings if any. */ public void reinitSettings() { boolean softWrapsUsedBefore = myUseSoftWraps; - EditorSettings settings = myEditor.getSettings(); - myUseSoftWraps = settings.isUseSoftWraps(); + myUseSoftWraps = areSoftWrapsEnabledInEditor(); int tabWidthBefore = myTabWidth; myTabWidth = EditorUtil.getTabSize(myEditor); @@ -372,6 +376,21 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi } } + @Override + public int logicalPositionToOffset(@NotNull LogicalPosition logicalPosition) { + if (myBulkUpdateInProgress || myUpdateInProgress || !prepareToMapping()) { + return myEditor.logicalPositionToOffset(logicalPosition, false); + } + myActive++; + try { + myLogicalToOffsetTask.input = logicalPosition; + executeSafely(myLogicalToOffsetTask); + return myLogicalToOffsetTask.output; + } finally { + myActive--; + } + } + @NotNull public LogicalPosition adjustLogicalPosition(LogicalPosition defaultLogical, int offset) { if (myBulkUpdateInProgress || myUpdateInProgress || !prepareToMapping()) { @@ -788,6 +807,22 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi } } + private class LogicalPositionToOffsetTask implements SoftWrapAwareTask { + + public LogicalPosition input; + public int output; + + @Override + public void run(boolean softWrapAware) throws IllegalStateException { + output = softWrapAware ? myDataMapper.logicalPositionToOffset(input) : myEditor.logicalPositionToOffset(input, false); + } + + @Override + public String toString() { + return "mapping from logical position (" + input + ") to offset"; + } + } + private class FoldProcessingEndTask implements SoftWrapAwareTask { @Override public void run(boolean softWrapAware) { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/SoftWrapDataMapper.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/SoftWrapDataMapper.java index 874b0c47355c..ae6d115dc270 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/SoftWrapDataMapper.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/SoftWrapDataMapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * 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. @@ -62,4 +62,13 @@ public interface SoftWrapDataMapper { */ VisualPosition logicalToVisualPosition(@NotNull LogicalPosition logical, @NotNull VisualPosition softWrapUnawareVisual) throws IllegalStateException; + + /** + * Maps given logical position to corresponding offset. + * + * @param logical logical position to map + * @return offset that corresponds to the given logical position + * @throws IllegalStateException if it's not possible to perform a mapping + */ + int logicalPositionToOffset(@NotNull LogicalPosition logical) throws IllegalStateException; } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/AbstractMappingStrategy.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/AbstractMappingStrategy.java index bccdf4c59336..7e068caea39e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/AbstractMappingStrategy.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/AbstractMappingStrategy.java @@ -16,9 +16,9 @@ package com.intellij.openapi.editor.impl.softwrap.mapping; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.FoldRegion; import com.intellij.openapi.editor.LogicalPosition; +import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.impl.softwrap.SoftWrapsStorage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,7 +37,7 @@ import java.util.List; */ abstract class AbstractMappingStrategy implements MappingStrategy { - protected final Editor myEditor; + protected final EditorEx myEditor; protected final SoftWrapsStorage myStorage; protected final List myCache; @@ -46,7 +46,7 @@ abstract class AbstractMappingStrategy implements MappingStrategy { private T myEagerMatch; private int myLastEntryOffset; - AbstractMappingStrategy(@NotNull Editor editor, + AbstractMappingStrategy(@NotNull EditorEx editor, @NotNull SoftWrapsStorage storage, @NotNull List cache) { @@ -154,7 +154,11 @@ abstract class AbstractMappingStrategy implements MappingStrategy { if (result != null) { return result; } + advancePositionOnFolding(position, foldRegion); + return null; + } + protected void advancePositionOnFolding(@NotNull EditorPosition position, @NotNull FoldRegion foldRegion) { Document document = myEditor.getDocument(); int endOffsetLogicalLine = document.getLineNumber(foldRegion.getEndOffset()); if (position.logicalLine != endOffsetLogicalLine) { @@ -171,7 +175,6 @@ abstract class AbstractMappingStrategy implements MappingStrategy { } position.advance(foldRegion, collapsedSymbolsWidthInColumns); - return null; } @Nullable diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java index 2f21b0319af2..38b03c706a15 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java @@ -67,6 +67,7 @@ public class CachingSoftWrapDataMapper implements SoftWrapDataMapper, SoftWrapAw private final CacheState myBeforeChangeState = new CacheState(); private final CacheState myAfterChangeState = new CacheState(); + private final LogicalToOffsetCalculationStrategy myLogicalToOffsetStrategy; private final OffsetToLogicalCalculationStrategy myOffsetToLogicalStrategy; private final VisualToLogicalCalculationStrategy myVisualToLogicalStrategy; private final EditorEx myEditor; @@ -79,6 +80,7 @@ public class CachingSoftWrapDataMapper implements SoftWrapDataMapper, SoftWrapAw myStorage = storage; mySearchKey = new CacheEntry(0, editor); + myLogicalToOffsetStrategy = new LogicalToOffsetCalculationStrategy(editor, storage, myCache); myOffsetToLogicalStrategy = new OffsetToLogicalCalculationStrategy(editor, storage, myCache); myVisualToLogicalStrategy = new VisualToLogicalCalculationStrategy(editor, storage, myCache); } @@ -101,6 +103,12 @@ public class CachingSoftWrapDataMapper implements SoftWrapDataMapper, SoftWrapAw return calculate(myOffsetToLogicalStrategy); } + @Override + public int logicalPositionToOffset(@NotNull LogicalPosition logical) throws IllegalStateException { + myLogicalToOffsetStrategy.init(logical); + return calculate(myLogicalToOffsetStrategy); + } + @Override public VisualPosition logicalToVisualPosition(@NotNull LogicalPosition logical, @NotNull VisualPosition softWrapUnawareVisual) throws IllegalStateException @@ -144,7 +152,7 @@ public class CachingSoftWrapDataMapper implements SoftWrapDataMapper, SoftWrapAw // Count soft wrap column offset only if it's located at the same line as the target offset. if (column < 0 && softWrap.getStart() >= targetLogicalLineStartOffset) { column = softWrap.getIndentInColumns() + SoftWrapModelImpl.getEditorTextRepresentationHelper(myEditor).toVisualColumnSymbolsNumber( - myEditor.getDocument().getCharsSequence(), softWrap.getStart(), maxOffset, softWrap.getIndentInPixels() + softWrap.getStart(), maxOffset, softWrap.getIndentInPixels() ); // Count lines introduced by the current soft wrap. We assume that every soft wrap has a single line feed. diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/EditorPosition.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/EditorPosition.java index 1097f2824445..e1547d069686 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/EditorPosition.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/EditorPosition.java @@ -144,10 +144,7 @@ class EditorPosition implements Cloneable { // Single-line fold region. if (collapsedSymbolsWidthInColumns < 0) { collapsedSymbolsWidthInColumns = SoftWrapModelImpl.getEditorTextRepresentationHelper(myEditor) - .toVisualColumnSymbolsNumber(document.getCharsSequence(), - foldRegion.getStartOffset(), - foldRegion.getEndOffset(), - x); + .toVisualColumnSymbolsNumber(foldRegion.getStartOffset(), foldRegion.getEndOffset(), x); } logicalColumn += collapsedSymbolsWidthInColumns; foldingColumnDiff += placeholder.length() - collapsedSymbolsWidthInColumns; @@ -156,10 +153,7 @@ class EditorPosition implements Cloneable { // Multi-line fold region. if (collapsedSymbolsWidthInColumns < 0) { collapsedSymbolsWidthInColumns = SoftWrapModelImpl.getEditorTextRepresentationHelper(myEditor) - .toVisualColumnSymbolsNumber(document.getCharsSequence(), - foldRegion.getStartOffset(), - foldRegion.getEndOffset(), - 0); + .toVisualColumnSymbolsNumber(foldRegion.getStartOffset(), foldRegion.getEndOffset(), 0); } int linesDiff = endOffsetLogicalLine - logicalLine; logicalLine += linesDiff; diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/LogicalToOffsetCalculationStrategy.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/LogicalToOffsetCalculationStrategy.java new file mode 100644 index 000000000000..1fcee26d6f77 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/LogicalToOffsetCalculationStrategy.java @@ -0,0 +1,120 @@ +/* + * 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.openapi.editor.impl.softwrap.mapping; + +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.FoldRegion; +import com.intellij.openapi.editor.LogicalPosition; +import com.intellij.openapi.editor.SoftWrap; +import com.intellij.openapi.editor.ex.EditorEx; +import com.intellij.openapi.editor.impl.SoftWrapModelImpl; +import com.intellij.openapi.editor.impl.softwrap.SoftWrapsStorage; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +class LogicalToOffsetCalculationStrategy extends AbstractMappingStrategy { + + private LogicalPosition targetPosition; + + LogicalToOffsetCalculationStrategy(@NotNull EditorEx editor, @NotNull SoftWrapsStorage storage, @NotNull List cache) { + super(editor, storage, cache); + } + + void init(LogicalPosition logical) { + CacheEntry entry = MappingUtil.getCacheEntryForLogicalPosition(logical, myCache); + if (entry == null) { + if (logical.line >= myEditor.getDocument().getLineCount()) { + setEagerMatch(myEditor.getDocument().getTextLength()); + } + else { + setEagerMatch(Math.min(myEditor.getDocument().getLineStartOffset(logical.line) + logical.column, + myEditor.getDocument().getLineEndOffset(logical.line))); + } + return; + } + if (entry.endLogicalLine == logical.line && entry.endLogicalColumn <= logical.column) { + setEagerMatch(entry.endOffset); + return; + } + reset(); + targetPosition = logical; + setTargetEntry(entry, true); + } + + @Nullable + @Override + protected Integer buildIfExceeds(EditorPosition position, int offset) { + if (position.logicalLine != targetPosition.line) { + return null; + } + int result = position.offset + targetPosition.column - position.logicalColumn; + return result > offset ? null : result; + } + + @Override + public Integer processFoldRegion(@NotNull EditorPosition position, @NotNull FoldRegion foldRegion) { + int startLine = position.logicalLine; + int startColumn = position.logicalColumn; + int startX = position.x; + + advancePositionOnFolding(position, foldRegion); + + if (position.logicalLine < targetPosition.line + || position.logicalLine == targetPosition.line && position.logicalColumn <= targetPosition.column) { + return null; + } + + Document document = myEditor.getDocument(); + int lineEndOffset = document.getLineEndOffset(targetPosition.line); + int result = SoftWrapModelImpl.getEditorTextRepresentationHelper(myEditor) + .calcSoftWrapUnawareOffset(targetPosition.line == startLine ? foldRegion.getStartOffset() + : document.getLineStartOffset(targetPosition.line), + lineEndOffset, + targetPosition.line == startLine ? startColumn : 0, + targetPosition.column, + targetPosition.line == startLine ? startX : 0); + return result < 0 ? lineEndOffset : result; + } + + @Nullable + @Override + protected Integer buildIfExceeds(@NotNull EditorPosition position, @NotNull FoldRegion foldRegion) { + throw new RuntimeException("Unexpected invocation"); + } + + @Nullable + @Override + protected Integer buildIfExceeds(EditorPosition position, TabData tabData) { + if (position.logicalLine != targetPosition.line) { + return null; + } + return position.logicalColumn + tabData.widthInColumns > targetPosition.column ? position.offset : null; + } + + @Nullable + @Override + public Integer processSoftWrap(@NotNull EditorPosition position, SoftWrap softWrap) { + return null; + } + + @NotNull + @Override + public Integer build(@NotNull EditorPosition position) { + return position.offset + targetPosition.column - position.logicalColumn; + } +} diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/LogicalToVisualMappingStrategy.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/LogicalToVisualMappingStrategy.java index 6ed904624fa6..90375ca0a888 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/LogicalToVisualMappingStrategy.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/LogicalToVisualMappingStrategy.java @@ -16,6 +16,7 @@ package com.intellij.openapi.editor.impl.softwrap.mapping; import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.impl.SoftWrapModelImpl; import com.intellij.openapi.editor.impl.softwrap.SoftWrapsStorage; import org.jetbrains.annotations.NotNull; @@ -31,7 +32,7 @@ class LogicalToVisualMappingStrategy extends AbstractMappingStrategy cache) throws IllegalStateException { @@ -122,7 +123,7 @@ class LogicalToVisualMappingStrategy extends AbstractMappingStrategy cache) { + int start = 0; + int end = cache.size() - 1; + + while (start <= end) { + int i = (end + start) >>> 1; + CacheEntry cacheEntry = cache.get(i); + if (cacheEntry.startLogicalLine < position.line + || cacheEntry.startLogicalLine == position.line && cacheEntry.startLogicalColumn < position.column) { + start = i + 1; + continue; + } + if (cacheEntry.startLogicalLine > position.line + || cacheEntry.startLogicalLine == position.line && cacheEntry.startLogicalColumn > position.column) { + end = i - 1; + continue; + } + + return assertEnd(position, cache.get(i)); + } + return end < 0 ? null : assertEnd(position, cache.get(end)); + } + + @Nullable + private static CacheEntry assertEnd(@NotNull LogicalPosition position, @NotNull CacheEntry entry) { + return position.line <= entry.endLogicalLine ? entry : null; + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/OffsetToLogicalCalculationStrategy.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/OffsetToLogicalCalculationStrategy.java index 399406f2db32..a7bf6917c5da 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/OffsetToLogicalCalculationStrategy.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/OffsetToLogicalCalculationStrategy.java @@ -16,6 +16,7 @@ package com.intellij.openapi.editor.impl.softwrap.mapping; import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.impl.SoftWrapModelImpl; import com.intellij.openapi.editor.impl.softwrap.SoftWrapsStorage; import org.jetbrains.annotations.NotNull; @@ -31,7 +32,7 @@ class OffsetToLogicalCalculationStrategy extends AbstractMappingStrategy cache) + OffsetToLogicalCalculationStrategy(@NotNull EditorEx editor, @NotNull SoftWrapsStorage storage, @NotNull List cache) { super(editor, storage, cache); } @@ -157,13 +158,13 @@ class OffsetToLogicalCalculationStrategy extends AbstractMappingStrategy cache) + VisualToLogicalCalculationStrategy(@NotNull EditorEx editor, @NotNull SoftWrapsStorage storage, @NotNull List cache) { super(editor, storage, cache); mySearchKey = new CacheEntry(0, editor); diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/MockEditorTextRepresentationHelper.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/MockEditorTextRepresentationHelper.java index 8d9f4eedb20b..6edd72f54219 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/MockEditorTextRepresentationHelper.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/MockEditorTextRepresentationHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * 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. @@ -16,7 +16,6 @@ package com.intellij.openapi.editor.impl.softwrap; import com.intellij.openapi.editor.impl.EditorTextRepresentationHelper; -import org.jetbrains.annotations.NotNull; /** * @author Denis Zhdanov @@ -24,23 +23,26 @@ import org.jetbrains.annotations.NotNull; */ public class MockEditorTextRepresentationHelper implements EditorTextRepresentationHelper { + private final CharSequence myText; private final int mySpaceSizeInPixels; private final int myTabSizeInColumns; - public MockEditorTextRepresentationHelper(int spaceSizeInPixels, int tabSizeInColumns) { + public MockEditorTextRepresentationHelper(CharSequence text, int spaceSizeInPixels, int tabSizeInColumns) { + myText = text; mySpaceSizeInPixels = spaceSizeInPixels; myTabSizeInColumns = tabSizeInColumns; } public int toVisualColumnSymbolsNumber(char c, int x) { - return toVisualColumnSymbolsNumber(new String(new char[] {c}), 0, 1, x); + return new MockEditorTextRepresentationHelper(new String(new char[] {c}), mySpaceSizeInPixels, myTabSizeInColumns) + .toVisualColumnSymbolsNumber(0, 1, x); } @Override - public int toVisualColumnSymbolsNumber(@NotNull CharSequence text, int start, int end, int x) { + public int toVisualColumnSymbolsNumber(int start, int end, int x) { int result = 0; for (int i = start; i < end; i++) { - char c = text.charAt(i); + char c = myText.charAt(i); if (c == '\n') { result = 0; x = 0; @@ -57,10 +59,10 @@ public class MockEditorTextRepresentationHelper implements EditorTextRepresentat } @Override - public int textWidth(@NotNull CharSequence text, int start, int end, int fontType, int x) { + public int textWidth(int start, int end, int fontType, int x) { int result = 0; for (int i = start; i < end; i++) { - char c = text.charAt(i); + char c = myText.charAt(i); switch (c) { case '\n': result = 0; break; default: result += charWidth(c, result); @@ -79,4 +81,23 @@ public class MockEditorTextRepresentationHelper implements EditorTextRepresentat return mySpaceSizeInPixels; } } + + @Override + public int calcSoftWrapUnawareOffset(int startOffset, int endOffset, int startColumn, int targetColumn, int startX) { + int x = startX; + int column = startColumn; + for (int i = startOffset; i < endOffset; i++) { + if (column == targetColumn) { + return i; + } + char c = myText.charAt(i); + int width = charWidth(c, x); + column += width / mySpaceSizeInPixels; + if (width % mySpaceSizeInPixels > 0) { + column++; + } + x += width; + } + return -1; + } } diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapperTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapperTest.java index 7448c6c867f6..6a0abd6a667c 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapperTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapperTest.java @@ -104,6 +104,7 @@ public class CachingSoftWrapDataMapperTest { private Mockery myMockery; private EditorEx myEditor; private DocumentEx myDocument; + private StringBuilder myChars; private SoftWrapsStorage myStorage; private SoftWrapModelEx mySoftWrapModel; private FoldingModelEx myFoldingModel; @@ -115,6 +116,7 @@ public class CachingSoftWrapDataMapperTest { myEditor = myMockery.mock(EditorEx.class); myDocument = myMockery.mock(DocumentEx.class); + myChars = new StringBuilder(); myStorage = new SoftWrapsStorage(); mySoftWrapModel = myMockery.mock(SoftWrapModelEx.class); myFoldingModel = myMockery.mock(FoldingModelEx.class); @@ -122,7 +124,7 @@ public class CachingSoftWrapDataMapperTest { final Project project = myMockery.mock(Project.class); final SoftWrapPainter painter = myMockery.mock(SoftWrapPainter.class); - myRepresentationHelper = new MockEditorTextRepresentationHelper(SPACE_SIZE, TAB_SIZE); + myRepresentationHelper = new MockEditorTextRepresentationHelper(myChars, SPACE_SIZE, TAB_SIZE); myMockery.checking(new Expectations() {{ // Document @@ -584,19 +586,19 @@ public class CachingSoftWrapDataMapperTest { allowing(myDocument).getCharsSequence(); will(new CustomAction("getCharsSequence()") { @Override public Object invoke(Invocation invocation) throws Throwable { - return context.document; + return myChars; } }); allowing(myDocument).getText(); will(new CustomAction("getCharsSequence()") { @Override public Object invoke(Invocation invocation) throws Throwable { - return context.document.toString(); + return myChars.toString(); } }); allowing(myDocument).getTextLength(); will(new CustomAction("getTextLength()") { @Override public Object invoke(Invocation invocation) throws Throwable { - return context.document.length(); + return myChars.length(); } }); }}); @@ -629,7 +631,7 @@ public class CachingSoftWrapDataMapperTest { context.onNewSymbol(c); } - myLineRanges.add(new TextRange(context.logicalLineStartOffset, context.document.length())); + myLineRanges.add(new TextRange(context.logicalLineStartOffset, myChars.length())); } private static boolean isSoftWrapStart(String document, int index) { @@ -685,7 +687,6 @@ public class CachingSoftWrapDataMapperTest { private class TestEditorPosition extends EditorPosition { private final StringBuilder mySoftWrapBuffer = new StringBuilder(); - final StringBuilder document = new StringBuilder(); EditorPosition lineStartPosition; @@ -741,7 +742,7 @@ public class CachingSoftWrapDataMapperTest { insideFolding = false; MockFoldRegion foldRegion = new MockFoldRegion(foldingStartOffset, offset); myFoldRegions.add(foldRegion); - myMapper.onCollapsedFoldRegion(foldRegion, myRepresentationHelper.toVisualColumnSymbolsNumber(document, foldingStartOffset, offset, prevX), foldingStartVisualLine); + myMapper.onCollapsedFoldRegion(foldRegion, myRepresentationHelper.toVisualColumnSymbolsNumber(foldingStartOffset, offset, prevX), foldingStartVisualLine); } public void onNewSymbol(char c) { @@ -868,7 +869,7 @@ public class CachingSoftWrapDataMapperTest { } private void onNonSoftWrapSymbol(char c) { - document.append(c); + myChars.append(c); if (c == '\n') { myLineRanges.add(new TextRange(logicalLineStartOffset, offset)); From f0408587f578e3ebd3794246de6c2c680609818a Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 28 Oct 2014 14:09:24 +0400 Subject: [PATCH 76/90] IDEA-58130 Improve editor performance during working with large files written in a single line Remove unneeded code: offset to logical line mapping doesn't depend on soft wraps. --- .../openapi/editor/impl/EditorImpl.java | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index cb2d7cbf079b..5179512af245 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -1340,7 +1340,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi if (softWrapAware) { return mySoftWrapModel.offsetToLogicalPosition(offset); } - int line = offsetToLogicalLine(offset, false); + int line = offsetToLogicalLine(offset); int column = calcColumnNumber(offset, line, false, myDocument.getImmutableCharSequence()); return new LogicalPosition(line, column); } @@ -3881,7 +3881,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi FoldRegion lastCollapsedBefore = getLastCollapsedBeforePosition(visiblePos); if (lastCollapsedBefore != null) { - int logFoldEndLine = offsetToLogicalLine(lastCollapsedBefore.getEndOffset(), false); + int logFoldEndLine = offsetToLogicalLine(lastCollapsedBefore.getEndOffset()); int visFoldEndLine = logicalToVisualLine(logFoldEndLine); line = logFoldEndLine + visiblePos.line - visFoldEndLine; @@ -3903,10 +3903,6 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } int offsetToLogicalLine(int offset) { - return offsetToLogicalLine(offset, true); - } - - private int offsetToLogicalLine(int offset, boolean softWrapAware) { int textLength = myDocument.getTextLength(); if (textLength == 0) return 0; @@ -3917,13 +3913,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi int lineIndex = myDocument.getLineNumber(offset); LOG.assertTrue(lineIndex >= 0 && lineIndex < myDocument.getLineCount()); - if (softWrapAware && getSoftWrapModel().isSoftWrappingEnabled()) { - int column = calcColumnNumber(offset, lineIndex, false, myDocument.getImmutableCharSequence()); - return mySoftWrapModel.adjustLogicalPosition(new LogicalPosition(lineIndex, column), offset).line; - } - else { - return lineIndex; - } + return lineIndex; } @Override @@ -3939,7 +3929,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi int column = EditorUtil.calcColumnNumber(this, documentCharSequence, lineStartOffset, offset); if (softWrapAware) { - int line = offsetToLogicalLine(offset, false); + int line = offsetToLogicalLine(offset); return mySoftWrapModel.adjustLogicalPosition(new LogicalPosition(line, column), offset).column; } else { From a169953a591e509b6424ecfe6e6822f09dc54736 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 28 Oct 2014 16:38:02 +0400 Subject: [PATCH 77/90] IDEA-131953 Multiple carets misbehave when auto completion dropdown opens --- .../completion/JavaAutoPopupTest.groovy | 41 +++++++++++++++++++ .../lookup/impl/LookupActionHandler.java | 18 ++++++-- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy index 41e2b5bd71fc..5748716cb2e7 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -650,6 +650,47 @@ public interface Test { assert !lookup } + public void testMulticaretLeftRightMovements() { + myFixture.configureByText("a.java", """ + class Foo { + void foo(String iterable) { + ter x + ter x + } + } + """) + type('i') + assert lookup + + edt { myFixture.performEditorAction(IdeActions.ACTION_EDITOR_MOVE_CARET_RIGHT) } + myFixture.checkResult """ + class Foo { + void foo(String iterable) { + iter x + iter x + } + } + """ + joinAutopopup() + joinCompletion() + assert lookup + assert !lookup.calculating + + edt { myFixture.performEditorAction(IdeActions.ACTION_EDITOR_MOVE_CARET_LEFT) } + myFixture.checkResult """ + class Foo { + void foo(String iterable) { + iter x + iter x + } + } + """ + joinAutopopup() + joinCompletion() + assert lookup + assert !lookup.calculating + } + public void testTypingInAnotherEditor() { myFixture.configureByText("a.java", "") type 'c' diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupActionHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupActionHandler.java index 80a0d05cb913..1ea0f9862af3 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupActionHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupActionHandler.java @@ -26,6 +26,7 @@ import com.intellij.featureStatistics.FeatureUsageTracker; import com.intellij.ide.ui.UISettings; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.editor.Caret; +import com.intellij.openapi.editor.CaretAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.actionSystem.EditorActionHandler; import com.intellij.openapi.project.DumbAwareAction; @@ -211,7 +212,7 @@ public abstract class LookupActionHandler extends EditorActionHandler { } @Override - protected void executeInLookup(LookupImpl lookup, DataContext context, Caret caret) { + protected void executeInLookup(LookupImpl lookup, DataContext context, final Caret caret) { final Editor editor = lookup.getEditor(); final int offset = editor.getCaretModel().getOffset(); CharSequence seq = editor.getDocument().getCharsSequence(); @@ -231,8 +232,19 @@ public abstract class LookupActionHandler extends EditorActionHandler { if (!lookup.performGuardedChange(new Runnable() { @Override public void run() { - editor.getSelectionModel().removeSelection(); - editor.getCaretModel().moveToOffset(offset + 1); + CaretAction action = new CaretAction() { + @Override + public void perform(Caret caret) { + caret.removeSelection(); + caret.moveToOffset(caret.getOffset() + 1); + } + }; + if (caret == null) { + editor.getCaretModel().runForEachCaret(action); + } + else { + action.perform(caret); + } } })) { return; From 5a19f43b4845f15521e88eefa9b962f76fc0e9ae Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 28 Oct 2014 18:29:52 +0400 Subject: [PATCH 78/90] IDEA-100878 Emacs Tab behaves strange when indenting with tabs --- .../editorActions/EmacsStyleIndentAction.java | 12 +++--------- .../intellij/openapi/actionSystem/IdeActions.java | 1 + 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EmacsStyleIndentAction.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EmacsStyleIndentAction.java index 5709982ca892..83b85b1d842e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EmacsStyleIndentAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EmacsStyleIndentAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * 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. @@ -25,7 +25,6 @@ import com.intellij.lang.LanguageFormatting; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.ScrollType; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.DumbAware; @@ -76,17 +75,12 @@ public class EmacsStyleIndentAction extends BaseCodeInsightAction implements Dum final Document document = editor.getDocument(); final int startOffset = editor.getCaretModel().getOffset(); final int line = editor.offsetToLogicalPosition(startOffset).line; - final int col = editor.getCaretModel().getLogicalPosition().column; final int lineStart = document.getLineStartOffset(line); - final int initLineEnd = document.getLineEndOffset(line); try{ final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(project); final int newPos = codeStyleManager.adjustLineIndent(file, lineStart); - final int newCol = newPos - lineStart; - final int lineInc = document.getLineEndOffset(line) - initLineEnd; - if (newCol >= col + lineInc && newCol >= 0) { - final LogicalPosition pos = new LogicalPosition(line, newCol); - editor.getCaretModel().moveToLogicalPosition(pos); + if (editor.getCaretModel().getOffset() < newPos) { + editor.getCaretModel().moveToOffset(newPos); editor.getSelectionModel().removeSelection(); editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); } diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java index 9d7a307615dc..a5e9f1da7fc1 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java @@ -49,6 +49,7 @@ public interface IdeActions { @NonNls String ACTION_EDITOR_NEXT_WORD_WITH_SELECTION = "EditorNextWordWithSelection"; @NonNls String ACTION_EDITOR_PREVIOUS_WORD_WITH_SELECTION = "EditorPreviousWordWithSelection"; @NonNls String ACTION_EDITOR_TAB = "EditorTab"; + @NonNls String ACTION_EDITOR_EMACS_TAB = "EmacsStyleIndent"; @NonNls String ACTION_EDITOR_ESCAPE = "EditorEscape"; @NonNls String ACTION_EDITOR_JOIN_LINES = "EditorJoinLines"; @NonNls String ACTION_EDITOR_COMPLETE_STATEMENT = "EditorCompleteStatement"; From a6988633d1add0affe6c1bbb4d15a3278b418db5 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 29 Oct 2014 09:33:26 +0100 Subject: [PATCH 79/90] no need to blur tab text --- .../src/com/intellij/ui/tabs/impl/TabLabel.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/tabs/impl/TabLabel.java b/platform/platform-api/src/com/intellij/ui/tabs/impl/TabLabel.java index 7e0054db4f66..34728f1093b8 100644 --- a/platform/platform-api/src/com/intellij/ui/tabs/impl/TabLabel.java +++ b/platform/platform-api/src/com/intellij/ui/tabs/impl/TabLabel.java @@ -242,9 +242,9 @@ public class TabLabel extends JPanel { }); final Composite oldComposite = ((Graphics2D)g).getComposite(); - if (myTabs instanceof JBEditorTabs && !myTabs.isSingleRow() && myTabs.getSelectedInfo() != myInfo) { - ((Graphics2D)g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.9f)); - } + //if (myTabs instanceof JBEditorTabs && !myTabs.isSingleRow() && myTabs.getSelectedInfo() != myInfo) { + // ((Graphics2D)g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.9f)); + //} super.paint(g); ((Graphics2D)g).setComposite(oldComposite); From 55378924b4a9350bf714270840ad33125e74e6b8 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 29 Oct 2014 11:34:16 +0300 Subject: [PATCH 80/90] IDEA-125016 Commenting out a line in an XML file with commented out comments lower in the file can cause unwanted changes (and invalid xml). REGRESSION --- .../codeInsight/generation/CommentByLineCommentHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java index c6c281dc4114..47fc9e204c27 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java @@ -486,7 +486,7 @@ public class CommentByLineCommentHandler extends MultiCaretCodeInsightActionHand } if (endOffset >= suffix.length() && CharArrayUtil.regionMatches(document.getCharsSequence(), endOffset - suffix.length(), suffix)) { document.deleteString(endOffset - suffix.length(), endOffset); - endOffset = document.getTextLength(); + endOffset -= suffix.length(); } if (commentedPrefix != null && commentedSuffix != null) { CommentByBlockCommentHandler.commentNestedComments(document, new TextRange(startOffset, endOffset), commenter); From c280b5094ed1f9ee4b0801e61d5cb796bb5a5399 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Wed, 29 Oct 2014 09:39:16 +0100 Subject: [PATCH 81/90] Testing framework now allows checking only specified warnings and highlightings --- .../ExpectedHighlightingData.java | 14 +++++++++++++- .../fixtures/CodeInsightTestFixture.java | 2 ++ .../impl/CodeInsightTestFixtureImpl.java | 19 ++++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/platform/testFramework/src/com/intellij/testFramework/ExpectedHighlightingData.java b/platform/testFramework/src/com/intellij/testFramework/ExpectedHighlightingData.java index 9022104f6953..897f38ae2c3d 100644 --- a/platform/testFramework/src/com/intellij/testFramework/ExpectedHighlightingData.java +++ b/platform/testFramework/src/com/intellij/testFramework/ExpectedHighlightingData.java @@ -74,6 +74,8 @@ public class ExpectedHighlightingData { private final PsiFile myFile; @NonNls private static final String ANY_TEXT = "*"; private final String myText; + + private boolean myIgnoreExtraHighlighting; public static class ExpectedHighlightingSet { private final HighlightSeverity severity; @@ -149,7 +151,17 @@ public class ExpectedHighlightingData { final boolean checkWeakWarnings, final boolean checkInfos, @Nullable final PsiFile file) { + this(document, checkWarnings, checkWeakWarnings, checkInfos, false, file); + } + + public ExpectedHighlightingData(@NotNull final Document document, + final boolean checkWarnings, + final boolean checkWeakWarnings, + final boolean checkInfos, + final boolean ignoreExtraHighlighting, + @Nullable final PsiFile file) { this(document, file); + myIgnoreExtraHighlighting = ignoreExtraHighlighting; if (checkWarnings) checkWarnings(); if (checkWeakWarnings) checkWeakWarnings(); if (checkInfos) checkInfos(); @@ -423,7 +435,7 @@ public class ExpectedHighlightingData { String failMessage = ""; for (HighlightInfo info : reverseCollection(infos)) { - if (!expectedInfosContainsInfo(info)) { + if (!expectedInfosContainsInfo(info) && !myIgnoreExtraHighlighting) { final int startOffset = info.startOffset; final int endOffset = info.endOffset; String s = text.substring(startOffset, endOffset); diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java index 4d6314ecfff4..e4be651d0c18 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java @@ -273,6 +273,8 @@ public interface CodeInsightTestFixture extends IdeaProjectTestFixture { * @return duration */ long checkHighlighting(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings); + + long checkHighlighting(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings, boolean ignoreExtraHighlighting); long checkHighlighting(); diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 0c2da8b647a4..a433ccadd30a 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -404,6 +404,16 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig } } + @Override + public long checkHighlighting(final boolean checkWarnings, final boolean checkInfos, final boolean checkWeakWarnings, boolean ignoreExtraHighlighting) { + try { + return collectAndCheckHighlighting(checkWarnings, checkInfos, checkWeakWarnings); + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + @Override public long checkHighlighting() { return checkHighlighting(true, false, true); @@ -1485,7 +1495,14 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig } private long collectAndCheckHighlighting(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings) throws Exception { - ExpectedHighlightingData data = new ExpectedHighlightingData(myEditor.getDocument(), checkWarnings, checkWeakWarnings, checkInfos, getHostFile()); + return collectAndCheckHighlighting(checkWarnings, checkInfos, checkWeakWarnings, false); + } + + private long collectAndCheckHighlighting(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings, + boolean ignoreExtraHighlighting) throws Exception { + ExpectedHighlightingData data = new ExpectedHighlightingData(myEditor.getDocument(), + checkWarnings, checkWeakWarnings, ignoreExtraHighlighting, + checkInfos, getHostFile()); data.init(); return collectAndCheckHighlighting(data); } From f6e015c11e6b8ed58cb7893966080e98ada42729 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 29 Oct 2014 11:46:06 +0400 Subject: [PATCH 82/90] ignore inferred @NotNull when there's external @Nullable --- .../intellij/codeInsight/InferredAnnotationsManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java index 56f6cad1493f..ed34299f4c35 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/InferredAnnotationsManagerImpl.java @@ -76,7 +76,7 @@ public class InferredAnnotationsManagerImpl extends InferredAnnotationsManager { return true; } if (AnnotationUtil.NOT_NULL.equals(annotationFQN) && owner instanceof PsiParameter && owner.getParent() != null) { - if (AnnotationUtil.isAnnotated(owner, NullableNotNullManager.getInstance(owner.getProject()).getNullables())) { + if (AnnotationUtil.isAnnotated(owner, NullableNotNullManager.getInstance(owner.getProject()).getNullables(), false, false)) { return true; } if (hasHardcodedContracts(owner.getParent().getParent())) { From 49e89d6c253cadc80154161bd4cae2a7906b77c8 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 29 Oct 2014 12:17:24 +0300 Subject: [PATCH 83/90] remember corresponding XDebugProcess in DebugProcessImpl - fixed tests --- .../com/intellij/debugger/engine/JavaDebugProcess.java | 8 +++++++- .../com/intellij/debugger/impl/GenericDebuggerRunner.java | 4 +--- .../com/intellij/debugger/ui/DebuggerPanelsManager.java | 7 +++++-- .../src/com/intellij/debugger/DebuggerTestCase.java | 4 ++-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebugProcess.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebugProcess.java index 9ccfb1664c64..50500c3864a7 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebugProcess.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebugProcess.java @@ -72,7 +72,13 @@ public class JavaDebugProcess extends XDebugProcess { private final XBreakpointHandler[] myBreakpointHandlers; private final NodeManagerImpl myNodeManager; - public JavaDebugProcess(@NotNull final XDebugSession session, final DebuggerSession javaSession) { + public static JavaDebugProcess create(@NotNull final XDebugSession session, final DebuggerSession javaSession) { + JavaDebugProcess res = new JavaDebugProcess(session, javaSession); + javaSession.getProcess().setXDebugProcess(res); + return res; + } + + private JavaDebugProcess(@NotNull final XDebugSession session, final DebuggerSession javaSession) { super(session); myJavaSession = javaSession; myEditorsProvider = new JavaDebuggerEditorsProvider(); diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java index db350c2b3d70..06408ce2a27a 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java @@ -122,9 +122,7 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner Date: Wed, 29 Oct 2014 12:18:05 +0300 Subject: [PATCH 84/90] When "display icons in menu items" == false then no checks shown in inspections filter fixed. Part of IDEA-130323 --- .../actionSystem/impl/ActionMenuItem.java | 104 +++++++++--------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java index 1c6fa05e4fb5..e9eb88fec11d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java @@ -56,11 +56,11 @@ public class ActionMenuItem extends JCheckBoxMenuItem { private final Presentation myPresentation; private final String myPlace; private final boolean myInsideCheckedGroup; + private final boolean myEnableMnemonics; + private final boolean myToggleable; private DataContext myContext; private AnActionEvent myEvent; private MenuItemSynchronizer myMenuItemSynchronizer; - private final boolean myEnableMnemonics; - private final boolean myToggleable; private boolean myToggled; public ActionMenuItem(final AnAction action, @@ -92,6 +92,10 @@ public class ActionMenuItem extends JCheckBoxMenuItem { } } + private static boolean isEnterKeyStroke(KeyStroke keyStroke) { + return keyStroke.getKeyCode() == KeyEvent.VK_ENTER && keyStroke.getModifiers() == 0; + } + public void prepare() { init(); installSynchronizer(); @@ -170,10 +174,6 @@ public class ActionMenuItem extends JCheckBoxMenuItem { } } - private static boolean isEnterKeyStroke(KeyStroke keyStroke) { - return keyStroke.getKeyCode() == KeyEvent.VK_ENTER && keyStroke.getModifiers() == 0; - } - @Override public void updateUI() { if (UIUtil.isStandardMenuLAF()) { @@ -208,6 +208,52 @@ public class ActionMenuItem extends JCheckBoxMenuItem { myEvent = new AnActionEvent(null, context, myPlace, myPresentation, ActionManager.getInstance(), 0); } + private void updateIcon(AnAction action) { + if (isToggleable() && (myPresentation.getIcon() == null || myInsideCheckedGroup || !UISettings.getInstance().SHOW_ICONS_IN_MENUS)) { + action.update(myEvent); + myToggled = Boolean.TRUE.equals(myEvent.getPresentation().getClientProperty(Toggleable.SELECTED_PROPERTY)); + if (ActionPlaces.MAIN_MENU.equals(myPlace) && SystemInfo.isMacSystemMenu || + UIUtil.isUnderNimbusLookAndFeel() || + UIUtil.isUnderWindowsLookAndFeel() && SystemInfo.isWin7OrNewer) { + setState(myToggled); + } + else if (!(getUI() instanceof GtkMenuItemUI)) { + if (myToggled) { + setIcon(ourCheckedIcon); + setDisabledIcon(IconLoader.getDisabledIcon(ourCheckedIcon)); + } + else { + setIcon(ourUncheckedIcon); + setDisabledIcon(IconLoader.getDisabledIcon(ourUncheckedIcon)); + } + } + } + else { + if (UISettings.getInstance().SHOW_ICONS_IN_MENUS) { + Icon icon = myPresentation.getIcon(); + if (action instanceof ToggleAction && ((ToggleAction)action).isSelected(myEvent)) { + icon = new PoppedIcon(icon, 16, 16); + } + setIcon(icon); + if (myPresentation.getDisabledIcon() != null) { + setDisabledIcon(myPresentation.getDisabledIcon()); + } + else { + setDisabledIcon(IconLoader.getDisabledIcon(icon)); + } + } + } + } + + public boolean isToggleable() { + return myToggleable; + } + + @Override + public boolean isSelected() { + return myToggled; + } + private final class ActionTransmitter implements ActionListener { /** * @param component component @@ -274,52 +320,6 @@ public class ActionMenuItem extends JCheckBoxMenuItem { } } - private void updateIcon(AnAction action) { - if (isToggleable() && (myPresentation.getIcon() == null || myInsideCheckedGroup)) { - action.update(myEvent); - myToggled = Boolean.TRUE.equals(myEvent.getPresentation().getClientProperty(Toggleable.SELECTED_PROPERTY)); - if (ActionPlaces.MAIN_MENU.equals(myPlace) && SystemInfo.isMacSystemMenu || - UIUtil.isUnderNimbusLookAndFeel() || - UIUtil.isUnderWindowsLookAndFeel() && SystemInfo.isWin7OrNewer) { - setState(myToggled); - } - else if (!(getUI() instanceof GtkMenuItemUI)) { - if (myToggled) { - setIcon(ourCheckedIcon); - setDisabledIcon(IconLoader.getDisabledIcon(ourCheckedIcon)); - } - else { - setIcon(ourUncheckedIcon); - setDisabledIcon(IconLoader.getDisabledIcon(ourUncheckedIcon)); - } - } - } - else { - if (UISettings.getInstance().SHOW_ICONS_IN_MENUS) { - Icon icon = myPresentation.getIcon(); - if (action instanceof ToggleAction && ((ToggleAction)action).isSelected(myEvent)) { - icon = new PoppedIcon(icon, 16, 16); - } - setIcon(icon); - if (myPresentation.getDisabledIcon() != null) { - setDisabledIcon(myPresentation.getDisabledIcon()); - } - else { - setDisabledIcon(IconLoader.getDisabledIcon(icon)); - } - } - } - } - - public boolean isToggleable() { - return myToggleable; - } - - @Override - public boolean isSelected() { - return myToggled; - } - private final class MenuItemSynchronizer implements PropertyChangeListener, Disposable { @NonNls private static final String SELECTED = "selected"; From debacd05174079d7b0d9724fad063bb7571f77a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Wed, 29 Oct 2014 10:22:51 +0100 Subject: [PATCH 85/90] typo in javadoc --- .../src/com/intellij/psi/codeStyle/DisplayPriority.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPriority.java b/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPriority.java index feaff97d018b..b88105bec5f4 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPriority.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPriority.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * 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. @@ -34,7 +34,7 @@ public enum DisplayPriority { */ CODE_SETTINGS, /** - * Key IDE language priority (depends on product), for exmaple, Java for IDEA, PHP for PhpStorm etc. + * Key IDE language priority (depends on product), for example, Java for IntelliJ IDEA, PHP for PhpStorm etc. */ KEY_LANGUAGE_SETTINGS, /** From 9c94ace79f0166277c359d12cf906f3f7351de66 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Wed, 29 Oct 2014 13:48:42 +0400 Subject: [PATCH 86/90] IDEA-131761 Quick documentation incorrectly renders value of byte[] constant --- .../javadoc/JavaDocInfoGenerator.java | 2 +- .../methodExpressionWithLiteral.html | 1 + .../methodExpressionWithLiteral.java | 3 +++ .../javadoc/JavaDocInfoGeneratorTest.java | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/javadocIG/methodExpressionWithLiteral.html create mode 100644 java/java-tests/testData/codeInsight/javadocIG/methodExpressionWithLiteral.java diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java index c0742de3c7f6..975af4a8dd67 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java @@ -2053,7 +2053,7 @@ public class JavaDocInfoGenerator { @Override public void visitMethodCallExpression(PsiMethodCallExpression expression) { - myBuffer.append(expression.getMethodExpression().getText()).append("("); + myBuffer.append(StringUtil.escapeXml(expression.getMethodExpression().getText())).append("("); expression.getArgumentList().accept(this); myBuffer.append(")"); } diff --git a/java/java-tests/testData/codeInsight/javadocIG/methodExpressionWithLiteral.html b/java/java-tests/testData/codeInsight/javadocIG/methodExpressionWithLiteral.html new file mode 100644 index 000000000000..5d73a26bc75f --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/methodExpressionWithLiteral.html @@ -0,0 +1 @@ + A

public byte[] bytes = "&amp;".getBytes()
\ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/javadocIG/methodExpressionWithLiteral.java b/java/java-tests/testData/codeInsight/javadocIG/methodExpressionWithLiteral.java new file mode 100644 index 000000000000..3d13bcd7296a --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/methodExpressionWithLiteral.java @@ -0,0 +1,3 @@ +class A { + public byte[] bytes = "&".getBytes(); +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java index 871c758d08fd..bda17baaa0ce 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java @@ -1,3 +1,18 @@ +/* + * 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.codeInsight.javadoc; import com.intellij.JavaTestUtil; @@ -72,6 +87,10 @@ public class JavaDocInfoGeneratorTest extends CodeInsightTestCase { doTestField(); } + public void testMethodExpressionWithLiteral() throws Exception { + doTestField(); + } + public void testInitializerWithReference() throws Exception { doTestField(); } From 5a324adb6f05345b5b4a322b9338cc8fdf7dfd9a Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 28 Oct 2014 14:54:38 +0300 Subject: [PATCH 87/90] EA-62151 Add diagnostic messages to log --- .../JsonStandardComplianceInspection.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/json/src/com/intellij/json/codeinsight/JsonStandardComplianceInspection.java b/json/src/com/intellij/json/codeinsight/JsonStandardComplianceInspection.java index 0124c48fa7fe..8c17715d696c 100644 --- a/json/src/com/intellij/json/codeinsight/JsonStandardComplianceInspection.java +++ b/json/src/com/intellij/json/codeinsight/JsonStandardComplianceInspection.java @@ -6,6 +6,7 @@ import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel; import com.intellij.json.JsonBundle; import com.intellij.json.JsonElementTypes; import com.intellij.json.psi.*; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiComment; @@ -22,15 +23,17 @@ import javax.swing.*; /** * Compliance checks include *
    - *
  • Usage of line and block commentaries
  • - *
  • Usage of single quoted strings
  • - *
  • Usage of identifiers (unqouted words)
  • - *
  • Not double quoted string literal is used as property key
  • + *
  • Usage of line and block commentaries
  • + *
  • Usage of single quoted strings
  • + *
  • Usage of identifiers (unqouted words)
  • + *
  • Not double quoted string literal is used as property key
  • *
* * @author Mikhail Golubev */ public class JsonStandardComplianceInspection extends LocalInspectionTool { + private static final Logger LOG = Logger.getInstance(JsonStandardComplianceInspection.class); + public boolean myWarnAboutComments = true; @NotNull @@ -58,8 +61,10 @@ public class JsonStandardComplianceInspection extends LocalInspectionTool { @Override public void visitStringLiteral(@NotNull JsonStringLiteral stringLiteral) { if (stringLiteral.getText().startsWith("'")) { - holder.registerProblem(stringLiteral, JsonBundle.message("msg.compliance.problem.single.quoted.strings"), new AddDoubleQuotesFix()); + holder + .registerProblem(stringLiteral, JsonBundle.message("msg.compliance.problem.single.quoted.strings"), new AddDoubleQuotesFix()); } + // May be illegal property key as well super.visitStringLiteral(stringLiteral); } @@ -76,6 +81,8 @@ public class JsonStandardComplianceInspection extends LocalInspectionTool { @Override public void visitReferenceExpression(@NotNull JsonReferenceExpression reference) { holder.registerProblem(reference, JsonBundle.message("msg.compliance.problem.identifier"), new AddDoubleQuotesFix()); + // May be illegal property key as well + super.visitReferenceExpression(reference); } @Override @@ -133,9 +140,13 @@ public class JsonStandardComplianceInspection extends LocalInspectionTool { @Override public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { final PsiElement element = descriptor.getPsiElement(); - assert element instanceof JsonLiteral || element instanceof JsonReferenceExpression; - final String content = StringUtil.stripQuotesAroundValue(element.getText()); - element.replace(new JsonElementGenerator(project).createStringLiteral(content)); + if (element instanceof JsonLiteral || element instanceof JsonReferenceExpression) { + final String content = StringUtil.stripQuotesAroundValue(element.getText()); + element.replace(new JsonElementGenerator(project).createStringLiteral(content)); + } + else if (element != null) { + LOG.error("Quick fix was applied to unexpected element", element.getText(), element.getParent().getText()); + } } } } From 60b897dc73a1f9192a364a154206ccffc4bc6cc5 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 28 Oct 2014 15:20:31 +0300 Subject: [PATCH 88/90] EA-62012 Commit document before reformatting it --- .../inline/PyInlineLocalHandler.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/python/src/com/jetbrains/python/refactoring/inline/PyInlineLocalHandler.java b/python/src/com/jetbrains/python/refactoring/inline/PyInlineLocalHandler.java index ed8380da4a6e..1bbd98c500aa 100644 --- a/python/src/com/jetbrains/python/refactoring/inline/PyInlineLocalHandler.java +++ b/python/src/com/jetbrains/python/refactoring/inline/PyInlineLocalHandler.java @@ -31,10 +31,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.wm.WindowManager; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiReference; -import com.intellij.psi.PsiWhiteSpace; +import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; @@ -101,7 +98,10 @@ public class PyInlineLocalHandler extends InlineActionHandler { invoke(project, editor, (PyTargetExpression)element, refExpr); } - public static void invoke(final Project project, final Editor editor, final PyTargetExpression local, PyReferenceExpression refExpr) { + private static void invoke(@NotNull final Project project, + @NotNull final Editor editor, + @NotNull final PyTargetExpression local, + @Nullable PyReferenceExpression refExpr) { if (!CommonRefactoringUtil.checkReadOnlyStatus(project, local)) return; final HighlightManager highlightManager = HighlightManager.getInstance(project); @@ -136,7 +136,7 @@ public class PyInlineLocalHandler extends InlineActionHandler { } final TextAttributes attributes = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES); - if (editor != null && !ApplicationManager.getApplication().isUnitTestMode()) { + if (!ApplicationManager.getApplication().isUnitTestMode()) { highlightManager.addOccurrenceHighlights(editor, refsToInline, attributes, true, null); final int occurrencesCount = refsToInline.length; final String occurrencesString = RefactoringBundle.message("occurrences.string", occurrencesCount); @@ -171,13 +171,11 @@ public class PyInlineLocalHandler extends InlineActionHandler { isSameDefinition &= isSameDefinition(def, otherDef); } if (!isSameDefinition) { - if (editor != null) { - highlightManager.addOccurrenceHighlights(editor, defs, writeAttributes, true, null); - highlightManager.addOccurrenceHighlights(editor, new PsiElement[]{ref}, attributes, true, null); - final String message = RefactoringBundle.getCannotRefactorMessage( - RefactoringBundle.message("variable.is.accessed.for.writing.and.used.with.inlined", localName)); - CommonRefactoringUtil.showErrorHint(project, editor, message, REFACTORING_NAME, HELP_ID); - } + highlightManager.addOccurrenceHighlights(editor, defs, writeAttributes, true, null); + highlightManager.addOccurrenceHighlights(editor, new PsiElement[]{ref}, attributes, true, null); + final String message = RefactoringBundle.getCannotRefactorMessage( + RefactoringBundle.message("variable.is.accessed.for.writing.and.used.with.inlined", localName)); + CommonRefactoringUtil.showErrorHint(project, editor, message, REFACTORING_NAME, HELP_ID); WindowManager.getInstance().getStatusBar(project).setInfo(RefactoringBundle.message("press.escape.to.remove.the.highlighting")); return; } @@ -218,9 +216,10 @@ public class PyInlineLocalHandler extends InlineActionHandler { return parentalStatement != null ? parentalStatement.getTextRange() : null; } }); + PsiDocumentManager.getInstance(project).commitDocument(editor.getDocument()); CodeStyleManager.getInstance(project).reformatText(workingFile, ranges); - if (editor != null && !ApplicationManager.getApplication().isUnitTestMode()) { + if (!ApplicationManager.getApplication().isUnitTestMode()) { highlightManager.addOccurrenceHighlights(editor, exprs, attributes, true, null); WindowManager.getInstance().getStatusBar(project) .setInfo(RefactoringBundle.message("press.escape.to.remove.the.highlighting")); From 3d1e308a4737839767e9cdb71e14f39087a21c07 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 28 Oct 2014 16:40:19 +0300 Subject: [PATCH 89/90] EA-59724 and IDEA-68249 Report about not configured Bugzilla installation --- .../com/intellij/tasks/TaskBundle.properties | 4 ++++ .../tasks/bugzilla/BugzillaRepository.java | 23 +++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/TaskBundle.properties b/plugins/tasks/tasks-core/src/com/intellij/tasks/TaskBundle.properties index 11d842bf0d91..0154b2989ff0 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/TaskBundle.properties +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/TaskBundle.properties @@ -19,3 +19,7 @@ jira.failure.captcha=Login failed. Enter captcha in web-interface. ## YouTrack youtrack.default.query=for: me sort by: updated #Unresolved +## Bugzilla +bugzilla.failure.malformed.response=Cannot decode server response. Check that XMLRPC plugin is enabled. +bugzilla.failure.no.version=Cannot find Bugzilla version. Check that URL ends with "xmlrpc.cgi". + diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/bugzilla/BugzillaRepository.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/bugzilla/BugzillaRepository.java index f583be334cfc..af3df55b5397 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/bugzilla/BugzillaRepository.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/bugzilla/BugzillaRepository.java @@ -6,10 +6,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Version; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.tasks.LocalTask; -import com.intellij.tasks.Task; -import com.intellij.tasks.TaskRepositoryType; -import com.intellij.tasks.TaskState; +import com.intellij.tasks.*; import com.intellij.tasks.impl.BaseRepository; import com.intellij.tasks.impl.BaseRepositoryImpl; import com.intellij.tasks.impl.RequestFailedException; @@ -17,10 +14,7 @@ import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import com.intellij.util.xmlb.annotations.Tag; -import org.apache.xmlrpc.CommonsXmlRpcTransport; -import org.apache.xmlrpc.XmlRpcClient; -import org.apache.xmlrpc.XmlRpcException; -import org.apache.xmlrpc.XmlRpcRequest; +import org.apache.xmlrpc.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -137,6 +131,9 @@ public class BugzillaRepository extends BaseRepositoryImpl { private void ensureVersionDiscovered() throws Exception { if (myVersion == null) { Hashtable result = new BugzillaXmlRpcRequest("Bugzilla.version").execute(); + if (result == null) { + throw new RequestFailedException(TaskBundle.message("bugzilla.failure.no.version")); + } String version = (String)result.get("version"); String[] parts = version.split("\\.", 3); myVersion = new Version(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2])); @@ -345,7 +342,15 @@ public class BugzillaRepository extends BaseRepositoryImpl { } Vector> parameters = new Vector>(); parameters.add(new Hashtable(myParameters)); - return (T)new XmlRpcClient(getUrl()).execute(new XmlRpcRequest(myMethodName, parameters), myTransport); + try { + return (T)new XmlRpcClient(getUrl()).execute(new XmlRpcRequest(myMethodName, parameters), myTransport); + } + catch (XmlRpcClientException e) { + if (e.getMessage().contains("Error decoding XML-RPC response")) { + throw new RequestFailedException(TaskBundle.message("bugzilla.failure.malformed.response"), e); + } + throw e; + } } } From 71fdaee67916f6a744b485aeaaf8d5c407732f10 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 28 Oct 2014 20:45:22 +0300 Subject: [PATCH 90/90] Include type inference for tuple multiplication in PyStdlibTypeProvider Removed related logic from overly convoluted PyStringFormatInspection. --- .../stdlib/PyStdlibTypeProvider.java | 35 ++++++++++++++++++- .../inspections/PyStringFormatInspection.java | 32 +++++------------ .../PyStringFormatInspection1/test.py | 5 ++- .../com/jetbrains/python/PyTypeTest.java | 5 +++ 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibTypeProvider.java b/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibTypeProvider.java index 8dacfd3ec597..e333e864cfa2 100644 --- a/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibTypeProvider.java +++ b/python/src/com/jetbrains/python/codeInsight/stdlib/PyStdlibTypeProvider.java @@ -135,7 +135,40 @@ public class PyStdlibTypeProvider extends PyTypeProviderBase { } } else if ("__builtin__.tuple.__add__".equals(qname) && callSite instanceof PyBinaryExpression) { - return getTupleConcatenationResultType(((PyBinaryExpression)callSite), context); + return getTupleConcatenationResultType((PyBinaryExpression)callSite, context); + } + else if ("__builtin__.tuple.__mul__".equals(qname) && callSite instanceof PyBinaryExpression) { + return getTupleMultiplicationResultType((PyBinaryExpression)callSite, context); + } + } + return null; + } + + @Nullable + private static PyType getTupleMultiplicationResultType(@NotNull PyBinaryExpression multiplication, @NotNull TypeEvalContext context) { + final PyTupleType leftTupleType = as(context.getType(multiplication.getLeftExpression()), PyTupleType.class); + if (leftTupleType == null) { + return null; + } + PyExpression rightExpression = multiplication.getRightExpression(); + if (rightExpression instanceof PyReferenceExpression) { + final PsiElement target = ((PyReferenceExpression)rightExpression).getReference().resolve(); + if (target instanceof PyTargetExpression) { + rightExpression = ((PyTargetExpression)target).findAssignedValue(); + } + } + if (rightExpression instanceof PyNumericLiteralExpression && ((PyNumericLiteralExpression)rightExpression).isIntegerLiteral()) { + final int multiplier = ((PyNumericLiteralExpression)rightExpression).getBigIntegerValue().intValue(); + final int originalSize = leftTupleType.getElementCount(); + // Heuristic + if (originalSize * multiplier <= 20) { + final PyType[] elementTypes = new PyType[leftTupleType.getElementCount() * multiplier]; + for (int i = 0; i < multiplier; i++) { + for (int j = 0; j < originalSize; j++) { + elementTypes[i * originalSize + j] = leftTupleType.getElementType(j); + } + } + return PyTupleType.create(multiplication, elementTypes); } } return null; diff --git a/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java b/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java index 9e61faabdc65..187803f4cfa3 100644 --- a/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java @@ -102,39 +102,25 @@ public class PyStringFormatInspection extends PyInspection { final PyBuiltinCache builtinCache = PyBuiltinCache.getInstance(problemTarget); final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext); - //in case tuple multiplies integer PY-4647 - if (rightExpression instanceof PyBinaryExpression) { - PyBinaryExpression binaryExpression = (PyBinaryExpression)rightExpression; - if (binaryExpression.getOperator() == PyTokenTypes.MULT && binaryExpression.getLeftExpression() instanceof PyParenthesizedExpression - && binaryExpression.getRightExpression() instanceof PyNumericLiteralExpression) { - PyParenthesizedExpression parenthesizedExpression = (PyParenthesizedExpression)binaryExpression.getLeftExpression(); - if (parenthesizedExpression.getContainedExpression() instanceof PyTupleExpression) { - PyExpression[] tupleElements = ((PyTupleExpression)parenthesizedExpression.getContainedExpression()).getElements(); - final PyExpression expression = ((PyBinaryExpression)rightExpression).getRightExpression(); - if (expression != null) { - return ((PyNumericLiteralExpression)expression).getBigIntegerValue().intValue() * tupleElements.length; - } - } - } - } final String s = myFormatSpec.get("1"); if (PyUtil.instanceOf(rightExpression, SIMPLE_RHS_EXPRESSIONS)) { if (s != null) { - assert rightExpression != null; - PyType right_type = myTypeEvalContext.getType(rightExpression); - if (right_type instanceof PySubscriptableType) { - PySubscriptableType tuple_type = (PySubscriptableType)right_type; - for (int i=0; i <= tuple_type.getElementCount(); i += 1) { - PyType elementType = tuple_type.getElementType(i); + final PyType rightType = myTypeEvalContext.getType(rightExpression); + if (rightType instanceof PySubscriptableType) { + final PySubscriptableType tupleType = (PySubscriptableType)rightType; + for (int i = 0; i <= tupleType.getElementCount(); i += 1) { + final PyType elementType = tupleType.getElementType(i); if (elementType != null) { final String typeName = myFormatSpec.get(String.valueOf(i + 1)); final PyType type = typeName != null ? PyTypeParser.getTypeByName(problemTarget, typeName) : null; checkTypeCompatible(problemTarget, elementType, type); } } - return tuple_type.getElementCount(); + return tupleType.getElementCount(); + } + else { + checkExpressionType(rightExpression, s, problemTarget); } - else checkExpressionType(rightExpression, s, problemTarget); } return 1; } diff --git a/python/testData/inspections/PyStringFormatInspection1/test.py b/python/testData/inspections/PyStringFormatInspection1/test.py index 3ed0e3edb65f..92212324a230 100644 --- a/python/testData/inspections/PyStringFormatInspection1/test.py +++ b/python/testData/inspections/PyStringFormatInspection1/test.py @@ -10,4 +10,7 @@ my_dict['tmp'] = 'classes %(claz)s' % t * num) \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyTypeTest.java b/python/testSrc/com/jetbrains/python/PyTypeTest.java index 4877cbcb6d7e..d4f6acda8fd3 100644 --- a/python/testSrc/com/jetbrains/python/PyTypeTest.java +++ b/python/testSrc/com/jetbrains/python/PyTypeTest.java @@ -848,6 +848,11 @@ public class PyTypeTest extends PyTestCase { "expr = (1,) + (True, 'spam') + ()"); } + public void testTupleMultiplication() { + doTest("(int, bool, int, bool)", + "expr = (1, False) * 2"); + } + public void testConstructorUnification() { doTest("C[int]", "class C(object):\n" +