Bug 1081388: Add missing @Override annotations. r=rnewman
authorChris Kitching <chriskitching@linux.com>
Sun, 12 Oct 2014 03:04:39 +0100
changeset 209995 6c618ccad72e438a1f8562d7118bfba404ee8573
parent 209994 25b2da75efc60899bbc6970f404882adc03d1746
child 209996 42758a959e470994cf11d4c68c422086740c4189
push id1
push userroot
push dateMon, 20 Oct 2014 17:29:22 +0000
reviewersrnewman
bugs1081388
milestone35.0a1
Bug 1081388: Add missing @Override annotations. r=rnewman
mobile/android/base/background/common/log/writers/AndroidLevelCachingLogWriter.java
mobile/android/base/background/common/log/writers/AndroidLogWriter.java
mobile/android/base/background/common/log/writers/LevelFilteringLogWriter.java
mobile/android/base/background/common/log/writers/PrintLogWriter.java
mobile/android/base/background/common/log/writers/SimpleTagLogWriter.java
mobile/android/base/background/common/log/writers/StringLogWriter.java
mobile/android/base/background/fxa/QuickPasswordStretcher.java
mobile/android/base/background/healthreport/HealthReportDatabaseStorage.java
mobile/android/base/background/healthreport/prune/PrunePolicyDatabaseStorage.java
mobile/android/base/sync/CredentialException.java
mobile/android/base/sync/JSONRecordFetcher.java
mobile/android/base/sync/MetaGlobal.java
mobile/android/base/sync/SyncConfiguration.java
mobile/android/base/sync/middleware/Crypto5MiddlewareRepository.java
mobile/android/base/sync/middleware/MiddlewareRepositorySession.java
mobile/android/base/sync/repositories/android/AndroidBrowserRepository.java
mobile/android/base/sync/repositories/android/CachedSQLiteOpenHelper.java
mobile/android/base/sync/setup/activities/AccountActivity.java
mobile/android/base/sync/stage/AbstractNonRepositorySyncStage.java
mobile/android/base/sync/synchronizer/ServerLocalSynchronizerSession.java
mobile/android/base/sync/synchronizer/SynchronizerSession.java
--- a/mobile/android/base/background/common/log/writers/AndroidLevelCachingLogWriter.java
+++ b/mobile/android/base/background/common/log/writers/AndroidLevelCachingLogWriter.java
@@ -85,42 +85,48 @@ public class AndroidLevelCachingLogWrite
     if (out != null) {
       return out.booleanValue();
     }
     out = Log.isLoggable(logTag, Log.VERBOSE);
     isVerboseLoggable.put(logTag, out);
     return out;
   }
 
+  @Override
   public void error(String tag, String message, Throwable error) {
     if (shouldLogError(tag)) {
       inner.error(tag, message, error);
     }
   }
 
+  @Override
   public void warn(String tag, String message, Throwable error) {
     if (shouldLogWarn(tag)) {
       inner.warn(tag, message, error);
     }
   }
 
+  @Override
   public void info(String tag, String message, Throwable error) {
     if (shouldLogInfo(tag)) {
       inner.info(tag, message, error);
     }
   }
 
+  @Override
   public void debug(String tag, String message, Throwable error) {
     if (shouldLogDebug(tag)) {
       inner.debug(tag, message, error);
     }
   }
 
+  @Override
   public void trace(String tag, String message, Throwable error) {
     if (shouldLogVerbose(tag)) {
       inner.trace(tag, message, error);
     }
   }
 
+  @Override
   public void close() {
     inner.close();
   }
 }
--- a/mobile/android/base/background/common/log/writers/AndroidLogWriter.java
+++ b/mobile/android/base/background/common/log/writers/AndroidLogWriter.java
@@ -10,31 +10,37 @@ import android.util.Log;
  * Log to the Android log.
  */
 public class AndroidLogWriter extends LogWriter {
   @Override
   public boolean shouldLogVerbose(String logTag) {
     return true;
   }
 
+  @Override
   public void error(String tag, String message, Throwable error) {
     Log.e(tag, message, error);
   }
 
+  @Override
   public void warn(String tag, String message, Throwable error) {
     Log.w(tag, message, error);
   }
 
+  @Override
   public void info(String tag, String message, Throwable error) {
     Log.i(tag, message, error);
   }
 
+  @Override
   public void debug(String tag, String message, Throwable error) {
     Log.d(tag, message, error);
   }
 
+  @Override
   public void trace(String tag, String message, Throwable error) {
     Log.v(tag, message, error);
   }
 
+  @Override
   public void close() {
   }
 }
