559255: MAT Calcite results can't be added to the compare basket

Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=559255

Change-Id: I35a34b3989cf70a5f1f81fc022022c45ebdec4b4
diff --git a/plugins/org.eclipse.mat.ui.rcp/src/org/eclipse/mat/ui/rcp/actions/SnapshotHistoryIntroContentProvider.java b/plugins/org.eclipse.mat.ui.rcp/src/org/eclipse/mat/ui/rcp/actions/SnapshotHistoryIntroContentProvider.java
index 9b8e5d8..f147b08 100644
--- a/plugins/org.eclipse.mat.ui.rcp/src/org/eclipse/mat/ui/rcp/actions/SnapshotHistoryIntroContentProvider.java
+++ b/plugins/org.eclipse.mat.ui.rcp/src/org/eclipse/mat/ui/rcp/actions/SnapshotHistoryIntroContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2008, 2010 SAP AG.

+ * Copyright (c) 2008, 2019 SAP AG and IBM Corporation.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -7,6 +7,7 @@
  *

  * Contributors:

  *    SAP AG - initial API and implementation

+ *    Andrew Johnson (IBM Corporation) - alt text

  *******************************************************************************/

 package org.eclipse.mat.ui.rcp.actions;

 

@@ -135,7 +136,7 @@
                                     : RESOURCE_ICON;

 

                     buffer.append("<li style=\"image\" value=\"bullet\">"); //$NON-NLS-1$

-                    buffer.append("<img src =\"").append(icon).append("\"/>"); //$NON-NLS-1$ //$NON-NLS-2$

+                    buffer.append("<img src =\"").append(icon).append("\" alt=\"\">"); //$NON-NLS-1$ //$NON-NLS-2$

                     buffer.append("<a href=\"http://org.eclipse.ui.intro/runAction?" //$NON-NLS-1$

                                     + "standby=true&amp;pluginId=org.eclipse.mat.ui.rcp&amp;" //$NON-NLS-1$

                                     + "class=org.eclipse.mat.ui.rcp.actions.OpenEditorAction&amp;param="); //$NON-NLS-1$

diff --git a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/compare/CompareBasketView.java b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/compare/CompareBasketView.java
index 2ccf59f..ed0a1e4 100644
--- a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/compare/CompareBasketView.java
+++ b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/compare/CompareBasketView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2010, 2012 SAP AG and IBM Corporation

+ * Copyright (c) 2010, 2019 SAP AG and IBM Corporation

  * All rights reserved. This program and the accompanying materials 

  * are made available under the terms of the Eclipse Public License v1.0 

  * which accompanies this distribution, and is available at 

@@ -48,6 +48,7 @@
 import org.eclipse.mat.ui.accessibility.AccessibleCompositeAdapter;

 import org.eclipse.mat.ui.actions.QueryDropDownMenuAction;

 import org.eclipse.mat.ui.editor.AbstractEditorPane;

+import org.eclipse.mat.ui.editor.CompositeHeapEditorPane;

 import org.eclipse.mat.ui.editor.MultiPaneEditor;

 import org.eclipse.mat.ui.internal.panes.QueryResultPane;

 import org.eclipse.mat.ui.internal.panes.TableResultPane;

