tmf: Look at the extra aspects when resolving int aspect
authorGeneviève Bastien <gbastien+lttng@versatic.net>
Wed, 31 May 2017 13:37:59 +0000 (09:37 -0400)
committerGenevieve Bastien <gbastien+lttng@versatic.net>
Thu, 1 Jun 2017 15:25:49 +0000 (11:25 -0400)
fixes bug 517543

Change-Id: I89c46730629880209e5f8743f196c89d49e57f88
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
Reviewed-on: https://git.eclipse.org/r/98327
Reviewed-by: Hudson CI
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Tested-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/TmfTraceUtilsTest.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTraceUtils.java

index 5638bb0670b73da2f4bbc9a95cec63c9ca58ca4e..8d7f4fb75ec75d8c1f72ef8a381caea20c5a7aab 100644 (file)
@@ -82,7 +82,7 @@ public class TmfTraceUtilsTest {
 
     }
 
-    private static class TestEventAspect implements ITmfEventAspect<Integer> {
+    private static class TestEventAspect implements ITmfEventAspect<@NonNull Integer> {
 
         public static final Integer RESOLVED_VALUE = 2;
         public static final @NonNull String ASPECT_NAME = "test";
@@ -229,6 +229,9 @@ public class TmfTraceUtilsTest {
         obj = TmfTraceUtils.resolveAspectOfNameForEvent(trace, TestEventAspect.ASPECT_NAME, event);
         assertNull(obj);
 
+        Integer val = TmfTraceUtils.resolveIntEventAspectOfClassForEvent(trace, TestEventAspect.class, event);
+        assertNull(val);
+
         // Register the aspect
         TmfTraceUtils.registerEventAspect(new TestEventAspect());
         // See that the aspect is resolved now
@@ -240,5 +243,10 @@ public class TmfTraceUtilsTest {
         obj = TmfTraceUtils.resolveAspectOfNameForEvent(trace, TestEventAspect.ASPECT_NAME, event);
         assertNotNull(obj);
         assertEquals(TestEventAspect.RESOLVED_VALUE, obj);
+
+        // See if it is resolved by Integer type as well
+        val = TmfTraceUtils.resolveIntEventAspectOfClassForEvent(trace, TestEventAspect.class, event);
+        assertNotNull(val);
+        assertEquals(TestEventAspect.RESOLVED_VALUE, val);
     }
 }
index 70fbd5a4dedef75fc9640b4ef449672b55c2a9ec..eb87bca0bb36fca1f65d4cef8b09fd0ad4e6f8e9 100644 (file)
@@ -211,12 +211,21 @@ public final class TmfTraceUtils {
      */
     public static <T extends ITmfEventAspect<Integer>> @Nullable Integer resolveIntEventAspectOfClassForEvent(
             ITmfTrace trace, Class<T> aspectClass, ITmfEvent event) {
-            return StreamUtils.getStream(trace.getEventAspects())
+            Integer value = StreamUtils.getStream(trace.getEventAspects())
                 .filter(aspect -> aspectClass.isAssignableFrom(aspect.getClass()))
                 /* Enforced by the T parameter bounding */
                 .map(aspect -> (Integer) aspect.resolve(event))
                 .filter(obj -> obj != null)
                 .findFirst().orElse(null);
+            if (value != null) {
+                return value;
+            }
+            // If the value is not found, look at the global aspects
+            return EXTRA_ASPECTS.stream()
+                    .filter(aspect -> aspectClass.isAssignableFrom(aspect.getClass()))
+                    .map(aspect -> (Integer) aspect.resolve(event))
+                    .filter(obj -> obj != null)
+                    .findFirst().orElse(null);
     }
 
     /**
This page took 0.025521 seconds and 5 git commands to generate.