--- a/mobile/android/base/background/common/log/writers/LevelFilteringLogWriter.java
+++ b/mobile/android/base/background/common/log/writers/LevelFilteringLogWriter.java
@@ -15,16 +15,17 @@ public class LevelFilteringLogWriter ext
   protected final LogWriter inner;
   protected final int logLevel;
 
   public LevelFilteringLogWriter(int logLevel, LogWriter inner) {
     this.inner = inner;
     this.logLevel = logLevel;
   }
 
+  @Override
   public void close() {
     inner.close();
   }
 
   @Override
   public void error(String tag, String message, Throwable error) {
     if (logLevel <= Log.ERROR) {
       inner.error(tag, message, error);
--- a/mobile/android/base/background/common/log/writers/PrintLogWriter.java
+++ b/mobile/android/base/background/common/log/writers/PrintLogWriter.java
@@ -59,16 +59,17 @@ public class PrintLogWriter extends LogW
     log(tag, VERBOSE + message, error);
   }
 
   @Override
   public boolean shouldLogVerbose(String tag) {
     return true;
   }
 
+  @Override
   public void close() {
     if (closed) {
       return;
     }
     if (pw != null) {
       pw.close();
     }
     closed = true;
--- a/mobile/android/base/background/common/log/writers/SimpleTagLogWriter.java
+++ b/mobile/android/base/background/common/log/writers/SimpleTagLogWriter.java
@@ -9,12 +9,13 @@ package org.mozilla.gecko.background.com
  */
 public class SimpleTagLogWriter extends TagLogWriter {
   final String tag;
   public SimpleTagLogWriter(String tag, LogWriter inner) {
     super(inner);
     this.tag = tag;
   }
 
+  @Override
   protected String getMainTag() {
     return tag;
   }
 }
--- a/mobile/android/base/background/common/log/writers/StringLogWriter.java
+++ b/mobile/android/base/background/common/log/writers/StringLogWriter.java
@@ -20,32 +20,38 @@ public class StringLogWriter extends Log
     return sw.toString();
   }
 
   @Override
   public boolean shouldLogVerbose(String tag) {
     return true;
   }
 
+  @Override
   public void error(String tag, String message, Throwable error) {
     inner.error(tag, message, error);
   }
 
+  @Override
   public void warn(String tag, String message, Throwable error) {
     inner.warn(tag, message, error);
   }
 
+  @Override
   public void info(String tag, String message, Throwable error) {
     inner.info(tag, message, error);
   }
 
+  @Override
   public void debug(String tag, String message, Throwable error) {
     inner.debug(tag, message, error);
   }
 
+  @Override
   public void trace(String tag, String message, Throwable error) {
     inner.trace(tag, message, error);
   }
 
+  @Override
   public void close() {
     inner.close();
   }
 }
