ctf: Make CtfStreamInputReader NonNullByDefault
authorMatthew Khouzam <matthew.khouzam@ericsson.com>
Thu, 27 Aug 2015 02:58:57 +0000 (22:58 -0400)
committerMatthew Khouzam <matthew.khouzam@ericsson.com>
Wed, 16 Sep 2015 21:11:17 +0000 (17:11 -0400)
Change-Id: Idb221d898e7b734fddcacc31e3868f5f43a0c01a
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/54647
Reviewed-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/trace/CTFStreamInputReaderTest.java
ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/trace/CTFStreamInputReader.java
ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/trace/CTFTraceReader.java
ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/internal/ctf/core/trace/StreamInputReaderTimestampComparator.java
ctf/org.eclipse.tracecompass.tmf.ctf.core/src/org/eclipse/tracecompass/internal/tmf/ctf/core/trace/iterator/CtfIterator.java

index 674ebece438b0e344f45203fb4de85712b7ea509..e48605d18260a34383f67c7d41b67519c0138d1c 100644 (file)
@@ -138,7 +138,9 @@ public class CTFStreamInputReaderTest {
      */
     @Test
     public void testGetCurrentPacketContext() {
-        ICompositeDefinition result = fixture.getCurrentEvent().getPacketContext();
+        EventDefinition currentEvent = fixture.getCurrentEvent();
+        assertNotNull(currentEvent);
+        ICompositeDefinition result = currentEvent.getPacketContext();
         assertNotNull(result);
     }
 
@@ -174,7 +176,9 @@ public class CTFStreamInputReaderTest {
     public void testGoToLastEvent2() throws CTFException {
         long timestamp = -1;
         while (fixture.readNextEvent().equals(CTFResponse.OK)) {
-            timestamp = fixture.getCurrentEvent().getTimestamp();
+            EventDefinition currentEvent = fixture.getCurrentEvent();
+            assertNotNull(currentEvent);
+            timestamp = currentEvent.getTimestamp();
         }
         long endTimestamp = goToEnd();
         assertEquals(0, timestamp - endTimestamp);
@@ -182,7 +186,9 @@ public class CTFStreamInputReaderTest {
 
     private long goToEnd() throws CTFException {
         fixture.goToLastEvent();
-        return fixture.getCurrentEvent().getTimestamp();
+        EventDefinition currentEvent = fixture.getCurrentEvent();
+        assertNotNull(currentEvent);
+        return currentEvent.getTimestamp();
     }
 
     /**
index 68bdf6b4875573b51c8e4778ce6a3f71bcc812c1..f658075b529dabc9e8d8918d8aa0ebc18da98e1c 100644 (file)
 
 package org.eclipse.tracecompass.ctf.core.trace;
 
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+
 import java.io.File;
 import java.io.IOException;
-import java.nio.ByteOrder;
 import java.nio.channels.FileChannel;
 import java.nio.file.StandardOpenOption;
 
-import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.common.core.NonNullUtils;
 import org.eclipse.tracecompass.ctf.core.CTFException;
 import org.eclipse.tracecompass.ctf.core.event.EventDefinition;
 import org.eclipse.tracecompass.ctf.core.event.IEventDeclaration;
@@ -34,6 +37,7 @@ import com.google.common.collect.ImmutableList;
  * @author Simon Marchi
  * @since 2.0
  */
+@NonNullByDefault
 public class CTFStreamInputReader implements AutoCloseable {
 
     // ------------------------------------------------------------------------
@@ -43,11 +47,11 @@ public class CTFStreamInputReader implements AutoCloseable {
     /**
      * The StreamInput we are reading.
      */
-    private final @NonNull File fFile;
+    private final File fFile;
 
-    private final @NonNull CTFStreamInput fStreamInput;
+    private final CTFStreamInput fStreamInput;
 
-    private final FileChannel fFileChannel;
+    private final @Nullable FileChannel fFileChannel;
 
     /**
      * The packet reader used to read packets from this trace file.
@@ -63,7 +67,7 @@ public class CTFStreamInputReader implements AutoCloseable {
      * Reference to the current event of this trace file (iow, the last on that
      * was read, the next one to be returned)
      */
-    private EventDefinition fCurrentEvent = null;
+    private @Nullable EventDefinition fCurrentEvent = null;
 
     private int fId;
 
@@ -84,9 +88,6 @@ public class CTFStreamInputReader implements AutoCloseable {
      *             If the file cannot be opened
      */
     public CTFStreamInputReader(CTFStreamInput streamInput) throws CTFException {
-        if (streamInput == null) {
-            throw new IllegalArgumentException("stream cannot be null"); //$NON-NLS-1$
-        }
         fStreamInput = streamInput;
         fFile = fStreamInput.getFile();
         try {
@@ -126,9 +127,7 @@ public class CTFStreamInputReader implements AutoCloseable {
         if (fFileChannel != null) {
             fFileChannel.close();
         }
-        if (fPacketReader != null) {
-            fPacketReader.close();
-        }
+        fPacketReader.close();
     }
 
     // ------------------------------------------------------------------------
@@ -141,19 +140,10 @@ public class CTFStreamInputReader implements AutoCloseable {
      * @return the current event in the stream, null if the stream is
      *         finished/empty/malformed
      */
-    public EventDefinition getCurrentEvent() {
+    public @Nullable EventDefinition getCurrentEvent() {
         return fCurrentEvent;
     }
 
-    /**
-     * Gets the byte order for a trace
-     *
-     * @return the trace byte order
-     */
-    public ByteOrder getByteOrder() {
-        return fStreamInput.getStream().getTrace().getByteOrder();
-    }
-
     /**
      * Gets the name of the stream (it's an id and a number)
      *
@@ -205,7 +195,7 @@ public class CTFStreamInputReader implements AutoCloseable {
      * @return Unmodifiable set with the event definitions
      */
     public Iterable<IEventDeclaration> getEventDeclarations() {
-        return ImmutableList.copyOf(fStreamInput.getStream().getEventDeclarations());
+        return checkNotNull(ImmutableList.copyOf(fStreamInput.getStream().getEventDeclarations()));
     }
 
     /**
@@ -232,7 +222,7 @@ public class CTFStreamInputReader implements AutoCloseable {
      *
      * @return the event context declaration of the stream
      */
-    public StructDeclaration getStreamEventContextDecl() {
+    public @Nullable StructDeclaration getStreamEventContextDecl() {
         return getStreamInput().getStream().getEventContextDecl();
     }
 
@@ -252,8 +242,7 @@ public class CTFStreamInputReader implements AutoCloseable {
          * Change packet if needed
          */
         if (!fPacketReader.hasMoreEvents()) {
-            final ICTFPacketDescriptor prevPacket = fPacketReader
-                    .getCurrentPacket();
+            final ICTFPacketDescriptor prevPacket = fPacketReader.getCurrentPacket();
             if (prevPacket != null || fLive) {
                 goToNextPacket();
             }
@@ -343,10 +332,10 @@ public class CTFStreamInputReader implements AutoCloseable {
          * timestamp.
          */
         readNextEvent();
-        boolean done = (this.getCurrentEvent() == null);
-        while (!done && (this.getCurrentEvent().getTimestamp() < timestamp)) {
+        EventDefinition currentEvent = getCurrentEvent();
+        while (currentEvent != null && (currentEvent.getTimestamp() < timestamp)) {
             readNextEvent();
-            done = (this.getCurrentEvent() == null);
+            currentEvent = getCurrentEvent();
             offset++;
         }
         return offset;
@@ -359,8 +348,7 @@ public class CTFStreamInputReader implements AutoCloseable {
      *             if an error occurs
      */
     private void gotoPacket(long timestamp) throws CTFException {
-        fPacketIndex = fStreamInput.getIndex().search(timestamp)
-                .previousIndex();
+        fPacketIndex = fStreamInput.getIndex().search(timestamp).previousIndex();
         /*
          * Switch to this packet.
          */
@@ -436,7 +424,7 @@ public class CTFStreamInputReader implements AutoCloseable {
      * @param currentEvent
      *            the event to set
      */
-    public void setCurrentEvent(EventDefinition currentEvent) {
+    public void setCurrentEvent(@Nullable EventDefinition currentEvent) {
         fCurrentEvent = currentEvent;
     }
 
@@ -447,7 +435,10 @@ public class CTFStreamInputReader implements AutoCloseable {
         return fPacketIndex;
     }
 
-    private ICTFPacketDescriptor getPacket() {
+    private @Nullable ICTFPacketDescriptor getPacket() {
+        if (getPacketIndex() >= fStreamInput.getIndex().size()) {
+            return null;
+        }
         return fStreamInput.getIndex().getElement(getPacketIndex());
     }
 
@@ -456,6 +447,7 @@ public class CTFStreamInputReader implements AutoCloseable {
      *
      * @return the file channel
      */
+    @Nullable
     FileChannel getFc() {
         return fFileChannel;
     }
@@ -478,7 +470,7 @@ public class CTFStreamInputReader implements AutoCloseable {
     }
 
     @Override
-    public boolean equals(Object obj) {
+    public boolean equals(@Nullable Object obj) {
         if (this == obj) {
             return true;
         }
@@ -498,7 +490,7 @@ public class CTFStreamInputReader implements AutoCloseable {
     @Override
     public String toString() {
         // this helps debugging
-        return fId + ' ' + fCurrentEvent.toString();
+        return fId + ' ' + NonNullUtils.nullToEmptyString(fCurrentEvent);
     }
 
 }
index 73a153f6a300f9bdd95811bf82ba164d2f76ec79..7e3987618693fe9ad58872ca0284cfbb1adb3771 100644 (file)
@@ -13,6 +13,8 @@
 
 package org.eclipse.tracecompass.ctf.core.trace;
 
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -55,8 +57,7 @@ public class CTFTraceReader implements AutoCloseable {
     /**
      * Vector of all the trace file readers.
      */
-    private final List<CTFStreamInputReader> fStreamInputReaders =
-            Collections.synchronizedList(new ArrayList<CTFStreamInputReader>());
+    private final List<CTFStreamInputReader> fStreamInputReaders = Collections.synchronizedList(new ArrayList<CTFStreamInputReader>());
 
     /**
      * Priority queue to order the trace file readers by timestamp.
@@ -115,8 +116,11 @@ public class CTFTraceReader implements AutoCloseable {
          */
         fStartTime = 0;
         if (hasMoreEvents()) {
-            fStartTime = getTopStream().getCurrentEvent().getTimestamp();
-            setEndTime(fStartTime);
+            EventDefinition currentEvent = getTopStream().getCurrentEvent();
+            if (currentEvent != null) {
+                fStartTime = currentEvent.getTimestamp();
+                setEndTime(fStartTime);
+            }
         }
     }
 
@@ -214,7 +218,7 @@ public class CTFTraceReader implements AutoCloseable {
                 /*
                  * Create a reader and add it to the group.
                  */
-                fStreamInputReaders.add(new CTFStreamInputReader(streamInput));
+                fStreamInputReaders.add(new CTFStreamInputReader(checkNotNull(streamInput)));
             }
         }
 
@@ -248,8 +252,7 @@ public class CTFTraceReader implements AutoCloseable {
                 /*
                  * Create a reader.
                  */
-                CTFStreamInputReader streamInputReader = new CTFStreamInputReader(
-                        streamInput);
+                CTFStreamInputReader streamInputReader = new CTFStreamInputReader(checkNotNull(streamInput));
 
                 /*
                  * Add it to the group.
@@ -365,14 +368,15 @@ public class CTFTraceReader implements AutoCloseable {
              * Add it back in the queue.
              */
             fPrio.add(top);
-            final long topEnd = fTrace.timestampCyclesToNanos(top.getCurrentEvent().getTimestamp());
+            /*
+             * We're in OK, there's a guaranteed top#getCurrentEvent() unless another
+             * thread does something bad.
+             */
+            EventDefinition currentEvent = checkNotNull(top.getCurrentEvent());
+            final long topEnd = fTrace.timestampCyclesToNanos(currentEvent.getTimestamp());
             setEndTime(Math.max(topEnd, getEndTime()));
             fEventCountPerTraceFile[top.getName()]++;
-
-            if (top.getCurrentEvent() != null) {
-                fEndTime = Math.max(top.getCurrentEvent().getTimestamp(),
-                        fEndTime);
-            }
+            fEndTime = Math.max(currentEvent.getTimestamp(), fEndTime);
             break;
         }
         case WAIT: {
index 731357293ac52ea81bcf8c10d3d8a6995e8748eb..47ce93e4741826d98cf1f700ed1d4be8930408de 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2014 Ericsson, Ecole Polytechnique de Montreal and others
+ * Copyright (c) 2011, 2015 Ericsson, Ecole Polytechnique de Montreal 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
@@ -12,6 +12,8 @@
 
 package org.eclipse.tracecompass.internal.ctf.core.trace;
 
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+
 import java.io.Serializable;
 import java.util.Comparator;
 
@@ -43,11 +45,11 @@ public class StreamInputReaderTimestampComparator implements
      */
     @Override
     public int compare(CTFStreamInputReader a, CTFStreamInputReader b) {
-        EventDefinition event_a = a.getCurrentEvent();
-        EventDefinition event_b = b.getCurrentEvent();
+        EventDefinition eventA = checkNotNull(a.getCurrentEvent());
+        EventDefinition eventB = checkNotNull(b.getCurrentEvent());
 
-        long ta = event_a.getTimestamp();
-        long tb = event_b.getTimestamp();
+        long ta = eventA.getTimestamp();
+        long tb = eventB.getTimestamp();
         return Utils.unsignedCompare(ta, tb);
     }
 
index 784ef49893b1e4188da8fb62322dc9660764cc3a..29d8d63c174732be2b06d3b373327c7cfbce0459 100644 (file)
@@ -16,6 +16,7 @@ package org.eclipse.tracecompass.internal.tmf.ctf.core.trace.iterator;
 import static org.eclipse.tracecompass.common.core.NonNullUtils.equalsNullable;
 
 import org.eclipse.tracecompass.ctf.core.CTFException;
+import org.eclipse.tracecompass.ctf.core.event.EventDefinition;
 import org.eclipse.tracecompass.ctf.core.trace.CTFStreamInputReader;
 import org.eclipse.tracecompass.ctf.core.trace.CTFTrace;
 import org.eclipse.tracecompass.ctf.core.trace.CTFTraceReader;
@@ -162,8 +163,11 @@ public class CtfIterator extends CTFTraceReader
     public synchronized long getCurrentTimestamp() {
         final CTFStreamInputReader top = super.getPrio().peek();
         if (top != null) {
-            long ts = top.getCurrentEvent().getTimestamp();
-            return fTrace.timestampCyclesToNanos(ts);
+            EventDefinition currentEvent = top.getCurrentEvent();
+            if (currentEvent != null) {
+                long ts = currentEvent.getTimestamp();
+                return fTrace.timestampCyclesToNanos(ts);
+            }
         }
         return 0;
     }
This page took 0.032119 seconds and 5 git commands to generate.