Bug 334991 - Variables view: Add history with recent expressions to the
details pane
Change-Id: I9f7dc364305579b60a0f19be1322a24a35be77a8
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ExpressionInformationControlCreator.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ExpressionInformationControlCreator.java
index 83663e1..b1ae6ee 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ExpressionInformationControlCreator.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ExpressionInformationControlCreator.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2018 IBM Corporation and others.
+ * Copyright (c) 2008, 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -494,7 +494,7 @@
return foreground;
}
- private static Color getSystemBackgroundColor() {
+ public static Color getSystemBackgroundColor() {
ColorRegistry colorRegistry = JFaceResources.getColorRegistry();
Color background = colorRegistry.get(JFacePreferences.INFORMATION_BACKGROUND_COLOR);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/variables/JavaVariablesDetailPane.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/variables/JavaVariablesDetailPane.java
index 6951c8e..41399b1 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/variables/JavaVariablesDetailPane.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/variables/JavaVariablesDetailPane.java
@@ -18,21 +18,19 @@
import java.util.Stack;
import java.util.regex.Pattern;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.ListenerList;
import org.eclipse.debug.internal.ui.SWTFactory;
import org.eclipse.debug.internal.ui.views.variables.details.DefaultDetailPane;
-import org.eclipse.debug.ui.IDetailPane3;
import org.eclipse.jdt.debug.core.IJavaVariable;
+import org.eclipse.jdt.internal.debug.ui.ExpressionInformationControlCreator;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jdt.internal.debug.ui.propertypages.PropertyPageMessages;
import org.eclipse.jface.dialogs.DialogSettings;
import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.text.DocumentEvent;
-import org.eclipse.jface.text.IDocumentListener;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
@@ -41,14 +39,13 @@
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.IPropertyListener;
/**
* Java Variable detail pane.
*
* @since 3.10
*/
-public class JavaVariablesDetailPane extends DefaultDetailPane implements IDetailPane3 {
+public class JavaVariablesDetailPane extends DefaultDetailPane {
/**
* Identifier for this Java Variable detail pane editor
@@ -57,10 +54,7 @@
public static final String NAME = PropertyPageMessages.JavaVariableDetailsPane_name;
public static final String DESCRIPTION = PropertyPageMessages.JavaVariableDetailsPane_description;
- private boolean fDirty = false;
- // property listeners
- private ListenerList<IPropertyListener> fListeners = new ListenerList<>();
- private IDocumentListener fDocumentListener;
+ private FocusListener focusListener;
private Combo fExpressionHistory;
private IDialogSettings fExpressionHistoryDialogSettings;
private Map<IJavaVariable, Stack<String>> fLocalExpressionHistory;
@@ -75,23 +69,14 @@
public JavaVariablesDetailPane() {
fExpressionHistoryDialogSettings = DialogSettings.getOrCreateSection(JDIDebugUIPlugin.getDefault().getDialogSettings(), DS_SECTION_EXPRESSION_HISTORY);
}
- @Override
- public void doSave(IProgressMonitor monitor) {
- if (fVariable != null && isDirty()) {
- setDirty(false);
- if (hasExpressionHistory()) {
- updateExpressionHistories();
- }
- }
- }
-
- @Override
- public void doSaveAs() {
- doSave(null);
- }
@Override
public Control createControl(Composite parent) {
+ if (!isInView()) {
+ Control c = super.createControl(parent);
+ c.setBackground(ExpressionInformationControlCreator.getSystemBackgroundColor());
+ return c;
+ }
if (fExpressionHistoryDialogSettings != null) {
fLocalExpressionHistory = new HashMap<>();
fExpressionHistory = SWTFactory.createCombo(parent, SWT.DROP_DOWN | SWT.READ_ONLY, 1, null);
@@ -111,17 +96,20 @@
}
Control newControl = super.createControl(parent);
SourceViewer viewer = getSourceViewer();
- fDocumentListener = new IDocumentListener() {
+ focusListener = new FocusListener() {
+
@Override
- public void documentAboutToBeChanged(DocumentEvent event) {
+ public void focusLost(FocusEvent e) {
+ updateExpressionHistories();
+ initializeExpressionHistoryDropDown();
}
@Override
- public void documentChanged(DocumentEvent event) {
- updateExpressionHistories();
+ public void focusGained(FocusEvent e) {
+
}
};
- viewer.getDocument().addDocumentListener(fDocumentListener);
+ viewer.getTextWidget().addFocusListener(focusListener);
return newControl;
}
@@ -291,45 +279,6 @@
return result.toString().trim();
}
- /**
- * Tells whether this editor shows a Expression history drop-down list.
- *
- * @return <code>true</code> if this editor shows a Expression history drop-down list, <code>false</code> otherwise
- */
- private boolean hasExpressionHistory() {
- return fExpressionHistory != null;
- }
-
- @Override
- public boolean isDirty() {
- return fDirty;
- }
-
- private void setDirty(boolean dirty) {
- fDirty = dirty;
- }
- @Override
- public boolean isSaveAsAllowed() {
- return false;
- }
-
- @Override
- public boolean isSaveOnCloseNeeded() {
- return true;
- }
-
- @Override
- public void addPropertyListener(IPropertyListener listener) {
- fListeners.add(listener);
-
- }
-
- @Override
- public void removePropertyListener(IPropertyListener listener) {
- fListeners.remove(listener);
-
- }
-
@Override
public String getDescription() {
return DESCRIPTION;
@@ -347,7 +296,7 @@
@Override
public void display(IStructuredSelection selection) {
- if (selection != null && selection.getFirstElement() instanceof IJavaVariable) {
+ if (fExpressionHistory != null && selection != null && selection.getFirstElement() instanceof IJavaVariable) {
IJavaVariable variable = (IJavaVariable) (selection.getFirstElement());
if (fVariable == null || !fVariable.equals(variable)) {
fVariable = variable;
@@ -364,18 +313,23 @@
@Override
protected void clearSourceViewer(){
fVariable = null;
- fExpressionHistory.setEnabled(false);
+ if (fExpressionHistory != null) {
+ fExpressionHistory.setEnabled(false);
+ }
super.clearSourceViewer();
}
@Override
public void dispose() {
- fExpressionHistory.dispose();
- fLocalExpressionHistory.clear();
- if (fDocumentListener != null && getSourceViewer() != null && getSourceViewer().getDocument() != null) {
- getSourceViewer().getDocument().removeDocumentListener(fDocumentListener);
+ if (fExpressionHistory != null) {
+ fExpressionHistory.dispose();
}
- fListeners.clear();
+ if (fLocalExpressionHistory != null) {
+ fLocalExpressionHistory.clear();
+ }
+ if (focusListener != null && getSourceViewer() != null && getSourceViewer().getTextWidget() != null) {
+ getSourceViewer().getTextWidget().removeFocusListener(focusListener);
+ }
super.dispose();
}
}