Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Johnson2020-02-25 13:07:09 +0000
committerAndrew Johnson2020-02-25 13:07:09 +0000
commita78a213ef16199cd202c17e0beb05d3a4d8702a7 (patch)
tree0c295c79131c760c85efc8959ccdc89e6914b1af
parente646583637913aaf5f8133d15dd711be8cdb8f87 (diff)
downloadorg.eclipse.mat-a78a213ef16199cd202c17e0beb05d3a4d8702a7.tar.gz
org.eclipse.mat-a78a213ef16199cd202c17e0beb05d3a4d8702a7.tar.xz
org.eclipse.mat-a78a213ef16199cd202c17e0beb05d3a4d8702a7.zip
296826: Detect cycles in WeakHashMaps
Enable the query and add a test Change-Id: I0e18d085cb22e1930075c79e230e2748e64af33a Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=296826
-rw-r--r--plugins/org.eclipse.mat.api/plugin.xml1
-rw-r--r--plugins/org.eclipse.mat.tests/src/org/eclipse/mat/tests/snapshot/GeneralSnapshotTests.java61
2 files changed, 62 insertions, 0 deletions
diff --git a/plugins/org.eclipse.mat.api/plugin.xml b/plugins/org.eclipse.mat.api/plugin.xml
index 55b72b36..16d9c440 100644
--- a/plugins/org.eclipse.mat.api/plugin.xml
+++ b/plugins/org.eclipse.mat.api/plugin.xml
@@ -58,6 +58,7 @@
<query impl="org.eclipse.mat.inspections.FindLeaksQuery"/>
<query impl="org.eclipse.mat.inspections.BigDropsQuery"/>
<query impl="org.eclipse.mat.inspections.DeltaHistogram"/>
+ <query impl="org.eclipse.mat.inspections.ReferenceLeakQuery"/>
<!-- Threads -->
<query impl="org.eclipse.mat.inspections.threads.ThreadOverviewQuery"/>
diff --git a/plugins/org.eclipse.mat.tests/src/org/eclipse/mat/tests/snapshot/GeneralSnapshotTests.java b/plugins/org.eclipse.mat.tests/src/org/eclipse/mat/tests/snapshot/GeneralSnapshotTests.java
index f9da7a21..601723b3 100644
--- a/plugins/org.eclipse.mat.tests/src/org/eclipse/mat/tests/snapshot/GeneralSnapshotTests.java
+++ b/plugins/org.eclipse.mat.tests/src/org/eclipse/mat/tests/snapshot/GeneralSnapshotTests.java
@@ -52,7 +52,10 @@ import org.eclipse.mat.SnapshotException;
import org.eclipse.mat.collect.SetInt;
import org.eclipse.mat.internal.snapshot.SnapshotQueryContext;
import org.eclipse.mat.query.IResult;
+import org.eclipse.mat.query.IResultTree;
+import org.eclipse.mat.query.ISelectionProvider;
import org.eclipse.mat.query.registry.QueryObjectLink;
+import org.eclipse.mat.query.results.CompositeResult;
import org.eclipse.mat.query.results.DisplayFileResult;
import org.eclipse.mat.snapshot.ISnapshot;
import org.eclipse.mat.snapshot.SnapshotFactory;
@@ -310,6 +313,64 @@ public class GeneralSnapshotTests
assertTrue(result != null);
}
+
+ @Test
+ public void topReferenceLeak() throws SnapshotException
+ {
+ SnapshotQuery query = SnapshotQuery.parse("reference_leak java.lang.ref.WeakReference -include_subclasses -maxpaths 10 -factor 0.2", snapshot);
+ IResult result = query.execute(new VoidProgressListener());
+ assertTrue(result != null);
+ if (result instanceof CompositeResult)
+ {
+ CompositeResult r = (CompositeResult)result;
+ // Check each of the subresults
+ for (CompositeResult.Entry e : ((CompositeResult) result).getResultEntries())
+ {
+ IResult r2 = e.getResult();
+ assertNotNull(r2);
+ // Check the trees have some selected rows and some are expanded
+ if (r2 instanceof IResultTree)
+ {
+ assertNotNull(e.getName());
+ IResultTree rt = (IResultTree)r2;
+ assertThat(rt.getElements().size(), greaterThan(0));
+ int selected = 0;
+ int expanded = 0;
+ for (Object o : rt.getElements())
+ {
+ if (rt instanceof ISelectionProvider)
+ {
+ ISelectionProvider ss = (ISelectionProvider)rt;
+ if (ss.isSelected(o))
+ ++selected;
+ if (ss.isExpanded(o))
+ ++expanded;
+ }
+ if (!rt.hasChildren(o))
+ break;
+ while (rt.hasChildren(o))
+ {
+ if (rt instanceof ISelectionProvider)
+ {
+ ISelectionProvider ss = (ISelectionProvider)rt;
+ if (ss.isSelected(o))
+ ++selected;
+ if (ss.isExpanded(o))
+ ++expanded;
+ }
+ // Has children, but zero of them?
+ if (rt.getChildren(o).size() == 0)
+ break;
+ o = rt.getChildren(o).get(0);
+ }
+ }
+ assertThat("selected", selected, greaterThan(0));
+ assertThat("expanded", expanded, greaterThan(0));
+ }
+ }
+ }
+ }
+
@Test
public void testMethods() throws SnapshotException
{

Back to the top