From f8dc4b1568cdb773482a713966be5ae3678a150d Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Thu, 28 Aug 2014 19:27:17 +0400 Subject: [PATCH 1/6] CPP-694 Remove 'Start Using IDE' from welcome screen to make sure users setup toolchains --- .../customize/CustomizeIDEWizardDialog.java | 50 +++++++++---------- .../CustomizeIDEWizardStepsProvider.java | 4 -- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java index 9ef8749674f2..2f25eb002b78 100644 --- a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java +++ b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java @@ -21,6 +21,7 @@ import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.SystemInfo; import com.intellij.ui.JBCardLayout; +import com.intellij.util.PlatformUtils; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -33,9 +34,9 @@ import java.util.List; public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionListener { private static final String BUTTONS = "BUTTONS"; private static final String NOBUTTONS = "NOBUTTONS"; + private final JButton mySkipButton = new JButton("Skip All and Set Defaults"); private final JButton myBackButton = new JButton("Back"); private final JButton myNextButton = new JButton("Next"); - private final JButton myStartUsingButton = new JButton("Start using " + ApplicationNamesInfo.getInstance().getFullProductName()); private final JBCardLayout myCardLayout = new JBCardLayout(); protected final List mySteps = new ArrayList(); @@ -52,9 +53,9 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis setTitle("Customize " + ApplicationNamesInfo.getInstance().getProductName()); getPeer().setAppIcons(); initSteps(); + mySkipButton.addActionListener(this); myBackButton.addActionListener(this); myNextButton.addActionListener(this); - myStartUsingButton.addActionListener(this); myNavigationLabel.setEnabled(false); myFooterLabel.setEnabled(false); init(); @@ -80,12 +81,6 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis protected void initSteps() { provider.initSteps(this, mySteps); } - - @Override - protected void createButtons(JPanel buttonPanel, GridBagConstraints gbc) { - provider.addButtons(this, buttonPanel, gbc); - super.createButtons(buttonPanel, gbc); - } }.show(); } @@ -137,7 +132,17 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis gbc.fill = GridBagConstraints.BOTH; gbc.gridx = 0; gbc.gridy = 0; - createButtons(buttonPanel, gbc); + if (!PlatformUtils.isCppIde()) { + buttonPanel.add(mySkipButton, gbc); + gbc.gridx++; + } + buttonPanel.add(myBackButton, gbc); + gbc.gridx++; + gbc.weightx = 1; + buttonPanel.add(Box.createHorizontalGlue(), gbc); + gbc.gridx++; + gbc.weightx = 0; + buttonPanel.add(myNextButton, gbc); buttonPanel.setBorder(BorderFactory.createEmptyBorder(8, 0, 0, 0)); myButtonWrapper.add(buttonPanel, BUTTONS); myButtonWrapper.add(new JLabel(), NOBUTTONS); @@ -145,25 +150,13 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis return myButtonWrapper; } - protected void createButtons(JPanel buttonPanel, GridBagConstraints gbc) { - buttonPanel.add(myBackButton, gbc); - gbc.gridx++; - gbc.weightx = 1; - buttonPanel.add(Box.createHorizontalGlue(), gbc); - gbc.weightx = 0; - gbc.gridx++; - buttonPanel.add(myNextButton, gbc); - gbc.gridx++; - buttonPanel.add(myStartUsingButton, gbc); - } - void setButtonsVisible(boolean visible) { myButtonWrapperLayout.show(myButtonWrapper, visible ? BUTTONS : NOBUTTONS); } @Override public void actionPerformed(ActionEvent e) { - if (e.getSource() == myStartUsingButton) { + if (e.getSource() == mySkipButton) { doOKAction(); return; } @@ -173,6 +166,10 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis return; } if (e.getSource() == myNextButton) { + if (myIndex >= mySteps.size() - 1) { + doOKAction(); + return; + } myIndex++; initCurrentStep(true); } @@ -209,12 +206,11 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis if (myIndex > 0) { myBackButton.setText("Back to " + mySteps.get(myIndex - 1).getTitle()); } + mySkipButton.setText("Skip " + (myIndex > 0 ? "Remaining" : "All") + " and Set Defaults"); - myNextButton.setVisible(myIndex < mySteps.size() - 1); - if (myIndex < mySteps.size() - 1) { - myNextButton.setText("Next: " + mySteps.get(myIndex + 1).getTitle()); - } - + myNextButton.setText(myIndex < mySteps.size() - 1 + ? "Next: " + mySteps.get(myIndex + 1).getTitle() + : "Start using " + ApplicationNamesInfo.getInstance().getFullProductName()); myHeaderLabel.setText(myCurrentStep.getHTMLHeader()); myFooterLabel.setText(myCurrentStep.getHTMLFooter()); StringBuilder navHTML = new StringBuilder(""); diff --git a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardStepsProvider.java b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardStepsProvider.java index 4f44dae0ebc3..ceea34db05fd 100644 --- a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardStepsProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardStepsProvider.java @@ -15,8 +15,6 @@ */ package com.intellij.ide.customize; -import javax.swing.*; -import java.awt.*; import java.util.List; /** @@ -24,6 +22,4 @@ import java.util.List; */ public interface CustomizeIDEWizardStepsProvider { void initSteps(CustomizeIDEWizardDialog wizardDialog, List steps); - - void addButtons(CustomizeIDEWizardDialog wizardDialog, JPanel buttonPanel, GridBagConstraints gbc); } \ No newline at end of file From dff975ffd03c812dca0931139b83f6b1e8f2865a Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 28 Aug 2014 18:49:45 +0400 Subject: [PATCH 2/6] Specify generic type to avoid warning --- .../util/src/com/intellij/util/containers/ContainerUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/util/src/com/intellij/util/containers/ContainerUtil.java b/platform/util/src/com/intellij/util/containers/ContainerUtil.java index 72285a69d04f..40bd75a2eff8 100644 --- a/platform/util/src/com/intellij/util/containers/ContainerUtil.java +++ b/platform/util/src/com/intellij/util/containers/ContainerUtil.java @@ -1431,7 +1431,7 @@ public class ContainerUtil extends ContainerUtilRt { } @NotNull - public static List sorted(@NotNull Collection list) { + public static > List sorted(@NotNull Collection list) { return sorted(list, new Comparator() { @Override public int compare(T o1, T o2) { From 89ec378d5b582e440e7ab65356905d42bc7b348c Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Thu, 28 Aug 2014 19:40:32 +0400 Subject: [PATCH 3/6] Get rid of Editor leaks in CodeStyleSettings (IDEA-95395) [CR-IC-6178] --- .../options/CodeStyleSchemesConfigurable.java | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java b/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java index bb7bf0655b27..760d17e67d24 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java +++ b/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java @@ -346,34 +346,31 @@ public class CodeStyleSchemesConfigurable extends SearchableConfigurable.Parent. String displayName = myProvider.getConfigurableDisplayName(); if (displayName != null) return displayName; - return ensurePanel().getDisplayName(); // fallback for 8.0 API compatibility + return myPanel != null ? myPanel.getDisplayName() : null; // fallback for 8.0 API compatibility } @Override public String getHelpTopic() { - return ensurePanel().getHelpTopic(); - } - - private CodeStyleMainPanel ensurePanel() { - if (myPanel == null) { - myPanel = new CodeStyleMainPanel(ensureModel(), myLangSelector, myFactory); - } - return myPanel; + return myPanel != null ? myPanel.getHelpTopic() : null; } @Override public JComponent createComponent() { - return ensurePanel(); + myPanel = new CodeStyleMainPanel(ensureModel(), myLangSelector, myFactory); + return myPanel; } @Override public boolean isModified() { - boolean someSchemeModified = ensurePanel().isModified(); - if (someSchemeModified) { - myApplyCompleted = false; - myRevertCompleted = false; + if (myPanel != null) { + boolean someSchemeModified = myPanel.isModified(); + if (someSchemeModified) { + myApplyCompleted = false; + myRevertCompleted = false; + } + return someSchemeModified; } - return someSchemeModified; + return false; } @Override @@ -428,20 +425,25 @@ public class CodeStyleSchemesConfigurable extends SearchableConfigurable.Parent. } public boolean isPanelModified(CodeStyleScheme scheme) { - return ensurePanel().isModified(scheme); + return myPanel != null && myPanel.isModified(scheme); } public boolean isPanelModified() { - return ensurePanel().isModified(); + return myPanel != null && myPanel.isModified(); } public void applyPanel() throws ConfigurationException { - ensurePanel().apply(); + if (myPanel != null) { + myPanel.apply(); + } } @Override public Set processListOptions() { - return ensurePanel().processListOptions(); + if (myPanel == null) { + myPanel = new CodeStyleMainPanel(ensureModel(), myLangSelector, myFactory); + } + return myPanel.processListOptions(); } } } From a4fc15a689ba86d169c7f6bee7da3ffc44930753 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 28 Aug 2014 17:51:25 +0400 Subject: [PATCH 4/6] [git log] support "extended regexps" In particular supports the syntax like: '(git|diff)' Relates to IDEA-111043, although basic regexp was already supported. --- plugins/git4idea/src/git4idea/log/GitLogProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/git4idea/src/git4idea/log/GitLogProvider.java b/plugins/git4idea/src/git4idea/log/GitLogProvider.java index 435313fa5c7d..6d4a0819e799 100644 --- a/plugins/git4idea/src/git4idea/log/GitLogProvider.java +++ b/plugins/git4idea/src/git4idea/log/GitLogProvider.java @@ -308,8 +308,9 @@ public class GitLogProvider implements VcsLogProvider { } if (filterCollection.getTextFilter() != null) { - String textFilter = StringUtil.escapeBackSlashes(filterCollection.getTextFilter().getText()); + String textFilter = filterCollection.getTextFilter().getText(); filterParameters.add(prepareParameter("grep", textFilter)); + filterParameters.add("--extended-regexp"); } filterParameters.add("--regexp-ignore-case"); // affects case sensitivity of any filter (except file filter) From da2407f70690d386c3cbc0e3a8878dfa9da69f75 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 28 Aug 2014 19:14:44 +0400 Subject: [PATCH 5/6] [log] IDEA-117337 support filtering by hash If the text field contains one or several hashes, return them as a VcsLogHashFilter. It is natural (though maybe not consistent) to force hash filter, without looking at other filters => ignore other text, and ignore other filters including filter by branch. --- .../vcs/log/VcsLogFilterCollection.java | 3 ++ .../intellij/vcs/log/VcsLogHashFilter.java | 5 ++- .../intellij/vcs/log/data/VcsLogFilterer.java | 22 ++++++++++ .../log/impl/VcsLogFilterCollectionImpl.java | 9 ++++ .../vcs/log/impl/VcsLogHashFilterImpl.java | 36 ++++++++++++++++ .../log/ui/filter/VcsLogClassicFilterUi.java | 41 ++++++++++++++++++- .../src/git4idea/log/GitBekParentFixer.java | 6 +++ 7 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogHashFilterImpl.java diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogFilterCollection.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogFilterCollection.java index 19cfbdf486eb..65b999f4c4db 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogFilterCollection.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogFilterCollection.java @@ -39,6 +39,9 @@ public interface VcsLogFilterCollection { @Nullable VcsLogTextFilter getTextFilter(); + @Nullable + VcsLogHashFilter getHashFilter(); + @Nullable VcsLogStructureFilter getStructureFilter(); diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogHashFilter.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogHashFilter.java index acd39bf51b18..71a14e1f732d 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogHashFilter.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogHashFilter.java @@ -15,10 +15,13 @@ */ package com.intellij.vcs.log; +import org.jetbrains.annotations.NotNull; + import java.util.Collection; public interface VcsLogHashFilter { - Collection getHashes(); + @NotNull + Collection getHashes(); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java index 5a1766d9cb81..f0bf75c08dcf 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java @@ -48,11 +48,33 @@ public class VcsLogFilterer { @NotNull public AbstractVcsLogTableModel applyFiltersAndUpdateUi(@NotNull DataPack dataPack, @NotNull VcsLogFilterCollection filters) { resetFilters(dataPack); + VcsLogHashFilter hashFilter = filters.getHashFilter(); + if (hashFilter != null && !hashFilter.getHashes().isEmpty()) { // hashes should be shown, no matter if they match other filters or not + return applyHashFilter(dataPack, hashFilter.getHashes()); + } List detailsFilters = filters.getDetailsFilters(); applyGraphFilters(dataPack, filters.getBranchFilter()); return applyDetailsFilter(dataPack, detailsFilters); } + private GraphTableModel applyHashFilter(@NotNull DataPack dataPack, @NotNull Collection hashes) { + final List indices = ContainerUtil.mapNotNull(hashes, new Function() { + @Override + public Integer fun(String partOfHash) { + Hash hash = myLogDataHolder.findHashByString(partOfHash); + return hash != null ? myLogDataHolder.getCommitIndex(hash) : null; + } + }); + dataPack.getGraphFacade().setVisibleBranches(null); + dataPack.getGraphFacade().setFilter(new Condition() { + @Override + public boolean value(Integer integer) { + return indices.contains(integer); + } + }); + return new GraphTableModel(dataPack, myLogDataHolder, myUI, LoadMoreStage.ALL_REQUESTED); + } + private static void resetFilters(@NotNull DataPack dataPack) { GraphFacade facade = dataPack.getGraphFacade(); facade.setVisibleBranches(null); diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogFilterCollectionImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogFilterCollectionImpl.java index 285e3ce91079..3fbb7cb7b82f 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogFilterCollectionImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogFilterCollectionImpl.java @@ -27,17 +27,20 @@ public class VcsLogFilterCollectionImpl implements VcsLogFilterCollection { @Nullable private final VcsLogBranchFilter myBranchFilter; @Nullable private final VcsLogUserFilter myUserFilter; + @Nullable private final VcsLogHashFilter myHashFilter; @Nullable private final VcsLogDateFilter myDateFilter; @Nullable private final VcsLogTextFilter myTextFilter; @Nullable private final VcsLogStructureFilter myStructureFilter; public VcsLogFilterCollectionImpl(@Nullable VcsLogBranchFilter branchFilter, @Nullable VcsLogUserFilter userFilter, + @Nullable VcsLogHashFilter hashFilter, @Nullable VcsLogDateFilter dateFilter, @Nullable VcsLogTextFilter textFilter, @Nullable VcsLogStructureFilter structureFilter) { myBranchFilter = branchFilter; myUserFilter = userFilter; + myHashFilter = hashFilter; myDateFilter = dateFilter; myTextFilter = textFilter; myStructureFilter = structureFilter; @@ -49,6 +52,12 @@ public class VcsLogFilterCollectionImpl implements VcsLogFilterCollection { return myBranchFilter; } + @Override + @Nullable + public VcsLogHashFilter getHashFilter() { + return myHashFilter; + } + @Nullable @Override public VcsLogUserFilter getUserFilter() { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogHashFilterImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogHashFilterImpl.java new file mode 100644 index 000000000000..ff747f4f37d4 --- /dev/null +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogHashFilterImpl.java @@ -0,0 +1,36 @@ +/* + * 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.vcs.log.impl; + +import com.intellij.vcs.log.VcsLogHashFilter; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +public class VcsLogHashFilterImpl implements VcsLogHashFilter { + + @NotNull private final Collection myHashes; + + public VcsLogHashFilterImpl(@NotNull Collection hashes) { + myHashes = hashes; + } + + @NotNull + @Override + public Collection getHashes() { + return myHashes; + } +} diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java index d18c99c4e24c..9a44f320f040 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java @@ -20,15 +20,20 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.actionSystem.ex.CustomComponentAction; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.DumbAwareAction; +import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.SearchTextField; import com.intellij.ui.SearchTextFieldWithStoredHistory; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import com.intellij.vcs.log.*; import com.intellij.vcs.log.data.DataPack; import com.intellij.vcs.log.data.VcsLogDataHolder; import com.intellij.vcs.log.data.VcsLogUiProperties; import com.intellij.vcs.log.impl.VcsLogFilterCollectionImpl; +import com.intellij.vcs.log.impl.VcsLogHashFilterImpl; import com.intellij.vcs.log.ui.VcsLogUiImpl; import org.jetbrains.annotations.NotNull; @@ -43,6 +48,9 @@ import java.util.List; */ public class VcsLogClassicFilterUi implements VcsLogFilterUi { + private static final Logger LOG = Logger.getInstance(VcsLogClassicFilterUi.class); + private static final String HASH_PATTERN = "[a-fA-F0-9]{7,}"; + @NotNull private final SearchTextField myTextFilter; @NotNull private final VcsLogUiImpl myUi; @NotNull private final DefaultActionGroup myActionGroup; @@ -104,9 +112,38 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi { @NotNull @Override public VcsLogFilterCollection getFilters() { - VcsLogTextFilter textFilter = !myTextFilter.getText().isEmpty() ? new VcsLogTextFilterImpl(myTextFilter.getText().trim()) : null; + Pair filtersFromText = getFiltersFromTextArea(myTextFilter.getText().trim()); return new VcsLogFilterCollectionImpl(myBranchFilterComponent.getFilter(), myUserFilterComponent.getFilter(), - myDateFilterComponent.getFilter(), textFilter, myStructureFilterComponent.getFilter()); + filtersFromText.second, myDateFilterComponent.getFilter(), + filtersFromText.first, myStructureFilterComponent.getFilter()); + } + + @NotNull + private static Pair getFiltersFromTextArea(@NotNull String text) { + if (text.isEmpty()) { + return Pair.empty(); + } + List hashes = ContainerUtil.newArrayList(); + for (String word : StringUtil.split(text, " ")) { + if (!StringUtil.isEmptyOrSpaces(word) && word.matches(HASH_PATTERN)) { + hashes.add(word); + } + else { + break; + } + } + + VcsLogTextFilter textFilter; + VcsLogHashFilterImpl hashFilter; + if (!hashes.isEmpty()) { // text is ignored if there are hashes in the text + textFilter = null; + hashFilter = new VcsLogHashFilterImpl(hashes); + } + else { + textFilter = new VcsLogTextFilterImpl(text); + hashFilter = null; + } + return Pair.create(textFilter, hashFilter); } @Override diff --git a/plugins/git4idea/src/git4idea/log/GitBekParentFixer.java b/plugins/git4idea/src/git4idea/log/GitBekParentFixer.java index 054ed9f90b48..4bcfade3cfa8 100644 --- a/plugins/git4idea/src/git4idea/log/GitBekParentFixer.java +++ b/plugins/git4idea/src/git4idea/log/GitBekParentFixer.java @@ -124,6 +124,12 @@ class GitBekParentFixer { return textFilter; } + @Nullable + @Override + public VcsLogHashFilter getHashFilter() { + return null; + } + @Nullable @Override public VcsLogStructureFilter getStructureFilter() { From 400517c6fc1371ad843220246078ae00774376ea Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 28 Aug 2014 17:54:07 +0200 Subject: [PATCH 6/6] show type if value is not accesible --- .../impl/evaluate/XDebuggerEditorLinePainter.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEditorLinePainter.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEditorLinePainter.java index bf9a47c3b516..fb7c48614662 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEditorLinePainter.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEditorLinePainter.java @@ -27,6 +27,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.JBColor; import com.intellij.ui.SimpleColoredText; +import com.intellij.ui.SimpleTextAttributes; import com.intellij.xdebugger.frame.presentation.XValuePresentation; import com.intellij.xdebugger.impl.frame.XVariablesView; import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; @@ -79,6 +80,12 @@ public class XDebuggerEditorLinePainter extends EditorLinePainter { } else { presentation.renderValue(renderer); } + if (StringUtil.isEmpty(text.toString())) { + final String type = value.getValuePresentation().getType(); + if (!StringUtil.isEmpty(type)) { + text.append(type, SimpleTextAttributes.REGULAR_ATTRIBUTES); + } + } } catch (Exception e) { continue; }