@@ -159,6 +160,14 @@
 	{

         AbstractEditorPane pane = resultPane(state, editor);

 		ComparedResult entry = null;

+		if (pane != null)

+		{

+            QueryResult qr = pane.getAdapter(QueryResult.class);

+            if (qr != null && qr.getSubject() instanceof IResultTree)

+                entry = new ComparedResult(state, editor, (IResultTree)qr.getSubject());

+            if (qr != null && qr.getSubject() instanceof IResultTable)

+                entry = new ComparedResult(state, editor, (IResultTable)qr.getSubject());

+		}

 		if (pane instanceof HistogramPane)

 		{

 			entry = new ComparedResult(state, editor, ((HistogramPane) pane).getHistogram());

@@ -196,6 +205,14 @@
 	public static boolean accepts(PaneState state, MultiPaneEditor editor)

 	{

 	    AbstractEditorPane pane = resultPane(state, editor);

+	    if (pane != null)

+	    {

+	        QueryResult qr = pane.getAdapter(QueryResult.class);

+	        if (qr != null && qr.getSubject() instanceof IResultTree)

+	            return true;

+	        if (qr != null && qr.getSubject() instanceof IResultTable)

+	            return true;

+	    }

 		return (pane instanceof HistogramPane) || (pane instanceof TableResultPane) ||

 		                pane instanceof QueryResultPane && 

 		                ((QueryResultPane) pane).getSrcQueryResult().getSubject() instanceof IResultTree;

@@ -206,12 +223,14 @@
         AbstractEditorPane pane;

         if (state.isActive() && state.getType() == PaneState.PaneType.COMPOSITE_CHILD)

         {

-            state = state.getParentPaneState();

-            pane = editor.getEditor(state);

+            PaneState pstate = state.getParentPaneState();

+            pane = editor.getEditor(pstate);

             if (pane instanceof OQLPane)

                 pane = ((OQLPane)pane).getEmbeddedPane();

-            else

-                pane = null;

+            else if (pane instanceof CompositeHeapEditorPane)

+            {

+                pane = ((CompositeHeapEditorPane)pane);

+            }

         }

         else

         {

diff --git a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/editor/AbstractEditorPane.java b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/editor/AbstractEditorPane.java
index fe73568..c580049 100644
--- a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/editor/AbstractEditorPane.java
+++ b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/editor/AbstractEditorPane.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2008, 2010 SAP AG and others.

+ * Copyright (c) 2008, 2019 SAP AG, IBM Corporation and others.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -7,6 +7,7 @@
  *

  * Contributors:

  *    SAP AG - initial API and implementation

+ *    Andrew Johnson (IBM Corporation) - MAT Calcite

  *******************************************************************************/

 package org.eclipse.mat.ui.editor;

 

@@ -111,8 +112,7 @@
     public void setFocus()

     {}

 

-    @SuppressWarnings("unchecked")

-    public Object getAdapter(Class adapter)

+    public <T> T getAdapter(Class<T> adapter)

     {

         return null;

     }

diff --git a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/editor/CompositeHeapEditorPane.java b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/editor/CompositeHeapEditorPane.java
index 080ecd1..913efdc 100644
--- a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/editor/CompositeHeapEditorPane.java
+++ b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/editor/CompositeHeapEditorPane.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2008, 2010 SAP AG.

+ * Copyright (c) 2008, 2019 SAP AG and IBM Corporation.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -7,6 +7,7 @@
  *

  * Contributors:

  *    SAP AG - initial API and implementation

+ *    Andrew Johnson (IBM Corporation) - MAT Calcite

  *******************************************************************************/

 package org.eclipse.mat.ui.editor;

 

@@ -159,6 +160,13 @@
         }

     }

 

+    public <T> T getAdapter(Class<T> adapter)

+    {

+        if (embeddedPane != null)

+            return embeddedPane.getAdapter(adapter);

+        return super.getAdapter(adapter);

+    }

+

     @Override

     public void contributeToToolBar(IToolBarManager manager)

     {

diff --git a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/internal/panes/QueryResultPane.java b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/internal/panes/QueryResultPane.java
index e37289e..7df9ce3 100644
--- a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/internal/panes/QueryResultPane.java
+++ b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/internal/panes/QueryResultPane.java
@@ -380,4 +380,16 @@
         return srcQueryResult;

     }

 

+    public <T> T getAdapter(Class<T> adapter)

+    {

+        if (adapter.isAssignableFrom(srcQueryResult.getClass()))

+        {

+            return (adapter.cast(srcQueryResult));

+        }

+        if (adapter.isAssignableFrom(srcQueryResult.getSubject().getClass()))

+        {

+            return (adapter.cast(srcQueryResult.getSubject()));

+        }

+        return super.getAdapter(adapter);

+    }

 }

diff --git a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/internal/panes/QueryTextResultPane.java b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/internal/panes/QueryTextResultPane.java
index 6e828c9..d5710b5 100644
--- a/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/internal/panes/QueryTextResultPane.java
+++ b/plugins/org.eclipse.mat.ui/src/org/eclipse/mat/ui/internal/panes/QueryTextResultPane.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2008, 2010 SAP AG.

+ * Copyright (c) 2008, 2019 SAP AG and IBM Corporation.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -7,6 +7,7 @@
  *

  * Contributors:

  *    SAP AG - initial API and implementation

+ *    Andrew Johnson (IBM Corporation) - MAT Calcite

  *******************************************************************************/

 package org.eclipse.mat.ui.internal.panes;

 

@@ -254,6 +255,19 @@
         throw new UnsupportedOperationException();

     }

 

+    public <T> T getAdapter(Class<T> adapter)

+    {

+        if (adapter.isAssignableFrom(queryResult.getClass()))

+        {

+            return (adapter.cast(queryResult));

+        }

+        if (adapter.isAssignableFrom(queryResult.getSubject().getClass()))

+        {

+            return (adapter.cast(queryResult.getSubject()));

+        }

+        return super.getAdapter(adapter);

+    }

+

     @Override

     public void dispose()

     {