--- a/mobile/android/base/background/fxa/QuickPasswordStretcher.java
+++ b/mobile/android/base/background/fxa/QuickPasswordStretcher.java
@@ -14,16 +14,17 @@ import org.mozilla.gecko.sync.Utils;
 public class QuickPasswordStretcher implements PasswordStretcher {
   protected final String password;
   protected final Map<String, String> cache = new HashMap<String, String>();
 
   public QuickPasswordStretcher(String password) {
     this.password = password;
   }
 
+  @Override
   public synchronized byte[] getQuickStretchedPW(byte[] emailUTF8) throws UnsupportedEncodingException, GeneralSecurityException {
     if (emailUTF8 == null) {
       throw new IllegalArgumentException("emailUTF8 must not be null");
     }
     String key = Utils.byte2Hex(emailUTF8);
     if (!cache.containsKey(key)) {
       byte[] value = FxAccountUtils.generateQuickStretchedPW(emailUTF8, password.getBytes("UTF-8"));
       cache.put(key, Utils.byte2Hex(value));
--- a/mobile/android/base/background/healthreport/HealthReportDatabaseStorage.java
+++ b/mobile/android/base/background/healthreport/HealthReportDatabaseStorage.java
@@ -1366,20 +1366,22 @@ public class HealthReportDatabaseStorage
     final int start = this.getDay(time);
     final SQLiteDatabase db = this.helper.getReadableDatabase();
     final String dayString = Integer.toString(start, 10);
     return db.query("named_events", COLUMNS_DATE_ENVSTR_M_MV_F_VALUE,
                     "date >= ?", new String[] {dayString}, null, null,
                     "date, environment, measurement_name, measurement_version, field_name");
   }
 
+  @Override
   public int getEventCount() {
     return getRowCount("events");
   }
 
+  @Override
   public int getEnvironmentCount() {
     return getRowCount("environments");
   }
 
   private int getRowCount(String table) {
     // table should be parameterized, but SQL throws a compilation error if the table in unknown
     // in advance.
     return getIntFromQuery("SELECT COUNT(*) from " + table, null);
@@ -1389,16 +1391,17 @@ public class HealthReportDatabaseStorage
    * Deletes all environments, addons, and events from the database before the given time. If this
    * data does not have recorded dates but are no longer referenced by other fields, they are also
    * removed (with exception to the current environment).
    *
    * @param time milliseconds since epoch. Will be converted by {@link #getDay(long)}.
    * @param curEnv The ID of the current environment.
    * @return The number of environments and addon entries deleted.
    */
+  @Override
   public int deleteDataBefore(final long time, final int curEnv) {
     final SQLiteDatabase db = this.helper.getWritableDatabase();
     db.beginTransaction();
     int numRowsDeleted = 0;
     try {
       numRowsDeleted += deleteEnvAndEventsBefore(db, time, curEnv);
       numRowsDeleted += deleteOrphanedAddons(db);
       db.setTransactionSuccessful();
@@ -1593,16 +1596,17 @@ public class HealthReportDatabaseStorage
       db.endTransaction();
     }
   }
 
   /**
    * Prunes the given number of least-recently used environments. Note that orphaned environments
    * are not removed and the environment cache is cleared.
    */
+  @Override
   public void pruneEnvironments(final int numToPrune) {
     final SQLiteDatabase db = this.helper.getWritableDatabase();
     db.beginTransaction();
     try {
       db.delete("environments",
           "id in (SELECT env " +
           "       FROM events " +
           "       GROUP BY env " +
@@ -1620,16 +1624,17 @@ public class HealthReportDatabaseStorage
 
   /**
    * Prunes up to a maximum of the given number of the oldest events. While it is more correct to
    * prune the exact given amount, there is no unique identifier among events so we cannot be so
    * precise. Instead, we prune on date, deleting all events up to the day before our count of
    * events reaches the given maximum. Note that this technicality means this method cannot be
    * used to delete all events.
    */
+  @Override
   public void pruneEvents(final int maxNumToPrune) {
     final SQLiteDatabase db = this.helper.getWritableDatabase();
 
     final Cursor c = db.rawQuery(
         "SELECT MAX(date) " +
         "FROM (SELECT date " +
         "      FROM events " +
         "      ORDER BY date " +
--- a/mobile/android/base/background/healthreport/prune/PrunePolicyDatabaseStorage.java
+++ b/mobile/android/base/background/healthreport/prune/PrunePolicyDatabaseStorage.java
@@ -36,53 +36,60 @@ public class PrunePolicyDatabaseStorage 
   public PrunePolicyDatabaseStorage(final Context context, final String profilePath) {
     this.context = context;
     this.profilePath = profilePath;
     this.config = new AndroidConfigurationProvider(context);
 
     this.currentEnvironmentID = -1;
   }
 
+  @Override
   public void pruneEvents(final int count) {
     getStorage().pruneEvents(count);
   }
 
+  @Override
   public void pruneEnvironments(final int count) {
     getStorage().pruneEnvironments(count);
 
     // Re-populate the DB and environment cache with the current environment in the unlikely event
     // that it was deleted.
     this.currentEnvironmentID = -1;
     getCurrentEnvironmentID();
   }
 
   /**
    * Deletes data recorded before the given time. Note that if this method fails to retrieve the
    * current environment from the profile cache, it will not delete data so be sure to prune by
    * other methods (e.g. {@link pruneEvents}) as well.
    */
+  @Override
   public int deleteDataBefore(final long time) {
     return getStorage().deleteDataBefore(time, getCurrentEnvironmentID());
   }
 
+  @Override
   public void cleanup() {
     final HealthReportDatabaseStorage storage = getStorage();
     // The change to auto_vacuum will only take affect after a vacuum.
     storage.disableAutoVacuuming();
     storage.vacuum();
   }
 
+  @Override
   public int getEventCount() {
     return getStorage().getEventCount();
   }
 
+  @Override
   public int getEnvironmentCount() {
     return getStorage().getEnvironmentCount();
   }
 
+  @Override
   public void close() {
     if (client != null) {
       client.release();
       client = null;
     }
   }
 
   /**
--- a/mobile/android/base/sync/CredentialException.java
+++ b/mobile/android/base/sync/CredentialException.java
@@ -16,16 +16,17 @@ public abstract class CredentialExceptio
   public CredentialException() {
     super();
   }
 
   public CredentialException(final Throwable e) {
     super(e);
   }
 
+  @Override
   public void updateStats(GlobalSession globalSession, SyncResult syncResult) {
     syncResult.stats.numAuthExceptions += 1;
   }
 
   /**
    * No credentials at all.
    */
   public static class MissingAllCredentialsException extends CredentialException {
--- a/mobile/android/base/sync/JSONRecordFetcher.java
+++ b/mobile/android/base/sync/JSONRecordFetcher.java
@@ -41,20 +41,22 @@ public class JSONRecordFetcher {
   private class JSONFetchHandler implements SyncStorageRequestDelegate {
 
     // SyncStorageRequestDelegate methods for fetching.
     @Override
     public AuthHeaderProvider getAuthHeaderProvider() {
       return authHeaderProvider;
     }
 
+    @Override
     public String ifUnmodifiedSince() {
       return null;
     }
 
+    @Override
     public void handleRequestSuccess(SyncStorageResponse response) {
       if (response.wasSuccessful()) {
         try {
           delegate.handleSuccess(response.jsonObjectBody());
         } catch (Exception e) {
           handleRequestError(e);
         }
         return;
--- a/mobile/android/base/sync/MetaGlobal.java
+++ b/mobile/android/base/sync/MetaGlobal.java
@@ -320,20 +320,22 @@ public class MetaGlobal implements SyncS
     return null;
   }
 
   @Override
   public AuthHeaderProvider getAuthHeaderProvider() {
     return authHeaderProvider;
   }
 
+  @Override
   public String ifUnmodifiedSince() {
     return null;
   }
 
+  @Override
   public void handleRequestSuccess(SyncStorageResponse response) {
     if (this.isUploading) {
       this.handleUploadSuccess(response);
     } else {
       this.handleDownloadSuccess(response);
     }
   }
 
@@ -350,20 +352,22 @@ public class MetaGlobal implements SyncS
       } catch (Exception e) {
         this.callback.handleError(e);
       }
       return;
     }
     this.callback.handleFailure(response);
   }
 
+  @Override
   public void handleRequestFailure(SyncStorageResponse response) {
     if (response.getStatusCode() == 404) {
       this.callback.handleMissing(this, response);
       return;
     }
     this.callback.handleFailure(response);
   }
 
+  @Override
   public void handleRequestError(Exception e) {
     this.callback.handleError(e);
   }
 }
--- a/mobile/android/base/sync/SyncConfiguration.java
+++ b/mobile/android/base/sync/SyncConfiguration.java
@@ -32,16 +32,17 @@ public class SyncConfiguration {
     public EditorBranch(SyncConfiguration config, String prefix) {
       if (!prefix.endsWith(".")) {
         throw new IllegalArgumentException("No trailing period in prefix.");
       }
       this.prefix = prefix;
       this.editor = config.getEditor();
     }
 
+    @Override
     public void apply() {
       // Android <=r8 SharedPreferences.Editor does not contain apply() for overriding.
       this.editor.commit();
     }
 
     @Override
     public Editor clear() {
       this.editor = this.editor.clear();
@@ -80,16 +81,17 @@ public class SyncConfiguration {
     @Override
     public Editor putString(String key, String value) {
       this.editor = this.editor.putString(prefix + key, value);
       return this;
     }
 
     // Not marking as Override, because Android <= 10 doesn't have
     // putStringSet. Neither can we implement it.
+    @Override
     public Editor putStringSet(String key, Set<String> value) {
       throw new RuntimeException("putStringSet not available.");
     }
 
     @Override
     public Editor remove(String key) {
       this.editor = this.editor.remove(prefix + key);
       return this;
@@ -155,16 +157,17 @@ public class SyncConfiguration {
 
     @Override
     public String getString(String key, String defValue) {
       return config.getPrefs().getString(prefix + key, defValue);
     }
 
     // Not marking as Override, because Android <= 10 doesn't have
     // getStringSet. Neither can we implement it.
+    @Override
     public Set<String> getStringSet(String key, Set<String> defValue) {
       throw new RuntimeException("getStringSet not available.");
     }
 
     @Override
     public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
       config.getPrefs().registerOnSharedPreferenceChangeListener(listener);
     }
--- a/mobile/android/base/sync/middleware/Crypto5MiddlewareRepository.java
+++ b/mobile/android/base/sync/middleware/Crypto5MiddlewareRepository.java
@@ -28,16 +28,18 @@ public class Crypto5MiddlewareRepository
   public class Crypto5MiddlewareRepositorySessionCreationDelegate extends MiddlewareRepository.SessionCreationDelegate {
     private final Crypto5MiddlewareRepository repository;
     private final RepositorySessionCreationDelegate outerDelegate;
 
     public Crypto5MiddlewareRepositorySessionCreationDelegate(Crypto5MiddlewareRepository repository, RepositorySessionCreationDelegate outerDelegate) {
       this.repository = repository;
       this.outerDelegate = outerDelegate;
     }
+
+    @Override
     public void onSessionCreateFailed(Exception ex) {
       this.outerDelegate.onSessionCreateFailed(ex);
     }
 
     @Override
     public void onSessionCreated(RepositorySession session) {
       // Do some work, then report success with the wrapping session.
       Crypto5MiddlewareRepositorySession cryptoSession;
--- a/mobile/android/base/sync/middleware/MiddlewareRepositorySession.java
+++ b/mobile/android/base/sync/middleware/MiddlewareRepositorySession.java
@@ -70,16 +70,17 @@ public abstract class MiddlewareReposito
         @Override
         public RepositorySessionBeginDelegate deferredBeginDelegate(ExecutorService executor) {
           return this;
         }
       };
     }
   }
 
+  @Override
   public void begin(RepositorySessionBeginDelegate delegate) throws InvalidSessionTransitionException {
     inner.begin(new MiddlewareRepositorySessionBeginDelegate(this, delegate));
   }
 
   public class MiddlewareRepositorySessionFinishDelegate implements RepositorySessionFinishDelegate {
     private final MiddlewareRepositorySession outerSession;
     private final RepositorySessionFinishDelegate next;
 
--- a/mobile/android/base/sync/repositories/android/AndroidBrowserRepository.java
+++ b/mobile/android/base/sync/repositories/android/AndroidBrowserRepository.java
@@ -33,16 +33,17 @@ public abstract class AndroidBrowserRepo
     public CleanThread(RepositorySessionCleanDelegate delegate, Context context) {
       if (context == null) {
         throw new IllegalArgumentException("context is null");
       }
       this.delegate = delegate;
       this.context = context;
     }
 
+    @Override
     public void run() {
       try {
         getDataAccessor(context).purgeDeleted();
       } catch (NullCursorException e) {
         delegate.onCleanFailed(AndroidBrowserRepository.this, e);
         return;
       } catch (Exception e) {
         delegate.onCleanFailed(AndroidBrowserRepository.this, e);
@@ -62,14 +63,15 @@ public abstract class AndroidBrowserRepo
     public CreateSessionThread(RepositorySessionCreationDelegate delegate, Context context) {
       if (context == null) {
         throw new IllegalArgumentException("context is null.");
       }
       this.delegate = delegate;
       this.context = context;
     }
 
+    @Override
     public void run() {
       sessionCreator(delegate, context);
     }
   }
 
 }
--- a/mobile/android/base/sync/repositories/android/CachedSQLiteOpenHelper.java
+++ b/mobile/android/base/sync/repositories/android/CachedSQLiteOpenHelper.java
@@ -36,16 +36,17 @@ public abstract class CachedSQLiteOpenHe
 
   synchronized protected SQLiteDatabase getCachedWritableDatabase() {
     if (writableDatabase == null) {
       writableDatabase = this.getWritableDatabase();
     }
     return writableDatabase;
   }
 
+  @Override
   synchronized public void close() {
     if (readableDatabase != null) {
       readableDatabase.close();
       readableDatabase = null;
     }
     if (writableDatabase != null) {
       writableDatabase.close();
       writableDatabase = null;
--- a/mobile/android/base/sync/setup/activities/AccountActivity.java
+++ b/mobile/android/base/sync/setup/activities/AccountActivity.java
@@ -183,16 +183,17 @@ public class AccountActivity extends Acc
     clearErrors();
     displayVerifying(true);
     cancelButton.setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View v) {
         cancelConnectHandler(v);
         // Set cancel click handler to leave account setup.
         cancelButton.setOnClickListener(new OnClickListener() {
+          @Override
           public void onClick(View v) {
             cancelClickHandler(v);
           }
         });
       }
     });
 
     accountAuthenticator = new AccountAuthenticator(this);
--- a/mobile/android/base/sync/stage/AbstractNonRepositorySyncStage.java
+++ b/mobile/android/base/sync/stage/AbstractNonRepositorySyncStage.java
@@ -14,12 +14,13 @@ public abstract class AbstractNonReposit
     // Do nothing.
   }
 
   @Override
   protected void wipeLocal() {
     // Do nothing.
   }
 
+  @Override
   public Integer getStorageVersion() {
     return null; // Never include these engines in any meta/global records.
   }
 }
--- a/mobile/android/base/sync/synchronizer/ServerLocalSynchronizerSession.java
+++ b/mobile/android/base/sync/synchronizer/ServerLocalSynchronizerSession.java
@@ -22,16 +22,17 @@ import org.mozilla.gecko.sync.repositori
  */
 public class ServerLocalSynchronizerSession extends SynchronizerSession {
   protected static final String LOG_TAG = "ServLocSynchronizerSess";
 
   public ServerLocalSynchronizerSession(Synchronizer synchronizer, SynchronizerSessionDelegate delegate) {
     super(synchronizer, delegate);
   }
 
+  @Override
   public void onFirstFlowCompleted(RecordsChannel recordsChannel, long fetchEnd, long storeEnd) {
     // Fetch failures always abort.
     int numRemoteFetchFailed = recordsChannel.getFetchFailureCount();
     if (numRemoteFetchFailed > 0) {
       final String message = "Got " + numRemoteFetchFailed + " failures fetching remote records!";
       Logger.warn(LOG_TAG, message + " Aborting session.");
       delegate.onSynchronizeFailed(this, new FetchFailedException(), message);
       return;
@@ -45,16 +46,17 @@ public class ServerLocalSynchronizerSess
       Logger.warn(LOG_TAG, message + " Ignoring local store failures and continuing synchronizer session.");
     } else {
       Logger.trace(LOG_TAG, "No failures storing local records.");
     }
 
     super.onFirstFlowCompleted(recordsChannel, fetchEnd, storeEnd);
   }
 
+  @Override
   public void onSecondFlowCompleted(RecordsChannel recordsChannel, long fetchEnd, long storeEnd) {
     // Fetch failures always abort.
     int numLocalFetchFailed = recordsChannel.getFetchFailureCount();
     if (numLocalFetchFailed > 0) {
       final String message = "Got " + numLocalFetchFailed + " failures fetching local records!";
       Logger.warn(LOG_TAG, message + " Aborting session.");
       delegate.onSynchronizeFailed(this, new FetchFailedException(), message);
       return;
--- a/mobile/android/base/sync/synchronizer/SynchronizerSession.java
+++ b/mobile/android/base/sync/synchronizer/SynchronizerSession.java
@@ -153,16 +153,17 @@ implements RecordsChannelDelegate,
     // TODO: failed record handling.
 
     // This is the *second* record channel to flow.
     // I, SynchronizerSession, am the delegate for the *second* flow.
     channelBToA = new RecordsChannel(this.sessionB, this.sessionA, this);
 
     // This is the delegate for the *first* flow.
     RecordsChannelDelegate channelAToBDelegate = new RecordsChannelDelegate() {
+      @Override
       public void onFlowCompleted(RecordsChannel recordsChannel, long fetchEnd, long storeEnd) {
         session.onFirstFlowCompleted(recordsChannel, fetchEnd, storeEnd);
       }
 
       @Override
       public void onFlowBeginFailed(RecordsChannel recordsChannel, Exception ex) {
         Logger.warn(LOG_TAG, "First RecordsChannel onFlowBeginFailed. Logging session error.", ex);
         session.delegate.onSynchronizeFailed(session, ex, "Failed to begin first flow.");