Mkohm/detekt-hint

View on GitHub
reports/output-iosched.html

Summary

Maintainability
Test Coverage
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>detekt report</title>
    <style>
h2 {
  background-color: #666666;
  padding: 0.2em;
  color: #ffffff;
}
h3 {
  background-color:#f8dfdf;
  padding:0.5em;
}
.rule {
  background-color: #dddddd;
  padding: 0.3em;
  font-weight: bold;
}
.description {
  color:#000000;
  padding:0.3em;
}
.location {
  color: #690505;
  font-family: monospace;
  display: block;
}
.message {
  font-size: 0.8em;
  color: #444444;
  display: block;
  margin-top: 1pt;
}
.rule-container {
  border: 0.1em dashed #dddddd;
  padding: 0.1em;
  line-height: 1.5em;
  margin-bottom: 8px;
  margin-top: 8px;
}
pre {
  border: 1px solid #e0e0e0;
  overflow: scroll;
}
.lineno {
  color: #999999;
  background-color: #f0f0f0;
}
.error {
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AwCFR4T/3uLMgAAADxJREFUCNdNyLERQEAABMCjL4lQwIzcjErpguAL+C9AvgKJDbeD/PRpLdm35Hm+MU+cB+tCKaJW4L4YBy+CAiLJrFs9mgAAAABJRU5ErkJggg==) bottom repeat-x;
}
.exception {
  color: #b60808;
  display: inline-block;
  background-color: #ecdada;
  border-color: #b60808;
  border-radius: 10px;
  border: solid 2px;
  padding-left: 16px;
  padding-right: 16px;
  margin-bottom: 16px;
}
</style>
</head>
<body>

<h1>detekt report</h1>

<h2>Metrics</h2>

<div>
  <ul>
    <li>425 number of kt files</li>
    <li>83 number of packages</li>
    <li>620 number of classes</li>
    <li>1,771 number of functions</li>
    <li>2,363 number of properties</li>
  </ul>
</div>


<h2>Complexity Report</h2>

<div>
  <ul>
    <li>38,462 lines of code (loc)</li>
    <li>23,714 source lines of code (sloc)</li>
    <li>15,336 logical lines of code (lloc)</li>
    <li>9,594 comment lines of code (cloc)</li>
    <li>3,129 McCabe complexity (mcc)</li>
    <li>251 number of total code smells</li>
    <li>40% comment source ratio</li>
    <li>204 mcc per 1,000 lloc</li>
    <li>16 code smells per 1,000 lloc</li>
  </ul>
</div>


<h2>Findings</h2>
<div>Total: 251
  <h3>detekt-hint: 251</h3>
  <details id="InterfaceSegregationPrinciple" open="open">
    <summary class="rule-container"><span class="rule">InterfaceSegregationPrinciple: 58 </span><span class="description">This rule reports classes that violates the Interface Segregation Principle.</span></summary>
    <ul>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedAnnouncementViewBinders.kt:87:5</span><span class="message">bindViewHolder is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  84 </span>        )
<span class="lineno">  85 </span>    }
<span class="lineno">  86 </span>
<span class="lineno">  87 </span>    <span class="error">override fun bindViewHolder(model: LoadingIndicator, viewHolder: LoadingViewHolder) {}</span>
<span class="lineno">  88 </span>
<span class="lineno">  89 </span>    override fun getFeedItemType() = R.layout.item_feed_announcements_loading
<span class="lineno">  90 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedAnnouncementViewBinders.kt:111:5</span><span class="message">bindViewHolder is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 108 </span>        )
<span class="lineno"> 109 </span>    }
<span class="lineno"> 110 </span>
<span class="lineno"> 111 </span>    <span class="error">override fun bindViewHolder(model: AnnouncementsEmpty, viewHolder: EmptyViewHolder) {}</span>
<span class="lineno"> 112 </span>
<span class="lineno"> 113 </span>    override fun getFeedItemType() = R.layout.item_feed_announcements_empty
<span class="lineno"> 114 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedHeaderViewBinders.kt:53:5</span><span class="message">bindViewHolder is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  50 </span>        )
<span class="lineno">  51 </span>    }
<span class="lineno">  52 </span>
<span class="lineno">  53 </span>    <span class="error">override fun bindViewHolder(model: CountdownItem, viewHolder: CountdownViewHolder) {}</span>
<span class="lineno">  54 </span>
<span class="lineno">  55 </span>    override fun getFeedItemType() = R.layout.item_feed_countdown
<span class="lineno">  56 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/info/InfoFragment.kt:73:17</span><span class="message">onPageScrollStateChanged is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  70 </span>            // Analytics. Manually fire once for the loaded tab, then fire on tab change.
<span class="lineno">  71 </span>            trackInfoScreenView(0)
<span class="lineno">  72 </span>            viewpager.addOnPageChangeListener(object : OnPageChangeListener {
<span class="lineno">  73 </span>                <span class="error">override fun onPageScrollStateChanged(state: Int) {}</span>
<span class="lineno">  74 </span>                override fun onPageScrolled(position: Int, offset: Float, offsetPixels: Int) {}
<span class="lineno">  75 </span>                override fun onPageSelected(position: Int) {
<span class="lineno">  76 </span>                    trackInfoScreenView(position)
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/info/InfoFragment.kt:74:17</span><span class="message">onPageScrolled is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  71 </span>            trackInfoScreenView(0)
<span class="lineno">  72 </span>            viewpager.addOnPageChangeListener(object : OnPageChangeListener {
<span class="lineno">  73 </span>                override fun onPageScrollStateChanged(state: Int) {}
<span class="lineno">  74 </span>                <span class="error">override fun onPageScrolled(position: Int, offset: Float, offsetPixels: Int) {}</span>
<span class="lineno">  75 </span>                override fun onPageSelected(position: Int) {
<span class="lineno">  76 </span>                    trackInfoScreenView(position)
<span class="lineno">  77 </span>                }
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/util/GlideTargets.kt:32:5</span><span class="message">removeCallback is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  29 </span>        cb.onSizeReady(size, size)
<span class="lineno">  30 </span>    }
<span class="lineno">  31 </span>
<span class="lineno">  32 </span>    <span class="error">override fun removeCallback(cb: SizeReadyCallback) {}</span>
<span class="lineno">  33 </span>
<span class="lineno">  34 </span>    override fun onLoadStarted(placeholder: Drawable?) {
<span class="lineno">  35 </span>        icon = placeholder
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/widget/SimpleRatingBar.kt:54:13</span><span class="message">onStopTrackingTouch is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  51 </span>                }
<span class="lineno">  52 </span>            }
<span class="lineno">  53 </span>
<span class="lineno">  54 </span>            <span class="error">override fun onStopTrackingTouch(seekBar: SeekBar?) {</span>
<span class="lineno">  55 </span><span class="error">                // Do nothing</span>
<span class="lineno">  56 </span><span class="error">            }</span>
<span class="lineno">  57 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/widget/SimpleRatingBar.kt:74:5</span><span class="message">setOnSeekBarChangeListener is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  71 </span>        updateIndicator(progress)
<span class="lineno">  72 </span>    }
<span class="lineno">  73 </span>
<span class="lineno">  74 </span>    <span class="error">override fun setOnSeekBarChangeListener(l: OnSeekBarChangeListener?) {</span>
<span class="lineno">  75 </span><span class="error">        throw UnsupportedOperationException(&quot;Use setOnRateListener&quot;)</span>
<span class="lineno">  76 </span><span class="error">    }</span>
<span class="lineno">  77 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/staging/java/com/google/samples/apps/iosched/shared/data/login/datasources/StagingUserDataSources.kt:49:5</span><span class="message">setAnonymousValue is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class RegisteredUserDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  46 </span>        return result
<span class="lineno">  47 </span>    }
<span class="lineno">  48 </span>
<span class="lineno">  49 </span>    <span class="error">override fun setAnonymousValue() {</span>
<span class="lineno">  50 </span><span class="error">        // Noop</span>
<span class="lineno">  51 </span><span class="error">    }</span>
<span class="lineno">  52 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/staging/java/com/google/samples/apps/iosched/shared/data/login/datasources/StagingUserDataSources.kt:140:5</span><span class="message">clearListener is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class AuthStateUserDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 137 </span>        return _firebaseUser
<span class="lineno"> 138 </span>    }
<span class="lineno"> 139 </span>
<span class="lineno"> 140 </span>    <span class="error">override fun clearListener() {</span>
<span class="lineno"> 141 </span><span class="error">        // Noop</span>
<span class="lineno"> 142 </span><span class="error">    }</span>
<span class="lineno"> 143 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeAnalyticsHelper.kt:23:5</span><span class="message">sendScreenView is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class AnalyticsHelper` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.analytics.AnalyticsHelper
<span class="lineno">  21 </span>
<span class="lineno">  22 </span>class FakeAnalyticsHelper : AnalyticsHelper {
<span class="lineno">  23 </span>    <span class="error">override fun sendScreenView(screenName: String, activity: Activity) {}</span>
<span class="lineno">  24 </span>
<span class="lineno">  25 </span>    override fun logUiEvent(itemId: String, action: String) {}
<span class="lineno">  26 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeAnalyticsHelper.kt:25:5</span><span class="message">logUiEvent is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class AnalyticsHelper` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  22 </span>class FakeAnalyticsHelper : AnalyticsHelper {
<span class="lineno">  23 </span>    override fun sendScreenView(screenName: String, activity: Activity) {}
<span class="lineno">  24 </span>
<span class="lineno">  25 </span>    <span class="error">override fun logUiEvent(itemId: String, action: String) {}</span>
<span class="lineno">  26 </span>
<span class="lineno">  27 </span>    override fun setUserSignedIn(isSignedIn: Boolean) {}
<span class="lineno">  28 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeAnalyticsHelper.kt:27:5</span><span class="message">setUserSignedIn is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class AnalyticsHelper` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  24 </span>
<span class="lineno">  25 </span>    override fun logUiEvent(itemId: String, action: String) {}
<span class="lineno">  26 </span>
<span class="lineno">  27 </span>    <span class="error">override fun setUserSignedIn(isSignedIn: Boolean) {}</span>
<span class="lineno">  28 </span>
<span class="lineno">  29 </span>    override fun setUserRegistered(isRegistered: Boolean) {}
<span class="lineno">  30 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeAnalyticsHelper.kt:29:5</span><span class="message">setUserRegistered is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class AnalyticsHelper` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  26 </span>
<span class="lineno">  27 </span>    override fun setUserSignedIn(isSignedIn: Boolean) {}
<span class="lineno">  28 </span>
<span class="lineno">  29 </span>    <span class="error">override fun setUserRegistered(isRegistered: Boolean) {}</span>
<span class="lineno">  30 </span>}
<span class="lineno">  31 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeAppDatabase.kt:49:5</span><span class="message">clearAllTables is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  46 </span>        return Mockito.mock(InvalidationTracker::class.java)
<span class="lineno">  47 </span>    }
<span class="lineno">  48 </span>
<span class="lineno">  49 </span>    <span class="error">override fun clearAllTables() {}</span>
<span class="lineno">  50 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/feed/FeedViewModelTest.kt:72:9</span><span class="message">removeCallbacks is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  69 </span>
<span class="lineno">  70 </span>        override fun postDelayed(runnable: Runnable, millis: Long) = true
<span class="lineno">  71 </span>
<span class="lineno">  72 </span>        <span class="error">override fun removeCallbacks(runnable: Runnable) {}</span>
<span class="lineno">  73 </span>    }
<span class="lineno">  74 </span>
<span class="lineno">  75 </span>    private val defaultFeedRepository =
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/feed/FeedViewModelTest.kt:114:9</span><span class="message">execute is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 111 </span>    object FailingUseCase : LoadAnnouncementsUseCase(
<span class="lineno"> 112 </span>        DefaultFeedRepository(TestAnnouncementDataSource, TestMomentDataSource)
<span class="lineno"> 113 </span>    ) {
<span class="lineno"> 114 </span>        <span class="error">override fun execute(parameters: Instant): List&lt;Announcement&gt; {</span>
<span class="lineno"> 115 </span><span class="error">            throw Exception(&quot;Error!&quot;)</span>
<span class="lineno"> 116 </span><span class="error">        }</span>
<span class="lineno"> 117 </span>    }
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModelTest.kt:472:13</span><span class="message">execute is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 469 </span>     */
<span class="lineno"> 470 </span>    private fun createEventFiltersExceptionUseCase(): LoadEventFiltersUseCase {
<span class="lineno"> 471 </span>        return object : LoadEventFiltersUseCase(TagRepository(TestDataRepository)) {
<span class="lineno"> 472 </span>            <span class="error">override fun execute(parameters: UserSessionMatcher): List&lt;EventFilter&gt; {</span>
<span class="lineno"> 473 </span><span class="error">                throw Exception(&quot;Testing exception&quot;)</span>
<span class="lineno"> 474 </span><span class="error">            }</span>
<span class="lineno"> 475 </span>        }
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModelTest.kt:488:5</span><span class="message">listenToUserChanges is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class RegisteredUserDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 485 </span>
<span class="lineno"> 486 </span>class TestRegisteredUserDataSource(private val isRegistered: Result&lt;Boolean?&gt;) :
<span class="lineno"> 487 </span>    RegisteredUserDataSource {
<span class="lineno"> 488 </span>    <span class="error">override fun listenToUserChanges(userId: String) {}</span>
<span class="lineno"> 489 </span>
<span class="lineno"> 490 </span>    override fun observeResult(): LiveData&lt;Result&lt;Boolean?&gt;?&gt; {
<span class="lineno"> 491 </span>        return MutableLiveData&lt;Result&lt;Boolean?&gt;?&gt;().apply { value = isRegistered }
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModelTest.kt:494:5</span><span class="message">setAnonymousValue is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class RegisteredUserDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 491 </span>        return MutableLiveData&lt;Result&lt;Boolean?&gt;?&gt;().apply { value = isRegistered }
<span class="lineno"> 492 </span>    }
<span class="lineno"> 493 </span>
<span class="lineno"> 494 </span>    <span class="error">override fun setAnonymousValue() {}</span>
<span class="lineno"> 495 </span>}
<span class="lineno"> 496 </span>
<span class="lineno"> 497 </span>class TestAuthStateUserDataSource(
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModelTest.kt:500:5</span><span class="message">startListening is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class AuthStateUserDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 497 </span>class TestAuthStateUserDataSource(
<span class="lineno"> 498 </span>    private val user: Result&lt;AuthenticatedUserInfoBasic?&gt;?
<span class="lineno"> 499 </span>) : AuthStateUserDataSource {
<span class="lineno"> 500 </span>    <span class="error">override fun startListening() {}</span>
<span class="lineno"> 501 </span>
<span class="lineno"> 502 </span>    override fun getBasicUserInfo(): LiveData&lt;Result&lt;AuthenticatedUserInfoBasic?&gt;&gt; =
<span class="lineno"> 503 </span>        MutableLiveData&lt;Result&lt;AuthenticatedUserInfoBasic?&gt;&gt;().apply { value = user }
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModelTest.kt:505:5</span><span class="message">clearListener is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class AuthStateUserDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 502 </span>    override fun getBasicUserInfo(): LiveData&lt;Result&lt;AuthenticatedUserInfoBasic?&gt;&gt; =
<span class="lineno"> 503 </span>        MutableLiveData&lt;Result&lt;AuthenticatedUserInfoBasic?&gt;&gt;().apply { value = user }
<span class="lineno"> 504 </span>
<span class="lineno"> 505 </span>    <span class="error">override fun clearListener() {}</span>
<span class="lineno"> 506 </span>}
<span class="lineno"> 507 </span>
<span class="lineno"> 508 </span>class FakeObserveUserAuthStateUseCase(
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModelTest.kt:541:5</span><span class="message">getRemoteConferenceData is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class ConferenceDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 538 </span>}
<span class="lineno"> 539 </span>
<span class="lineno"> 540 </span>class BootstrapDataSourceSession3 : ConferenceDataSource {
<span class="lineno"> 541 </span>    <span class="error">override fun getRemoteConferenceData(): ConferenceData? {</span>
<span class="lineno"> 542 </span><span class="error">        throw NotImplementedError() // Not used</span>
<span class="lineno"> 543 </span><span class="error">    }</span>
<span class="lineno"> 544 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/TestUserEventDataSource.kt:101:5</span><span class="message">clearSingleEventSubscriptions is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class UserEventDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  98 </span>        return result
<span class="lineno">  99 </span>    }
<span class="lineno"> 100 </span>
<span class="lineno"> 101 </span>    <span class="error">override fun clearSingleEventSubscriptions() {}</span>
<span class="lineno"> 102 </span>
<span class="lineno"> 103 </span>    override fun getUserEvent(userId: String, eventId: SessionId): UserEvent? {
<span class="lineno"> 104 </span>        TODO(&quot;not implemented&quot;)
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/util/ConferenceStateLiveDataTest.kt:64:9</span><span class="message">removeCallbacks is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  61 </span>    private val fakeHandler = object : IOSchedHandler {
<span class="lineno">  62 </span>        override fun post(runnable: Runnable) = true
<span class="lineno">  63 </span>        override fun postDelayed(runnable: Runnable, millis: Long) = true
<span class="lineno">  64 </span>        <span class="error">override fun removeCallbacks(runnable: Runnable) {}</span>
<span class="lineno">  65 </span>    }
<span class="lineno">  66 </span>
<span class="lineno">  67 </span>    @Test
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/util/ConferenceStateLiveDataTest.kt:141:13</span><span class="message">removeCallbacks is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 138 </span>                return true
<span class="lineno"> 139 </span>            }
<span class="lineno"> 140 </span>
<span class="lineno"> 141 </span>            <span class="error">override fun removeCallbacks(runnable: Runnable) {}</span>
<span class="lineno"> 142 </span>        }
<span class="lineno"> 143 </span>
<span class="lineno"> 144 </span>        val conferenceStateLiveData =
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/BootstrapConferenceDataSource.kt:26:5</span><span class="message">getRemoteConferenceData is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  23 </span> * Loads bootstrap data file from resources and parses it.
<span class="lineno">  24 </span> */
<span class="lineno">  25 </span>object BootstrapConferenceDataSource : ConferenceDataSource {
<span class="lineno">  26 </span>    <span class="error">override fun getRemoteConferenceData(): ConferenceData? {</span>
<span class="lineno">  27 </span><span class="error">        throw Exception(&quot;Bootstrap data source doesn't have remote data&quot;)</span>
<span class="lineno">  28 </span><span class="error">    }</span>
<span class="lineno">  29 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/staging/java/com/google/samples/apps/iosched/shared/data/userevent/FakeUserEventDataSource.kt:128:5</span><span class="message">clearSingleEventSubscriptions is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 125 </span>        return userEvents.firstOrNull { it.id == eventId }
<span class="lineno"> 126 </span>    }
<span class="lineno"> 127 </span>
<span class="lineno"> 128 </span>    <span class="error">override fun clearSingleEventSubscriptions() {}</span>
<span class="lineno"> 129 </span>}
<span class="lineno"> 130 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/staging/java/com/google/samples/apps/iosched/shared/fcm/StagingTopicSubscriber.kt:20:5</span><span class="message">subscribeToScheduleUpdates is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class TopicSubscriber` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  17 </span>package com.google.samples.apps.iosched.shared.fcm
<span class="lineno">  18 </span>
<span class="lineno">  19 </span>class StagingTopicSubscriber : TopicSubscriber {
<span class="lineno">  20 </span>    <span class="error">override fun subscribeToScheduleUpdates() {</span>
<span class="lineno">  21 </span><span class="error">        // No-op</span>
<span class="lineno">  22 </span><span class="error">    }</span>
<span class="lineno">  23 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/staging/java/com/google/samples/apps/iosched/shared/fcm/StagingTopicSubscriber.kt:24:5</span><span class="message">subscribeToAttendeeUpdates is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class TopicSubscriber` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  21 </span>        // No-op
<span class="lineno">  22 </span>    }
<span class="lineno">  23 </span>
<span class="lineno">  24 </span>    <span class="error">override fun subscribeToAttendeeUpdates() {</span>
<span class="lineno">  25 </span><span class="error">        // No-op</span>
<span class="lineno">  26 </span><span class="error">    }</span>
<span class="lineno">  27 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/staging/java/com/google/samples/apps/iosched/shared/fcm/StagingTopicSubscriber.kt:28:5</span><span class="message">unsubscribeFromAttendeeUpdates is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class TopicSubscriber` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  25 </span>        // No-op
<span class="lineno">  26 </span>    }
<span class="lineno">  27 </span>
<span class="lineno">  28 </span>    <span class="error">override fun unsubscribeFromAttendeeUpdates() {</span>
<span class="lineno">  29 </span><span class="error">        // No-op</span>
<span class="lineno">  30 </span><span class="error">    }</span>
<span class="lineno">  31 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/data/ConferenceDataRepositoryTest.kt:186:5</span><span class="message">getRemoteConferenceData is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class ConferenceDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 183 </span>}
<span class="lineno"> 184 </span>
<span class="lineno"> 185 </span>class BootstrapDataSourceSession3 : ConferenceDataSource {
<span class="lineno"> 186 </span>    <span class="error">override fun getRemoteConferenceData(): ConferenceData? {</span>
<span class="lineno"> 187 </span><span class="error">        throw NotImplementedError() // Not used</span>
<span class="lineno"> 188 </span><span class="error">    }</span>
<span class="lineno"> 189 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/data/ConferenceDataRepositoryTest.kt:230:5</span><span class="message">getRemoteConferenceData is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class ConferenceDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 227 </span>}
<span class="lineno"> 228 </span>
<span class="lineno"> 229 </span>private class ThrowingDataSourceCacheSession2 : ConferenceDataSource {
<span class="lineno"> 230 </span>    <span class="error">override fun getRemoteConferenceData(): ConferenceData? {</span>
<span class="lineno"> 231 </span><span class="error">        throw IOException(&quot;Test&quot;)</span>
<span class="lineno"> 232 </span><span class="error">    }</span>
<span class="lineno"> 233 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/data/ConferenceDataRepositoryTest.kt:247:5</span><span class="message">getRemoteConferenceData is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class ConferenceDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 244 </span>}
<span class="lineno"> 245 </span>
<span class="lineno"> 246 </span>private class ThrowingDataSourceNoCache : ConferenceDataSource {
<span class="lineno"> 247 </span>    <span class="error">override fun getRemoteConferenceData(): ConferenceData? {</span>
<span class="lineno"> 248 </span><span class="error">        throw IOException(&quot;Test&quot;)</span>
<span class="lineno"> 249 </span><span class="error">    }</span>
<span class="lineno"> 250 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/data/signin/ObserveUserAuthStateUseCaseTest.kt:209:5</span><span class="message">setAnonymousValue is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class RegisteredUserDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 206 </span>        return result
<span class="lineno"> 207 </span>    }
<span class="lineno"> 208 </span>
<span class="lineno"> 209 </span>    <span class="error">override fun setAnonymousValue() {</span>
<span class="lineno"> 210 </span><span class="error">        // Noop</span>
<span class="lineno"> 211 </span><span class="error">    }</span>
<span class="lineno"> 212 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/data/signin/ObserveUserAuthStateUseCaseTest.kt:243:5</span><span class="message">clearListener is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class AuthStateUserDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 240 </span>        return _firebaseUser
<span class="lineno"> 241 </span>    }
<span class="lineno"> 242 </span>
<span class="lineno"> 243 </span>    <span class="error">override fun clearListener() {</span>
<span class="lineno"> 244 </span><span class="error">        // Noop</span>
<span class="lineno"> 245 </span><span class="error">    }</span>
<span class="lineno"> 246 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/feed/LoadAnnouncementsUseCaseTest.kt:90:5</span><span class="message">getAnnouncements is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  87 </span>
<span class="lineno">  88 </span>private val unsuccessfulFeedRepository = object : FeedRepository {
<span class="lineno">  89 </span>
<span class="lineno">  90 </span>    <span class="error">override fun getAnnouncements(): List&lt;Announcement&gt; {</span>
<span class="lineno">  91 </span><span class="error">        throw Exception(&quot;Error!&quot;)</span>
<span class="lineno">  92 </span><span class="error">    }</span>
<span class="lineno">  93 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/feed/LoadAnnouncementsUseCaseTest.kt:94:5</span><span class="message">getMoments is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  91 </span>        throw Exception(&quot;Error!&quot;)
<span class="lineno">  92 </span>    }
<span class="lineno">  93 </span>
<span class="lineno">  94 </span>    <span class="error">override fun getMoments(): List&lt;Moment&gt; {</span>
<span class="lineno">  95 </span><span class="error">        throw Exception(&quot;Error!&quot;)</span>
<span class="lineno">  96 </span><span class="error">    }</span>
<span class="lineno">  97 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/feed/LoadCurrentMomentUseCaseTest.kt:103:5</span><span class="message">getAnnouncements is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 100 </span>
<span class="lineno"> 101 </span>private val unsuccessfulFeedRepository = object : FeedRepository {
<span class="lineno"> 102 </span>
<span class="lineno"> 103 </span>    <span class="error">override fun getAnnouncements(): List&lt;Announcement&gt; {</span>
<span class="lineno"> 104 </span><span class="error">        throw Exception(&quot;Error!&quot;)</span>
<span class="lineno"> 105 </span><span class="error">    }</span>
<span class="lineno"> 106 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/feed/LoadCurrentMomentUseCaseTest.kt:107:5</span><span class="message">getMoments is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 104 </span>        throw Exception(&quot;Error!&quot;)
<span class="lineno"> 105 </span>    }
<span class="lineno"> 106 </span>
<span class="lineno"> 107 </span>    <span class="error">override fun getMoments(): List&lt;Moment&gt; {</span>
<span class="lineno"> 108 </span><span class="error">        throw Exception(&quot;Error!&quot;)</span>
<span class="lineno"> 109 </span><span class="error">    }</span>
<span class="lineno"> 110 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/repository/TestUserEventDataSource.kt:98:5</span><span class="message">clearSingleEventSubscriptions is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class UserEventDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  95 </span>        return result
<span class="lineno">  96 </span>    }
<span class="lineno">  97 </span>
<span class="lineno">  98 </span>    <span class="error">override fun clearSingleEventSubscriptions() {}</span>
<span class="lineno">  99 </span>
<span class="lineno"> 100 </span>    override fun getUserEvent(userId: String, eventId: SessionId): UserEvent? {
<span class="lineno"> 101 </span>        throw NotImplementedError()
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/repository/TestUserEventDataSource.kt:100:5</span><span class="message">getUserEvent is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up `class UserEventDataSource` into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  97 </span>
<span class="lineno">  98 </span>    override fun clearSingleEventSubscriptions() {}
<span class="lineno">  99 </span>
<span class="lineno"> 100 </span>    <span class="error">override fun getUserEvent(userId: String, eventId: SessionId): UserEvent? {</span>
<span class="lineno"> 101 </span><span class="error">        throw NotImplementedError()</span>
<span class="lineno"> 102 </span><span class="error">    }</span>
<span class="lineno"> 103 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadFilteredUserSessionsUseCaseTest.kt:226:5</span><span class="message">getSessions is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 223 </span>}
<span class="lineno"> 224 </span>
<span class="lineno"> 225 </span>object FailingSessionRepository : SessionRepository {
<span class="lineno"> 226 </span>    <span class="error">override fun getSessions(): List&lt;Session&gt; {</span>
<span class="lineno"> 227 </span><span class="error">        throw Exception(&quot;test&quot;)</span>
<span class="lineno"> 228 </span><span class="error">    }</span>
<span class="lineno"> 229 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadFilteredUserSessionsUseCaseTest.kt:230:5</span><span class="message">getSession is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 227 </span>        throw Exception(&quot;test&quot;)
<span class="lineno"> 228 </span>    }
<span class="lineno"> 229 </span>
<span class="lineno"> 230 </span>    <span class="error">override fun getSession(eventId: SessionId): Session {</span>
<span class="lineno"> 231 </span><span class="error">        throw Exception(&quot;test&quot;)</span>
<span class="lineno"> 232 </span><span class="error">    }</span>
<span class="lineno"> 233 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadFilteredUserSessionsUseCaseTest.kt:234:5</span><span class="message">getConferenceDays is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 231 </span>        throw Exception(&quot;test&quot;)
<span class="lineno"> 232 </span>    }
<span class="lineno"> 233 </span>
<span class="lineno"> 234 </span>    <span class="error">override fun getConferenceDays(): List&lt;ConferenceDay&gt; {</span>
<span class="lineno"> 235 </span><span class="error">        throw Exception(&quot;test&quot;)</span>
<span class="lineno"> 236 </span><span class="error">    }</span>
<span class="lineno"> 237 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/ReservationActionUseCaseTest.kt:166:5</span><span class="message">clearSingleEventSubscriptions is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 163 </span>        TODO(&quot;not implemented&quot;)
<span class="lineno"> 164 </span>    }
<span class="lineno"> 165 </span>
<span class="lineno"> 166 </span>    <span class="error">override fun clearSingleEventSubscriptions() {}</span>
<span class="lineno"> 167 </span>
<span class="lineno"> 168 </span>    override fun getConferenceDays(): List&lt;ConferenceDay&gt; {
<span class="lineno"> 169 </span>        TODO(&quot;not implemented&quot;)
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/ReservationActionUseCaseTest.kt:202:5</span><span class="message">changeReservation is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 199 </span>        TODO(&quot;not implemented&quot;)
<span class="lineno"> 200 </span>    }
<span class="lineno"> 201 </span>
<span class="lineno"> 202 </span>    <span class="error">override fun changeReservation(</span>
<span class="lineno"> 203 </span><span class="error">        userId: String,</span>
<span class="lineno"> 204 </span><span class="error">        sessionId: SessionId,</span>
<span class="lineno"> 205 </span><span class="error">        action: ReservationRequestAction</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/ReservationActionUseCaseTest.kt:222:5</span><span class="message">clearSingleEventSubscriptions is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 219 </span>        TODO(&quot;not implemented&quot;)
<span class="lineno"> 220 </span>    }
<span class="lineno"> 221 </span>
<span class="lineno"> 222 </span>    <span class="error">override fun clearSingleEventSubscriptions() {}</span>
<span class="lineno"> 223 </span>
<span class="lineno"> 224 </span>    override fun getConferenceDays(): List&lt;ConferenceDay&gt; {
<span class="lineno"> 225 </span>        TODO(&quot;not implemented&quot;)
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:129:5</span><span class="message">recordFeedbackSent is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 126 </span>        return result
<span class="lineno"> 127 </span>    }
<span class="lineno"> 128 </span>
<span class="lineno"> 129 </span>    <span class="error">override fun recordFeedbackSent(userId: String, userEvent: UserEvent): LiveData&lt;Result&lt;Unit&gt;&gt; {</span>
<span class="lineno"> 130 </span><span class="error">        throw NotImplementedError()</span>
<span class="lineno"> 131 </span><span class="error">    }</span>
<span class="lineno"> 132 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:133:5</span><span class="message">getObservableUserEvents is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 130 </span>        throw NotImplementedError()
<span class="lineno"> 131 </span>    }
<span class="lineno"> 132 </span>
<span class="lineno"> 133 </span>    <span class="error">override fun getObservableUserEvents(</span>
<span class="lineno"> 134 </span><span class="error">        userId: String?</span>
<span class="lineno"> 135 </span><span class="error">    ): LiveData&lt;Result&lt;ObservableUserEvents&gt;&gt; {</span>
<span class="lineno"> 136 </span><span class="error">        throw NotImplementedError()</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:139:5</span><span class="message">getObservableUserEvent is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 136 </span>        throw NotImplementedError()
<span class="lineno"> 137 </span>    }
<span class="lineno"> 138 </span>
<span class="lineno"> 139 </span>    <span class="error">override fun getObservableUserEvent(</span>
<span class="lineno"> 140 </span><span class="error">        userId: String?,</span>
<span class="lineno"> 141 </span><span class="error">        eventId: SessionId</span>
<span class="lineno"> 142 </span><span class="error">    ): LiveData&lt;Result&lt;LoadUserSessionUseCaseResult&gt;&gt; {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:146:5</span><span class="message">changeReservation is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 143 </span>        throw NotImplementedError()
<span class="lineno"> 144 </span>    }
<span class="lineno"> 145 </span>
<span class="lineno"> 146 </span>    <span class="error">override fun changeReservation(</span>
<span class="lineno"> 147 </span><span class="error">        userId: String,</span>
<span class="lineno"> 148 </span><span class="error">        sessionId: SessionId,</span>
<span class="lineno"> 149 </span><span class="error">        action: ReservationRequestAction</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:154:5</span><span class="message">getUserEvents is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 151 </span>        throw NotImplementedError()
<span class="lineno"> 152 </span>    }
<span class="lineno"> 153 </span>
<span class="lineno"> 154 </span>    <span class="error">override fun getUserEvents(userId: String?): List&lt;UserEvent&gt; {</span>
<span class="lineno"> 155 </span><span class="error">        throw NotImplementedError()</span>
<span class="lineno"> 156 </span><span class="error">    }</span>
<span class="lineno"> 157 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:158:5</span><span class="message">swapReservation is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 155 </span>        throw NotImplementedError()
<span class="lineno"> 156 </span>    }
<span class="lineno"> 157 </span>
<span class="lineno"> 158 </span>    <span class="error">override fun swapReservation(</span>
<span class="lineno"> 159 </span><span class="error">        userId: String,</span>
<span class="lineno"> 160 </span><span class="error">        fromId: String,</span>
<span class="lineno"> 161 </span><span class="error">        toId: String</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:166:5</span><span class="message">getUserSession is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 163 </span>        throw NotImplementedError()
<span class="lineno"> 164 </span>    }
<span class="lineno"> 165 </span>
<span class="lineno"> 166 </span>    <span class="error">override fun getUserSession(userId: String, sessionId: SessionId): UserSession {</span>
<span class="lineno"> 167 </span><span class="error">        throw NotImplementedError()</span>
<span class="lineno"> 168 </span><span class="error">    }</span>
<span class="lineno"> 169 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:170:5</span><span class="message">clearSingleEventSubscriptions is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 167 </span>        throw NotImplementedError()
<span class="lineno"> 168 </span>    }
<span class="lineno"> 169 </span>
<span class="lineno"> 170 </span>    <span class="error">override fun clearSingleEventSubscriptions() {}</span>
<span class="lineno"> 171 </span>
<span class="lineno"> 172 </span>    override fun getConferenceDays(): List&lt;ConferenceDay&gt; {
<span class="lineno"> 173 </span>        throw NotImplementedError()
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:172:5</span><span class="message">getConferenceDays is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno"> 169 </span>
<span class="lineno"> 170 </span>    override fun clearSingleEventSubscriptions() {}
<span class="lineno"> 171 </span>
<span class="lineno"> 172 </span>    <span class="error">override fun getConferenceDays(): List&lt;ConferenceDay&gt; {</span>
<span class="lineno"> 173 </span><span class="error">        throw NotImplementedError()</span>
<span class="lineno"> 174 </span><span class="error">    }</span>
<span class="lineno"> 175 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/test/util/FakeAppDatabase.kt:49:5</span><span class="message">clearAllTables is not implemented an may not be necessary. This is a possible violation of the interface segregation principle. Consider splitting up into smaller interfaces with a single responsibility.</span>
        <pre><code><span class="lineno">  46 </span>        return Mockito.mock(InvalidationTracker::class.java)
<span class="lineno">  47 </span>    }
<span class="lineno">  48 </span>
<span class="lineno">  49 </span>    <span class="error">override fun clearAllTables() {}</span>
<span class="lineno">  50 </span>}
</code></pre>
      </li>
    </ul>
  </details>
  <details id="LackOfCohesionMethods" open="open">
    <summary class="rule-container"><span class="rule">LackOfCohesionMethods: 68 </span><span class="description">This rule reports a file with low LCOM value.</span></summary>
    <ul>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/androidTest/java/com/google/samples/apps/iosched/tests/ui/AgendaTest.kt:36:1</span><span class="message">AgendaTest have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 3, number of references: 0</span>
        <pre><code><span class="lineno">  33 </span>import org.junit.Test
<span class="lineno">  34 </span>import org.junit.runner.RunWith
<span class="lineno">  35 </span>
<span class="lineno">  36 </span><span class="error">@RunWith(AndroidJUnit4::class)</span>
<span class="lineno">  37 </span><span class="error">class AgendaTest {</span>
<span class="lineno">  38 </span><span class="error"></span>
<span class="lineno">  39 </span><span class="error">    @get:Rule</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/androidTest/java/com/google/samples/apps/iosched/tests/ui/CodelabTest.kt:36:1</span><span class="message">CodelabTest have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 3, number of references: 0</span>
        <pre><code><span class="lineno">  33 </span>import org.junit.Test
<span class="lineno">  34 </span>import org.junit.runner.RunWith
<span class="lineno">  35 </span>
<span class="lineno">  36 </span><span class="error">@RunWith(AndroidJUnit4::class)</span>
<span class="lineno">  37 </span><span class="error">class CodelabTest {</span>
<span class="lineno">  38 </span><span class="error"></span>
<span class="lineno">  39 </span><span class="error">    @get:Rule</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/androidTest/java/com/google/samples/apps/iosched/tests/ui/HomeTest.kt:36:1</span><span class="message">HomeTest have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 3, number of references: 0</span>
        <pre><code><span class="lineno">  33 </span>import org.junit.Test
<span class="lineno">  34 </span>import org.junit.runner.RunWith
<span class="lineno">  35 </span>
<span class="lineno">  36 </span><span class="error">@RunWith(AndroidJUnit4::class)</span>
<span class="lineno">  37 </span><span class="error">class HomeTest {</span>
<span class="lineno">  38 </span><span class="error"></span>
<span class="lineno">  39 </span><span class="error">    @get:Rule</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/androidTest/java/com/google/samples/apps/iosched/tests/ui/MapTest.kt:36:1</span><span class="message">MapTest have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 3, number of references: 0</span>
        <pre><code><span class="lineno">  33 </span>import org.junit.Test
<span class="lineno">  34 </span>import org.junit.runner.RunWith
<span class="lineno">  35 </span>
<span class="lineno">  36 </span><span class="error">/**</span>
<span class="lineno">  37 </span><span class="error"> * Espresso tests for the Map screen.</span>
<span class="lineno">  38 </span><span class="error"> */</span>
<span class="lineno">  39 </span><span class="error">@RunWith(AndroidJUnit4::class)</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/androidTest/java/com/google/samples/apps/iosched/tests/ui/ScheduleTest.kt:50:1</span><span class="message">ScheduleTest have a too high LCOM value: 0.8888888888888888. Number of methods: 6, number of properties: 6, number of references: 4</span>
        <pre><code><span class="lineno">  47 </span>import org.junit.Test
<span class="lineno">  48 </span>import org.junit.runner.RunWith
<span class="lineno">  49 </span>
<span class="lineno">  50 </span><span class="error">/**</span>
<span class="lineno">  51 </span><span class="error"> * Basic Espresso tests for the schedule screen.</span>
<span class="lineno">  52 </span><span class="error"> */</span>
<span class="lineno">  53 </span><span class="error">@RunWith(AndroidJUnit4::class)</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/androidTest/java/com/google/samples/apps/iosched/tests/ui/SessionDetailTest.kt:41:1</span><span class="message">SessionDetailTest have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 4, number of references: 0</span>
        <pre><code><span class="lineno">  38 </span>import org.junit.Test
<span class="lineno">  39 </span>import org.junit.runner.RunWith
<span class="lineno">  40 </span>
<span class="lineno">  41 </span><span class="error">/**</span>
<span class="lineno">  42 </span><span class="error"> * Espresso tests for the details screen.</span>
<span class="lineno">  43 </span><span class="error"> *</span>
<span class="lineno">  44 </span><span class="error"> * TODO</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/MainApplication.kt:30:1</span><span class="message">MainApplication have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 1, number of references: 0</span>
        <pre><code><span class="lineno">  27 </span>import timber.log.Timber
<span class="lineno">  28 </span>import javax.inject.Inject
<span class="lineno">  29 </span>
<span class="lineno">  30 </span><span class="error">/**</span>
<span class="lineno">  31 </span><span class="error"> * Initialization of libraries.</span>
<span class="lineno">  32 </span><span class="error"> */</span>
<span class="lineno">  33 </span><span class="error">class MainApplication : DaggerApplication() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/MainActivity.kt:67:1</span><span class="message">MainActivity have a too high LCOM value: 0.8188405797101449. Number of methods: 6, number of properties: 23, number of references: 25</span>
        <pre><code><span class="lineno">  64 </span>import java.util.UUID
<span class="lineno">  65 </span>import javax.inject.Inject
<span class="lineno">  66 </span>
<span class="lineno">  67 </span><span class="error">class MainActivity : DaggerAppCompatActivity(), NavigationHost {</span>
<span class="lineno">  68 </span><span class="error"></span>
<span class="lineno">  69 </span><span class="error">    companion object {</span>
<span class="lineno">  70 </span><span class="error">        /** Key for an int extra defining the initial navigation target. */</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/codelabs/CodelabsFragment.kt:43:1</span><span class="message">CodelabsFragment have a too high LCOM value: 0.8571428571428572. Number of methods: 7, number of properties: 12, number of references: 12</span>
        <pre><code><span class="lineno">  40 </span>import javax.inject.Inject
<span class="lineno">  41 </span>import javax.inject.Named
<span class="lineno">  42 </span>
<span class="lineno">  43 </span><span class="error">class CodelabsFragment : MainNavigationFragment(), CodelabsActionsHandler {</span>
<span class="lineno">  44 </span><span class="error"></span>
<span class="lineno">  45 </span><span class="error">    companion object {</span>
<span class="lineno">  46 </span><span class="error">        private const val CODELABS_WEBSITE = &quot;https://codelabs.developers.google.com&quot;</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedAdapter.kt:58:1</span><span class="message">FeedItemViewBinder have a too high LCOM value: 0.8333333333333334. Number of methods: 6, number of properties: 1, number of references: 1</span>
        <pre><code><span class="lineno">  55 </span>    }
<span class="lineno">  56 </span>}
<span class="lineno">  57 </span>
<span class="lineno">  58 </span><span class="error">/** Encapsulates logic to create and bind a ViewHolder for a type of item in the Feed. */</span>
<span class="lineno">  59 </span><span class="error">abstract class FeedItemViewBinder&lt;M, in VH : ViewHolder&gt;(</span>
<span class="lineno">  60 </span><span class="error">    val modelClass: Class&lt;out M&gt;</span>
<span class="lineno">  61 </span><span class="error">) : DiffUtil.ItemCallback&lt;M&gt;() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedViewModel.kt:58:1</span><span class="message">FeedViewModel have a too high LCOM value: 0.8645833333333334. Number of methods: 8, number of properties: 24, number of references: 26</span>
        <pre><code><span class="lineno">  55 </span>import org.threeten.bp.ZonedDateTime
<span class="lineno">  56 </span>import javax.inject.Inject
<span class="lineno">  57 </span>
<span class="lineno">  58 </span><span class="error">/**</span>
<span class="lineno">  59 </span><span class="error"> * Loads data and exposes it to the view.</span>
<span class="lineno">  60 </span><span class="error"> * By annotating the constructor with [@Inject], Dagger will use that constructor when needing to</span>
<span class="lineno">  61 </span><span class="error"> * create the object, so defining a [@Provides] method for this class won't be needed.</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/info/InfoFragment.kt:37:1</span><span class="message">InfoFragment have a too high LCOM value: 0.84. Number of methods: 5, number of properties: 5, number of references: 4</span>
        <pre><code><span class="lineno">  34 </span>import com.google.samples.apps.iosched.util.doOnApplyWindowInsets
<span class="lineno">  35 </span>import javax.inject.Inject
<span class="lineno">  36 </span>
<span class="lineno">  37 </span><span class="error">class InfoFragment : MainNavigationFragment() {</span>
<span class="lineno">  38 </span><span class="error"></span>
<span class="lineno">  39 </span><span class="error">    @Inject lateinit var analyticsHelper: AnalyticsHelper</span>
<span class="lineno">  40 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/map/MapViewModel.kt:44:1</span><span class="message">MapViewModel have a too high LCOM value: 0.8434782608695652. Number of methods: 10, number of properties: 23, number of references: 36</span>
        <pre><code><span class="lineno">  41 </span>import com.google.samples.apps.iosched.widget.BottomSheetBehavior
<span class="lineno">  42 </span>import javax.inject.Inject
<span class="lineno">  43 </span>
<span class="lineno">  44 </span><span class="error">class MapViewModel @Inject constructor(</span>
<span class="lineno">  45 </span><span class="error">    private val loadGeoJsonFeaturesUseCase: LoadGeoJsonFeaturesUseCase,</span>
<span class="lineno">  46 </span><span class="error">    private val analyticsHelper: AnalyticsHelper,</span>
<span class="lineno">  47 </span><span class="error">    private val signInViewModelDelegate: SignInViewModelDelegate,</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/onboarding/OnboardingViewModel.kt:27:1</span><span class="message">OnboardingViewModel have a too high LCOM value: 0.8. Number of methods: 3, number of properties: 5, number of references: 3</span>
        <pre><code><span class="lineno">  24 </span>import com.google.samples.apps.iosched.ui.signin.SignInViewModelDelegate
<span class="lineno">  25 </span>import javax.inject.Inject
<span class="lineno">  26 </span>
<span class="lineno">  27 </span><span class="error">/**</span>
<span class="lineno">  28 </span><span class="error"> * Records that onboarding has been completed and navigates user onward.</span>
<span class="lineno">  29 </span><span class="error"> */</span>
<span class="lineno">  30 </span><span class="error">class OnboardingViewModel @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/reservation/RemoveReservationDialogFragment.kt:34:1</span><span class="message">RemoveReservationDialogFragment have a too high LCOM value: 0.8333333333333334. Number of methods: 3, number of properties: 6, number of references: 3</span>
        <pre><code><span class="lineno">  31 </span>import dagger.android.support.DaggerAppCompatDialogFragment
<span class="lineno">  32 </span>import javax.inject.Inject
<span class="lineno">  33 </span>
<span class="lineno">  34 </span><span class="error">/**</span>
<span class="lineno">  35 </span><span class="error"> * Dialog that confirms the user really wants to cancel their reservation</span>
<span class="lineno">  36 </span><span class="error"> */</span>
<span class="lineno">  37 </span><span class="error">class RemoveReservationDialogFragment : DaggerAppCompatDialogFragment() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/reservation/SwapReservationDialogFragment.kt:30:1</span><span class="message">SwapReservationDialogFragment have a too high LCOM value: 0.9285714285714286. Number of methods: 2, number of properties: 7, number of references: 1</span>
        <pre><code><span class="lineno">  27 </span>import dagger.android.support.DaggerAppCompatDialogFragment
<span class="lineno">  28 </span>import javax.inject.Inject
<span class="lineno">  29 </span>
<span class="lineno">  30 </span><span class="error">/**</span>
<span class="lineno">  31 </span><span class="error"> * Dialog that confirms the user wants to replace their reservations</span>
<span class="lineno">  32 </span><span class="error"> */</span>
<span class="lineno">  33 </span><span class="error">class SwapReservationDialogFragment : DaggerAppCompatDialogFragment() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/ScheduleUiHintsDialogFragment.kt:29:1</span><span class="message">ScheduleUiHintsDialogFragment have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 1, number of references: 0</span>
        <pre><code><span class="lineno">  26 </span>import dagger.android.support.DaggerAppCompatDialogFragment
<span class="lineno">  27 </span>import javax.inject.Inject
<span class="lineno">  28 </span>
<span class="lineno">  29 </span><span class="error">/**</span>
<span class="lineno">  30 </span><span class="error"> * Dialog that shows the hints for the schedule.</span>
<span class="lineno">  31 </span><span class="error"> */</span>
<span class="lineno">  32 </span><span class="error">class ScheduleUiHintsDialogFragment : DaggerAppCompatDialogFragment() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModel.kt:63:1</span><span class="message">ScheduleViewModel have a too high LCOM value: 0.8642857142857143. Number of methods: 10, number of properties: 42, number of references: 57</span>
        <pre><code><span class="lineno">  60 </span>import java.util.UUID
<span class="lineno">  61 </span>import javax.inject.Inject
<span class="lineno">  62 </span>
<span class="lineno">  63 </span><span class="error">/**</span>
<span class="lineno">  64 </span><span class="error"> * Loads data and exposes it to the view.</span>
<span class="lineno">  65 </span><span class="error"> * By annotating the constructor with [@Inject], Dagger will use that constructor when needing to</span>
<span class="lineno">  66 </span><span class="error"> * create the object, so defining a [@Provides] method for this class won't be needed.</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/filters/ScheduleFilterAdapter.kt:35:1</span><span class="message">ScheduleFilterAdapter have a too high LCOM value: 0.8571428571428572. Number of methods: 7, number of properties: 1, number of references: 1</span>
        <pre><code><span class="lineno">  32 </span>import com.google.samples.apps.iosched.ui.schedule.filters.EventFilter.EventFilterCategory.NONE
<span class="lineno">  33 </span>import com.google.samples.apps.iosched.ui.schedule.filters.EventFilter.TagFilter
<span class="lineno">  34 </span>
<span class="lineno">  35 </span><span class="error">/**</span>
<span class="lineno">  36 </span><span class="error"> * Adapter for the filters drawer</span>
<span class="lineno">  37 </span><span class="error"> */</span>
<span class="lineno">  38 </span><span class="error">class ScheduleFilterAdapter(val viewModel: ScheduleViewModel) :</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailViewModel.kt:70:1</span><span class="message">SessionDetailViewModel have a too high LCOM value: 0.8809523809523809. Number of methods: 12, number of properties: 42, number of references: 60</span>
        <pre><code><span class="lineno">  67 </span>private const val TEN_SECONDS = 10_000L
<span class="lineno">  68 </span>private const val SIXTY_SECONDS = 60_000L
<span class="lineno">  69 </span>
<span class="lineno">  70 </span><span class="error">/**</span>
<span class="lineno">  71 </span><span class="error"> * Loads [Session] data and exposes it to the session detail view.</span>
<span class="lineno">  72 </span><span class="error"> */</span>
<span class="lineno">  73 </span><span class="error">class SessionDetailViewModel @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/settings/SettingsViewModel.kt:38:1</span><span class="message">SettingsViewModel have a too high LCOM value: 0.8392857142857143. Number of methods: 7, number of properties: 16, number of references: 18</span>
        <pre><code><span class="lineno">  35 </span>import com.google.samples.apps.iosched.shared.util.map
<span class="lineno">  36 </span>import javax.inject.Inject
<span class="lineno">  37 </span>
<span class="lineno">  38 </span><span class="error">class SettingsViewModel @Inject constructor(</span>
<span class="lineno">  39 </span><span class="error">    val setTimeZoneUseCase: SetTimeZoneUseCase,</span>
<span class="lineno">  40 </span><span class="error">    getTimeZoneUseCase: GetTimeZoneUseCase,</span>
<span class="lineno">  41 </span><span class="error">    val notificationsPrefSaveActionUseCase: NotificationsPrefSaveActionUseCase,</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/signin/NotificationsPreferenceDialogFragment.kt:29:1</span><span class="message">NotificationsPreferenceDialogFragment have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 3, number of references: 0</span>
        <pre><code><span class="lineno">  26 </span>import dagger.android.support.DaggerAppCompatDialogFragment
<span class="lineno">  27 </span>import javax.inject.Inject
<span class="lineno">  28 </span>
<span class="lineno">  29 </span><span class="error">/**</span>
<span class="lineno">  30 </span><span class="error"> * Dialog that asks for the user's notifications preference.</span>
<span class="lineno">  31 </span><span class="error"> */</span>
<span class="lineno">  32 </span><span class="error">class NotificationsPreferenceDialogFragment : DaggerAppCompatDialogFragment() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/signin/SignInViewModel.kt:26:1</span><span class="message">SignInViewModel have a too high LCOM value: 0.8333333333333334. Number of methods: 3, number of properties: 2, number of references: 1</span>
        <pre><code><span class="lineno">  23 </span>import timber.log.Timber
<span class="lineno">  24 </span>import javax.inject.Inject
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">/**</span>
<span class="lineno">  27 </span><span class="error"> * ViewModel for *both* the sign in &amp; sign out dialogs.</span>
<span class="lineno">  28 </span><span class="error"> */</span>
<span class="lineno">  29 </span><span class="error">class SignInViewModel @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/util/CrashlyticsTree.kt:23:1</span><span class="message">CrashlyticsTree have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 3, number of references: 0</span>
        <pre><code><span class="lineno">  20 </span>import com.crashlytics.android.Crashlytics
<span class="lineno">  21 </span>import timber.log.Timber
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">class CrashlyticsTree : Timber.Tree() {</span>
<span class="lineno">  24 </span><span class="error"></span>
<span class="lineno">  25 </span><span class="error">    override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {</span>
<span class="lineno">  26 </span><span class="error">        if (priority == Log.VERBOSE || priority == Log.DEBUG || priority == Log.INFO) {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/util/FirebaseAnalyticsHelper.kt:33:1</span><span class="message">FirebaseAnalyticsHelper have a too high LCOM value: 0.825. Number of methods: 5, number of properties: 8, number of references: 7</span>
        <pre><code><span class="lineno">  30 </span>import com.google.samples.apps.iosched.ui.signin.SignInViewModelDelegate
<span class="lineno">  31 </span>import timber.log.Timber
<span class="lineno">  32 </span>
<span class="lineno">  33 </span><span class="error">/**</span>
<span class="lineno">  34 </span><span class="error"> * Firebase Analytics implementation of AnalyticsHelper</span>
<span class="lineno">  35 </span><span class="error"> */</span>
<span class="lineno">  36 </span><span class="error">class FirebaseAnalyticsHelper(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/widget/BottomSheetBehavior.kt:43:1</span><span class="message">BottomSheetBehavior have a too high LCOM value: 0.8571428571428572. Number of methods: 18, number of properties: 7, number of references: 18</span>
        <pre><code><span class="lineno">  40 </span>import java.lang.ref.WeakReference
<span class="lineno">  41 </span>import kotlin.math.absoluteValue
<span class="lineno">  42 </span>
<span class="lineno">  43 </span><span class="error">/**</span>
<span class="lineno">  44 </span><span class="error"> * Copy of material lib's BottomSheetBehavior that includes some bug fixes.</span>
<span class="lineno">  45 </span><span class="error"> */</span>
<span class="lineno">  46 </span><span class="error">// TODO remove when a fixed version in material lib is released.</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/widget/transition/RotateX.kt:29:1</span><span class="message">RotateX have a too high LCOM value: 1.0. Number of methods: 6, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  26 </span>import android.view.ViewGroup
<span class="lineno">  27 </span>import androidx.annotation.Keep
<span class="lineno">  28 </span>
<span class="lineno">  29 </span><span class="error">/**</span>
<span class="lineno">  30 </span><span class="error"> * A [Transition] which animates the rotation of a [View].</span>
<span class="lineno">  31 </span><span class="error"> */</span>
<span class="lineno">  32 </span><span class="error">class RotateX : Transition {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/staging/java/com/google/samples/apps/iosched/shared/data/login/datasources/StagingUserDataSources.kt:54:1</span><span class="message">StagingAuthenticatedUserInfo have a too high LCOM value: 0.85. Number of methods: 15, number of properties: 4, number of references: 9</span>
        <pre><code><span class="lineno">  51 </span>    }
<span class="lineno">  52 </span>}
<span class="lineno">  53 </span>
<span class="lineno">  54 </span><span class="error">/**</span>
<span class="lineno">  55 </span><span class="error"> * A configurable [AuthenticatedUserInfo] used for staging.</span>
<span class="lineno">  56 </span><span class="error"> *</span>
<span class="lineno">  57 </span><span class="error"> * @see [LoginModule]</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeEventActionsViewModelDelegate.kt:26:1</span><span class="message">FakeEventActionsViewModelDelegate have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 3, number of references: 0</span>
        <pre><code><span class="lineno">  23 </span>import com.google.samples.apps.iosched.ui.SnackbarMessage
<span class="lineno">  24 </span>import com.google.samples.apps.iosched.ui.sessioncommon.EventActionsViewModelDelegate
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">class FakeEventActionsViewModelDelegate : EventActionsViewModelDelegate {</span>
<span class="lineno">  27 </span><span class="error"></span>
<span class="lineno">  28 </span><span class="error">    override val navigateToEventAction = MutableLiveData&lt;Event&lt;SessionId&gt;&gt;()</span>
<span class="lineno">  29 </span><span class="error">    override val navigateToSignInDialogAction = MutableLiveData&lt;Event&lt;Unit&gt;&gt;()</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeSignInViewModelDelegate.kt:28:1</span><span class="message">FakeSignInViewModelDelegate have a too high LCOM value: 0.859375. Number of methods: 8, number of properties: 8, number of references: 9</span>
        <pre><code><span class="lineno">  25 </span>import com.nhaarman.mockito_kotlin.doReturn
<span class="lineno">  26 </span>import com.nhaarman.mockito_kotlin.mock
<span class="lineno">  27 </span>
<span class="lineno">  28 </span><span class="error">class FakeSignInViewModelDelegate : SignInViewModelDelegate {</span>
<span class="lineno">  29 </span><span class="error"></span>
<span class="lineno">  30 </span><span class="error">    override val currentUserInfo = MutableLiveData&lt;AuthenticatedUserInfo?&gt;()</span>
<span class="lineno">  31 </span><span class="error">    override val currentUserImageUri = MutableLiveData&lt;Uri?&gt;()</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/LaunchViewModelTest.kt:34:1</span><span class="message">LaunchViewModelTest have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  31 </span>import org.junit.Rule
<span class="lineno">  32 </span>import org.junit.Test
<span class="lineno">  33 </span>
<span class="lineno">  34 </span><span class="error">/**</span>
<span class="lineno">  35 </span><span class="error"> * Unit tests for the [LaunchViewModel].</span>
<span class="lineno">  36 </span><span class="error"> */</span>
<span class="lineno">  37 </span><span class="error">class LaunchViewModelTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/MainActivityViewModelTest.kt:42:1</span><span class="message">MainActivityViewModelTest have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  39 </span>import org.junit.Test
<span class="lineno">  40 </span>import org.mockito.Mockito.mock
<span class="lineno">  41 </span>
<span class="lineno">  42 </span><span class="error">class MainActivityViewModelTest {</span>
<span class="lineno">  43 </span><span class="error">    // Executes tasks in the Architecture Components in the same thread</span>
<span class="lineno">  44 </span><span class="error">    @get:Rule</span>
<span class="lineno">  45 </span><span class="error">    var instantTaskExecutorRule = InstantTaskExecutorRule()</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/feed/FeedViewModelTest.kt:54:1</span><span class="message">FeedViewModelTest have a too high LCOM value: 1.0. Number of methods: 3, number of properties: 5, number of references: 0</span>
        <pre><code><span class="lineno">  51 </span>import org.junit.Test
<span class="lineno">  52 </span>import org.threeten.bp.Instant
<span class="lineno">  53 </span>
<span class="lineno">  54 </span><span class="error">/**</span>
<span class="lineno">  55 </span><span class="error"> * Unit tests for the [FeedViewModel]</span>
<span class="lineno">  56 </span><span class="error"> */</span>
<span class="lineno">  57 </span><span class="error">class FeedViewModelTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/onboarding/OnboardingViewModelTest.kt:33:1</span><span class="message">OnboardingViewModelTest have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  30 </span>import org.junit.Rule
<span class="lineno">  31 </span>import org.junit.Test
<span class="lineno">  32 </span>
<span class="lineno">  33 </span><span class="error">/**</span>
<span class="lineno">  34 </span><span class="error"> * Unit tests for the [OnboardingViewModel].</span>
<span class="lineno">  35 </span><span class="error"> */</span>
<span class="lineno">  36 </span><span class="error">class OnboardingViewModelTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/MarkScheduleUiHintsShownUseCaseTest.kt:29:1</span><span class="message">MarkScheduleUiHintsShownUseCaseTest have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  26 </span>import org.junit.Rule
<span class="lineno">  27 </span>import org.junit.Test
<span class="lineno">  28 </span>
<span class="lineno">  29 </span><span class="error">/**</span>
<span class="lineno">  30 </span><span class="error"> * Unit tests for the [ScheduleUiHintsDialogViewModel].</span>
<span class="lineno">  31 </span><span class="error"> */</span>
<span class="lineno">  32 </span><span class="error">class MarkScheduleUiHintsShownUseCaseTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModelTest.kt:84:1</span><span class="message">ScheduleViewModelTest have a too high LCOM value: 1.0. Number of methods: 13, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  81 </span>import org.junit.Test
<span class="lineno">  82 </span>import org.mockito.Mockito.verify
<span class="lineno">  83 </span>
<span class="lineno">  84 </span><span class="error">/**</span>
<span class="lineno">  85 </span><span class="error"> * Unit tests for the [ScheduleViewModel].</span>
<span class="lineno">  86 </span><span class="error"> */</span>
<span class="lineno">  87 </span><span class="error">class ScheduleViewModelTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/SessionHeaderIndexerTest.kt:25:1</span><span class="message">SessionHeaderIndexerTest have a too high LCOM value: 1.0. Number of methods: 3, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  22 </span>import org.threeten.bp.ZoneId
<span class="lineno">  23 </span>import org.threeten.bp.ZonedDateTime
<span class="lineno">  24 </span>
<span class="lineno">  25 </span><span class="error">class SessionHeaderIndexerTest {</span>
<span class="lineno">  26 </span><span class="error">    companion object {</span>
<span class="lineno">  27 </span><span class="error">        val timeZone = &quot;America/Los_Angeles&quot;</span>
<span class="lineno">  28 </span><span class="error">        val startTimeString = &quot;2018-05-08T07:00:00-07:00[$timeZone]&quot;</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/TestUserEventDataSource.kt:37:1</span><span class="message">TestUserEventDataSource have a too high LCOM value: 0.8. Number of methods: 10, number of properties: 2, number of references: 4</span>
        <pre><code><span class="lineno">  34 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  35 </span>import com.google.samples.apps.iosched.test.data.TestData
<span class="lineno">  36 </span>
<span class="lineno">  37 </span><span class="error">class TestUserEventDataSource(</span>
<span class="lineno">  38 </span><span class="error">    private val userEventsResult: MutableLiveData&lt;UserEventsResult&gt; = MutableLiveData(),</span>
<span class="lineno">  39 </span><span class="error">    private val userEventResult: MutableLiveData&lt;UserEventResult&gt; = MutableLiveData()</span>
<span class="lineno">  40 </span><span class="error">) : UserEventDataSource {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/filters/LoadEventFiltersUseCaseTest.kt:34:1</span><span class="message">LoadEventFiltersUseCaseTest have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 1, number of references: 0</span>
        <pre><code><span class="lineno">  31 </span>import org.junit.Rule
<span class="lineno">  32 </span>import org.junit.Test
<span class="lineno">  33 </span>
<span class="lineno">  34 </span><span class="error">class LoadEventFiltersUseCaseTest {</span>
<span class="lineno">  35 </span><span class="error"></span>
<span class="lineno">  36 </span><span class="error">    @Rule</span>
<span class="lineno">  37 </span><span class="error">    @JvmField</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailViewModelTest.kt:77:1</span><span class="message">SessionDetailViewModelTest have a too high LCOM value: 0.8571428571428572. Number of methods: 12, number of properties: 7, number of references: 12</span>
        <pre><code><span class="lineno">  74 </span>import org.junit.Rule
<span class="lineno">  75 </span>import org.junit.Test
<span class="lineno">  76 </span>
<span class="lineno">  77 </span><span class="error">/**</span>
<span class="lineno">  78 </span><span class="error"> * Unit tests for the [SessionDetailViewModel].</span>
<span class="lineno">  79 </span><span class="error"> */</span>
<span class="lineno">  80 </span><span class="error">class SessionDetailViewModelTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/signin/FirebaseSignInViewModelDelegateTest.kt:36:1</span><span class="message">FirebaseSignInViewModelDelegateTest have a too high LCOM value: 1.0. Number of methods: 5, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  33 </span>import org.junit.Rule
<span class="lineno">  34 </span>import org.junit.Test
<span class="lineno">  35 </span>
<span class="lineno">  36 </span><span class="error">/**</span>
<span class="lineno">  37 </span><span class="error"> * Tests for [FirebaseSignInViewModelDelegate]</span>
<span class="lineno">  38 </span><span class="error"> */</span>
<span class="lineno">  39 </span><span class="error">class FirebaseSignInViewModelDelegateTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/signin/SignInViewModelTest.kt:28:1</span><span class="message">SignInViewModelTest have a too high LCOM value: 1.0. Number of methods: 3, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  25 </span>import org.junit.Rule
<span class="lineno">  26 </span>import org.junit.Test
<span class="lineno">  27 </span>
<span class="lineno">  28 </span><span class="error">class SignInViewModelTest {</span>
<span class="lineno">  29 </span><span class="error"></span>
<span class="lineno">  30 </span><span class="error">    // Executes tasks in the Architecture Components in the same thread</span>
<span class="lineno">  31 </span><span class="error">    @get:Rule var instantTaskExecutorRule = InstantTaskExecutorRule()</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/speaker/SpeakerViewModelTest.kt:43:1</span><span class="message">SpeakerViewModelTest have a too high LCOM value: 1.0. Number of methods: 3, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  40 </span>import org.junit.Rule
<span class="lineno">  41 </span>import org.junit.Test
<span class="lineno">  42 </span>
<span class="lineno">  43 </span><span class="error">/**</span>
<span class="lineno">  44 </span><span class="error"> * Unit tests for the [SpeakerViewModel].</span>
<span class="lineno">  45 </span><span class="error"> */</span>
<span class="lineno">  46 </span><span class="error">class SpeakerViewModelTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/util/ConferenceStateLiveDataTest.kt:41:1</span><span class="message">ConferenceStateLiveDataTest have a too high LCOM value: 0.8928571428571429. Number of methods: 4, number of properties: 7, number of references: 3</span>
        <pre><code><span class="lineno">  38 </span>import org.mockito.Mockito.verify
<span class="lineno">  39 </span>import org.threeten.bp.Instant
<span class="lineno">  40 </span>
<span class="lineno">  41 </span><span class="error">/**</span>
<span class="lineno">  42 </span><span class="error"> * Unit tests for [ConferenceStateLiveData]</span>
<span class="lineno">  43 </span><span class="error"> */</span>
<span class="lineno">  44 </span><span class="error">class ConferenceStateLiveDataTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/util/SetIntervalLiveDataTest.kt:29:1</span><span class="message">SetIntervalLiveDataTest have a too high LCOM value: 0.8333333333333334. Number of methods: 6, number of properties: 2, number of references: 2</span>
        <pre><code><span class="lineno">  26 </span>import org.junit.Rule
<span class="lineno">  27 </span>import org.junit.Test
<span class="lineno">  28 </span>
<span class="lineno">  29 </span><span class="error">class SetIntervalLiveDataTest {</span>
<span class="lineno">  30 </span><span class="error"></span>
<span class="lineno">  31 </span><span class="error">    // Executes tasks in the Architecture Components in the same thread</span>
<span class="lineno">  32 </span><span class="error">    @get:Rule var instantTaskExecutorRule = InstantTaskExecutorRule()</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/model/src/main/java/com/google/samples/apps/iosched/model/Tag.kt:19:1</span><span class="message">Tag have a too high LCOM value: 0.8736842105263158. Number of methods: 5, number of properties: 19, number of references: 12</span>
        <pre><code><span class="lineno">  16 </span>
<span class="lineno">  17 </span>package com.google.samples.apps.iosched.model
<span class="lineno">  18 </span>
<span class="lineno">  19 </span><span class="error">/**</span>
<span class="lineno">  20 </span><span class="error"> * Describes a tag, which contains meta-information about a conference session. A tag has two</span>
<span class="lineno">  21 </span><span class="error"> * components, a category, and a name, and together these give a tag its semantic meaning. For</span>
<span class="lineno">  22 </span><span class="error"> * example, a session may contain the following tags: {category: &quot;TRACK&quot;, name: &quot;ANDROID&quot;} and</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/config/RemoteAppConfigDataSource.kt:30:1</span><span class="message">RemoteAppConfigDataSource have a too high LCOM value: 0.9805194805194806. Number of methods: 11, number of properties: 70, number of references: 15</span>
        <pre><code><span class="lineno">  27 </span>import java.util.concurrent.TimeUnit
<span class="lineno">  28 </span>import javax.inject.Inject
<span class="lineno">  29 </span>
<span class="lineno">  30 </span><span class="error">class RemoteAppConfigDataSource @Inject constructor(</span>
<span class="lineno">  31 </span><span class="error">    private val firebaseRemoteConfig: FirebaseRemoteConfig,</span>
<span class="lineno">  32 </span><span class="error">    configSettings: FirebaseRemoteConfigSettings</span>
<span class="lineno">  33 </span><span class="error">) : AppConfigDataSource {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/db/AppDatabase.kt:24:1</span><span class="message">AppDatabase have a too high LCOM value: 1.0. Number of methods: 4, number of properties: 1, number of references: 0</span>
        <pre><code><span class="lineno">  21 </span>import androidx.room.Room
<span class="lineno">  22 </span>import androidx.room.RoomDatabase
<span class="lineno">  23 </span>
<span class="lineno">  24 </span><span class="error">/**</span>
<span class="lineno">  25 </span><span class="error"> * The [Room] database for this app.</span>
<span class="lineno">  26 </span><span class="error"> */</span>
<span class="lineno">  27 </span><span class="error">@Database(entities = [</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/feed/FirestoreAnnouncementDataSource.kt:35:1</span><span class="message">FirestoreAnnouncementDataSource have a too high LCOM value: 0.9090909090909091. Number of methods: 2, number of properties: 11, number of references: 2</span>
        <pre><code><span class="lineno">  32 </span>    fun getAnnouncements(): List&lt;Announcement&gt;
<span class="lineno">  33 </span>}
<span class="lineno">  34 </span>
<span class="lineno">  35 </span><span class="error">/**</span>
<span class="lineno">  36 </span><span class="error"> * Feed data source backed by items in a FireStore collection.</span>
<span class="lineno">  37 </span><span class="error"> */</span>
<span class="lineno">  38 </span><span class="error">class FirestoreAnnouncementDataSource @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/feed/FirestoreMomentDataSource.kt:35:1</span><span class="message">FirestoreMomentDataSource have a too high LCOM value: 0.9285714285714286. Number of methods: 2, number of properties: 14, number of references: 2</span>
        <pre><code><span class="lineno">  32 </span>    fun getMoments(): List&lt;Moment&gt;
<span class="lineno">  33 </span>}
<span class="lineno">  34 </span>
<span class="lineno">  35 </span><span class="error">/**</span>
<span class="lineno">  36 </span><span class="error"> * Moments data source backed by items in a FireStore collection.</span>
<span class="lineno">  37 </span><span class="error"> */</span>
<span class="lineno">  38 </span><span class="error">class FirestoreMomentDataSource @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/prefs/PreferenceStorage.kt:52:1</span><span class="message">SharedPreferenceStorage have a too high LCOM value: 0.9655172413793104. Number of methods: 1, number of properties: 29, number of references: 1</span>
        <pre><code><span class="lineno">  49 </span>    var codelabsInfoShown: Boolean
<span class="lineno">  50 </span>}
<span class="lineno">  51 </span>
<span class="lineno">  52 </span><span class="error">/**</span>
<span class="lineno">  53 </span><span class="error"> * [PreferenceStorage] impl backed by [android.content.SharedPreferences].</span>
<span class="lineno">  54 </span><span class="error"> */</span>
<span class="lineno">  55 </span><span class="error">@Singleton</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/userevent/FirestoreUserEventDataSource.kt:46:1</span><span class="message">FirestoreUserEventDataSource have a too high LCOM value: 0.9607142857142857. Number of methods: 10, number of properties: 28, number of references: 11</span>
        <pre><code><span class="lineno">  43 </span>import java.util.concurrent.TimeUnit
<span class="lineno">  44 </span>import javax.inject.Inject
<span class="lineno">  45 </span>
<span class="lineno">  46 </span><span class="error">/**</span>
<span class="lineno">  47 </span><span class="error"> * The data source for user data stored in firestore. It observes user data and also updates</span>
<span class="lineno">  48 </span><span class="error"> * stars and reservations.</span>
<span class="lineno">  49 </span><span class="error"> */</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/fcm/FcmTokenUpdater.kt:28:1</span><span class="message">FcmTokenUpdater have a too high LCOM value: 0.8333333333333334. Number of methods: 2, number of properties: 6, number of references: 2</span>
        <pre><code><span class="lineno">  25 </span>import timber.log.Timber
<span class="lineno">  26 </span>import javax.inject.Inject
<span class="lineno">  27 </span>
<span class="lineno">  28 </span><span class="error">/**</span>
<span class="lineno">  29 </span><span class="error"> * Saves the FCM ID tokens in Firestore.</span>
<span class="lineno">  30 </span><span class="error"> */</span>
<span class="lineno">  31 </span><span class="error">class FcmTokenUpdater @Inject constructor(val firestore: FirebaseFirestore) {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/fcm/FcmTopicSubscriber.kt:22:1</span><span class="message">FcmTopicSubscriber have a too high LCOM value: 1.0. Number of methods: 3, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  19 </span>import com.google.firebase.messaging.FirebaseMessaging
<span class="lineno">  20 </span>import timber.log.Timber
<span class="lineno">  21 </span>
<span class="lineno">  22 </span><span class="error">/**</span>
<span class="lineno">  23 </span><span class="error"> * A [TopicSubscriber] that uses Firebase Cloud Messaging to subscribe a user to server topics.</span>
<span class="lineno">  24 </span><span class="error"> *</span>
<span class="lineno">  25 </span><span class="error"> * Calls are lightweight and can be repeated multiple times.</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/fcm/IoschedFirebaseMessagingService.kt:30:1</span><span class="message">IoschedFirebaseMessagingService have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 4, number of references: 0</span>
        <pre><code><span class="lineno">  27 </span>import timber.log.Timber
<span class="lineno">  28 </span>import java.util.concurrent.TimeUnit
<span class="lineno">  29 </span>
<span class="lineno">  30 </span><span class="error">/**</span>
<span class="lineno">  31 </span><span class="error"> * Receives Firebase Cloud Messages and starts a [ConferenceDataService] to download new data.</span>
<span class="lineno">  32 </span><span class="error"> */</span>
<span class="lineno">  33 </span><span class="error">class IoschedFirebaseMessagingService : DaggerFirebaseMessagingService() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/notifications/CancelNotificationBroadcastReceiver.kt:27:1</span><span class="message">CancelNotificationBroadcastReceiver have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  24 </span>import timber.log.Timber
<span class="lineno">  25 </span>import javax.inject.Inject
<span class="lineno">  26 </span>
<span class="lineno">  27 </span><span class="error">/**</span>
<span class="lineno">  28 </span><span class="error"> * Receives broadcast intents with information to hide notifications.</span>
<span class="lineno">  29 </span><span class="error"> */</span>
<span class="lineno">  30 </span><span class="error">class CancelNotificationBroadcastReceiver : DaggerBroadcastReceiver() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/util/SetIntervalLiveData.kt:27:1</span><span class="message">SetIntervalLiveData have a too high LCOM value: 0.8333333333333334. Number of methods: 9, number of properties: 6, number of references: 9</span>
        <pre><code><span class="lineno">  24 </span>
<span class="lineno">  25 </span>private const val ONE_SECOND = 1_000L
<span class="lineno">  26 </span>
<span class="lineno">  27 </span><span class="error">/**</span>
<span class="lineno">  28 </span><span class="error"> * LiveData that applies a map operation to a source at an interval.</span>
<span class="lineno">  29 </span><span class="error"> *</span>
<span class="lineno">  30 </span><span class="error"> * This is useful if you want to transform a source LiveData on a timer, for example to show</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/data/signin/ObserveUserAuthStateUseCaseTest.kt:41:1</span><span class="message">ObserveUserAuthStateUseCaseTest have a too high LCOM value: 1.0. Number of methods: 4, number of properties: 1, number of references: 0</span>
        <pre><code><span class="lineno">  38 </span>
<span class="lineno">  39 </span>const val TEST_USER_ID = &quot;testuser&quot;
<span class="lineno">  40 </span>
<span class="lineno">  41 </span><span class="error">/**</span>
<span class="lineno">  42 </span><span class="error"> * Tests for [ObserveUserAuthStateUseCase].</span>
<span class="lineno">  43 </span><span class="error"> */</span>
<span class="lineno">  44 </span><span class="error">class ObserveUserAuthStateUseCaseTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/data/userevent/DefaultSessionAndUserEventRepositoryTest.kt:35:1</span><span class="message">DefaultSessionAndUserEventRepositoryTest have a too high LCOM value: 1.0. Number of methods: 2, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  32 </span>import org.junit.Rule
<span class="lineno">  33 </span>import org.junit.Test
<span class="lineno">  34 </span>
<span class="lineno">  35 </span><span class="error">/**</span>
<span class="lineno">  36 </span><span class="error"> * Unit test for [DefaultSessionAndUserEventRepository].</span>
<span class="lineno">  37 </span><span class="error"> */</span>
<span class="lineno">  38 </span><span class="error">class DefaultSessionAndUserEventRepositoryTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/feed/LoadAnnouncementsUseCaseTest.kt:35:1</span><span class="message">LoadAnnouncementsUseCaseTest have a too high LCOM value: 1.0. Number of methods: 3, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  32 </span>import org.junit.Test
<span class="lineno">  33 </span>import org.threeten.bp.Instant
<span class="lineno">  34 </span>
<span class="lineno">  35 </span><span class="error">/**</span>
<span class="lineno">  36 </span><span class="error"> * Unit tests for [LoadAnnouncementsUseCase]</span>
<span class="lineno">  37 </span><span class="error"> */</span>
<span class="lineno">  38 </span><span class="error">class LoadAnnouncementsUseCaseTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/feed/LoadCurrentMomentUseCaseTest.kt:37:1</span><span class="message">LoadCurrentMomentUseCaseTest have a too high LCOM value: 1.0. Number of methods: 4, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  34 </span>import org.junit.Test
<span class="lineno">  35 </span>import org.threeten.bp.Instant
<span class="lineno">  36 </span>
<span class="lineno">  37 </span><span class="error">/**</span>
<span class="lineno">  38 </span><span class="error"> * Unit tests for [LoadCurrentMomentUseCase]</span>
<span class="lineno">  39 </span><span class="error"> */</span>
<span class="lineno">  40 </span><span class="error">class LoadCurrentMomentUseCaseTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/repository/TestUserEventDataSource.kt:37:1</span><span class="message">TestUserEventDataSource have a too high LCOM value: 0.8. Number of methods: 10, number of properties: 2, number of references: 4</span>
        <pre><code><span class="lineno">  34 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  35 </span>import com.google.samples.apps.iosched.test.data.TestData
<span class="lineno">  36 </span>
<span class="lineno">  37 </span><span class="error">class TestUserEventDataSource(</span>
<span class="lineno">  38 </span><span class="error">    private val userEventsResult: MutableLiveData&lt;UserEventsResult&gt; = MutableLiveData(),</span>
<span class="lineno">  39 </span><span class="error">    private val userEventResult: MutableLiveData&lt;UserEventResult&gt; = MutableLiveData()</span>
<span class="lineno">  40 </span><span class="error">) : UserEventDataSource {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadFilteredUserSessionsUseCaseTest.kt:45:1</span><span class="message">LoadFilteredUserSessionsUseCaseTest have a too high LCOM value: 1.0. Number of methods: 7, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  42 </span>import org.junit.Rule
<span class="lineno">  43 </span>import org.junit.Test
<span class="lineno">  44 </span>
<span class="lineno">  45 </span><span class="error">/**</span>
<span class="lineno">  46 </span><span class="error"> * Unit tests for [LoadFilteredUserSessionsUseCase]</span>
<span class="lineno">  47 </span><span class="error"> */</span>
<span class="lineno">  48 </span><span class="error">class LoadFilteredUserSessionsUseCaseTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadPinnedSessionsJsonUseCaseTest.kt:41:1</span><span class="message">LoadPinnedSessionsJsonUseCaseTest have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  38 </span>import org.junit.Rule
<span class="lineno">  39 </span>import org.junit.Test
<span class="lineno">  40 </span>
<span class="lineno">  41 </span><span class="error">/**</span>
<span class="lineno">  42 </span><span class="error"> * Unit tests for [LoadPinnedSessionsJsonUseCase]</span>
<span class="lineno">  43 </span><span class="error"> */</span>
<span class="lineno">  44 </span><span class="error">class LoadPinnedSessionsJsonUseCaseTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/sessions/ObserveConferenceDataUseCaseTest.kt:30:1</span><span class="message">ObserveConferenceDataUseCaseTest have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 1, number of references: 0</span>
        <pre><code><span class="lineno">  27 </span>import org.junit.Rule
<span class="lineno">  28 </span>import org.junit.Test
<span class="lineno">  29 </span>
<span class="lineno">  30 </span><span class="error">/**</span>
<span class="lineno">  31 </span><span class="error"> * Unit tests for [ObserveConferenceDataUseCase].</span>
<span class="lineno">  32 </span><span class="error"> */</span>
<span class="lineno">  33 </span><span class="error">class ObserveConferenceDataUseCaseTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/FeedbackUseCaseTest.kt:36:1</span><span class="message">FeedbackUseCaseTest have a too high LCOM value: 1.0. Number of methods: 1, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  33 </span>import org.junit.Rule
<span class="lineno">  34 </span>import org.junit.Test
<span class="lineno">  35 </span>
<span class="lineno">  36 </span><span class="error">/**</span>
<span class="lineno">  37 </span><span class="error"> * Unit tests for [FeedbackUseCase]</span>
<span class="lineno">  38 </span><span class="error"> */</span>
<span class="lineno">  39 </span><span class="error">class FeedbackUseCaseTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/ReservationActionUseCaseTest.kt:46:1</span><span class="message">ReservationActionUseCaseTest have a too high LCOM value: 1.0. Number of methods: 3, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  43 </span>import org.junit.Rule
<span class="lineno">  44 </span>import org.junit.Test
<span class="lineno">  45 </span>
<span class="lineno">  46 </span><span class="error">/**</span>
<span class="lineno">  47 </span><span class="error"> * Unit tests for [ReservationActionUseCase].</span>
<span class="lineno">  48 </span><span class="error"> */</span>
<span class="lineno">  49 </span><span class="error">class ReservationActionUseCaseTest {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/shared/domain/users/StarEventUseCaseTest.kt:49:1</span><span class="message">StarEventAndNotifyUseCaseTest have a too high LCOM value: 1.0. Number of methods: 3, number of properties: 2, number of references: 0</span>
        <pre><code><span class="lineno">  46 </span>import org.junit.Rule
<span class="lineno">  47 </span>import org.junit.Test
<span class="lineno">  48 </span>
<span class="lineno">  49 </span><span class="error">/**</span>
<span class="lineno">  50 </span><span class="error"> * Unit tests for [StarEventAndNotifyUseCase]</span>
<span class="lineno">  51 </span><span class="error"> */</span>
<span class="lineno">  52 </span><span class="error">class StarEventAndNotifyUseCaseTest {</span>
</code></pre>
      </li>
    </ul>
  </details>
  <details id="OpenClosedPrinciple" open="open">
    <summary class="rule-container"><span class="rule">OpenClosedPrinciple: 26 </span><span class="description">This rule reports use of switching on enums and classes, which may be a sign of violation the open closed principle.</span></summary>
    <ul>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/codelabs/CodelabsAdapter.kt:80:16</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `CodelabsHeaderItem`, `CodelabsInformationCard`, `Codelab`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  77 </span>
<span class="lineno">  78 </span>    override fun getItemViewType(position: Int): Int {
<span class="lineno">  79 </span>        val item = getItem(position)
<span class="lineno">  80 </span>        return <span class="error">when (item) {</span>
<span class="lineno">  81 </span><span class="error">            is Codelab -&gt; R.layout.item_codelab</span>
<span class="lineno">  82 </span><span class="error">            is CodelabsInformationCard -&gt; R.layout.item_codelabs_information_card</span>
<span class="lineno">  83 </span><span class="error">            is CodelabsHeaderItem -&gt; R.layout.item_codelabs_header</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModel.kt:317:23</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `TagFilter`, `MyEventsFilter`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno"> 314 </span>    }
<span class="lineno"> 315 </span>
<span class="lineno"> 316 </span>    override fun toggleFilter(filter: EventFilter, enabled: Boolean) {
<span class="lineno"> 317 </span>        val changed = <span class="error">when (filter) {</span>
<span class="lineno"> 318 </span><span class="error">            is MyEventsFilter -&gt; userSessionMatcher.setShowPinnedEventsOnly(enabled)</span>
<span class="lineno"> 319 </span><span class="error">            is TagFilter -&gt; {</span>
<span class="lineno"> 320 </span><span class="error">                if (enabled) {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/filters/ScheduleFilterAdapter.kt:81:16</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `EventFilter`, `SectionHeader`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  78 </span>    }
<span class="lineno">  79 </span>
<span class="lineno">  80 </span>    override fun getItemViewType(position: Int): Int {
<span class="lineno">  81 </span>        return <span class="error">when (getItem(position)) {</span>
<span class="lineno">  82 </span><span class="error">            is SectionHeader -&gt; VIEW_TYPE_HEADING</span>
<span class="lineno">  83 </span><span class="error">            is EventFilter -&gt; VIEW_TYPE_FILTER</span>
<span class="lineno">  84 </span><span class="error">            else -&gt; throw IllegalArgumentException(&quot;Unknown item type&quot;)</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/filters/ScheduleFilterAdapter.kt:121:9</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `FilterViewHolder`, `HeadingViewHolder`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno"> 118 </span>    }
<span class="lineno"> 119 </span>
<span class="lineno"> 120 </span>    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
<span class="lineno"> 121 </span>        <span class="error">when (holder) {</span>
<span class="lineno"> 122 </span><span class="error">            is HeadingViewHolder -&gt; holder.bind(getItem(position) as SectionHeader)</span>
<span class="lineno"> 123 </span><span class="error">            is FilterViewHolder -&gt; holder.bind(getItem(position) as EventFilter)</span>
<span class="lineno"> 124 </span><span class="error">        }</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/search/SearchBindingAdapters.kt:31:18</span><span class="message">Switching on enum values is a common sign of violation the Open-Closed Principle. Consider introducing an abstraction (interface) for `SearchResultType`, with new implementations of the interface for every value.</span>
        <pre><code><span class="lineno">  28 </span>
<span class="lineno">  29 </span>@BindingAdapter(&quot;searchResultIcon&quot;)
<span class="lineno">  30 </span>fun searchResultIcon(imageView: ImageView, type: SearchResultType) {
<span class="lineno">  31 </span>    val iconId = <span class="error">when (type) {</span>
<span class="lineno">  32 </span><span class="error">        SESSION -&gt; R.drawable.ic_event</span>
<span class="lineno">  33 </span><span class="error">        SPEAKER -&gt; R.drawable.ic_account_box</span>
<span class="lineno">  34 </span><span class="error">        CODELAB -&gt; R.drawable.ic_agenda_codelab</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/search/SearchViewModel.kt:76:17</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `SearchedCodelab`, `SearchedSpeaker`, `SearchedSession`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  73 </span>        _searchResults.addSource(loadSearchResults) {
<span class="lineno">  74 </span>            val result = (it as? Result.Success)?.data ?: emptyList()
<span class="lineno">  75 </span>            _searchResults.value = result.map { searched -&gt;
<span class="lineno">  76 </span>                <span class="error">when (searched) {</span>
<span class="lineno">  77 </span><span class="error">                    is SearchedSession -&gt; {</span>
<span class="lineno">  78 </span><span class="error">                        val session = searched.session</span>
<span class="lineno">  79 </span><span class="error">                        SearchResult(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/search/SearchViewModel.kt:115:9</span><span class="message">Switching on enum values is a common sign of violation the Open-Closed Principle. Consider introducing an abstraction (interface) for `SearchResultType`, with new implementations of the interface for every value.</span>
        <pre><code><span class="lineno"> 112 </span>    }
<span class="lineno"> 113 </span>
<span class="lineno"> 114 </span>    override fun openSearchResult(searchResult: SearchResult) {
<span class="lineno"> 115 </span>        <span class="error">when (searchResult.type) {</span>
<span class="lineno"> 116 </span><span class="error">            SESSION -&gt; {</span>
<span class="lineno"> 117 </span><span class="error">                val sessionId = searchResult.objectId</span>
<span class="lineno"> 118 </span><span class="error">                analyticsHelper.logUiEvent(&quot;Session: $sessionId&quot;,</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessioncommon/SessionCommonExtensions.kt:33:12</span><span class="message">Switching on enum values is a common sign of violation the Open-Closed Principle. Consider introducing an abstraction (interface) for `UserEventMessageChangeType`, with new implementations of the interface for every value.</span>
        <pre><code><span class="lineno">  30 </span>import com.google.samples.apps.iosched.shared.data.userevent.UserEventMessageChangeType.WAITLIST_CANCELED
<span class="lineno">  31 </span>
<span class="lineno">  32 </span>fun UserEventMessageChangeType.stringRes(): Int {
<span class="lineno">  33 </span>    return <span class="error">when (this) {</span>
<span class="lineno">  34 </span><span class="error">        CHANGES_IN_RESERVATIONS -&gt; R.string.reservation_new</span>
<span class="lineno">  35 </span><span class="error">        RESERVATIONS_REPLACED -&gt; R.string.reservation_replaced</span>
<span class="lineno">  36 </span><span class="error">        CHANGES_IN_WAITLIST -&gt; R.string.waitlist_new</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailAdapter.kt:92:9</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `HeaderViewHolder`, `RelatedViewHolder`, `SpeakerViewHolder`, `SessionInfoViewHolder`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  89 </span>    }
<span class="lineno">  90 </span>
<span class="lineno">  91 </span>    override fun onBindViewHolder(holder: SessionDetailViewHolder, position: Int) {
<span class="lineno">  92 </span>        <span class="error">when (holder) {</span>
<span class="lineno">  93 </span><span class="error">            is SessionInfoViewHolder -&gt; holder.binding.executeAfter {</span>
<span class="lineno">  94 </span><span class="error">                viewModel = sessionDetailViewModel</span>
<span class="lineno">  95 </span><span class="error">                tagViewPool = tagRecycledViewPool</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailAdapter.kt:119:16</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `SectionHeader`, `UserSession`, `Speaker`, `SessionItem`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno"> 116 </span>    }
<span class="lineno"> 117 </span>
<span class="lineno"> 118 </span>    override fun getItemViewType(position: Int): Int {
<span class="lineno"> 119 </span>        return <span class="error">when (differ.currentList[position]) {</span>
<span class="lineno"> 120 </span><span class="error">            is SessionItem -&gt; R.layout.item_session_info</span>
<span class="lineno"> 121 </span><span class="error">            is Speaker -&gt; R.layout.item_speaker</span>
<span class="lineno"> 122 </span><span class="error">            is UserSession -&gt; R.layout.item_session</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailDataBindingAdapters.kt:48:17</span><span class="message">Switching on enum values is a common sign of violation the Open-Closed Principle. Consider introducing an abstraction (interface) for `SessionType`, with new implementations of the interface for every value.</span>
        <pre><code><span class="lineno">  45 </span>fun eventNarrowHeaderImage(imageView: ImageView, session: Session?) {
<span class="lineno">  46 </span>    session ?: return
<span class="lineno">  47 </span>
<span class="lineno">  48 </span>    val resId = <span class="error">when (session.type) {</span>
<span class="lineno">  49 </span><span class="error">        KEYNOTE -&gt; R.drawable.event_narrow_keynote</span>
<span class="lineno">  50 </span><span class="error">        // For the next few types, we choose a random image, but we should use the same image for a</span>
<span class="lineno">  51 </span><span class="error">        // given event, so use the id to pick.</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailDataBindingAdapters.kt:84:17</span><span class="message">Switching on enum values is a common sign of violation the Open-Closed Principle. Consider introducing an abstraction (interface) for `SessionType`, with new implementations of the interface for every value.</span>
        <pre><code><span class="lineno">  81 </span>fun eventPhoto(imageView: ImageView, session: Session?) {
<span class="lineno">  82 </span>    session ?: return
<span class="lineno">  83 </span>
<span class="lineno">  84 </span>    val resId = <span class="error">when (session.type) {</span>
<span class="lineno">  85 </span><span class="error">        KEYNOTE -&gt; R.drawable.event_placeholder_keynote</span>
<span class="lineno">  86 </span><span class="error">        // Choose a random image, but we should use the same image for a given session, so use ID to</span>
<span class="lineno">  87 </span><span class="error">        // pick.</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/settings/ThemeSettingDialogFragment.kt:75:50</span><span class="message">Switching on enum values is a common sign of violation the Open-Closed Principle. Consider introducing an abstraction (interface) for `Theme`, with new implementations of the interface for every value.</span>
        <pre><code><span class="lineno">  72 </span>        (dialog as AlertDialog).listView.setItemChecked(selectedPosition, true)
<span class="lineno">  73 </span>    }
<span class="lineno">  74 </span>
<span class="lineno">  75 </span>    private fun getTitleForTheme(theme: Theme) = <span class="error">when (theme) {</span>
<span class="lineno">  76 </span><span class="error">        Theme.LIGHT -&gt; getString(R.string.settings_theme_light)</span>
<span class="lineno">  77 </span><span class="error">        Theme.DARK -&gt; getString(R.string.settings_theme_dark)</span>
<span class="lineno">  78 </span><span class="error">        Theme.SYSTEM -&gt; getString(R.string.settings_theme_system)</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/speaker/SpeakerAdapter.kt:81:9</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `HeaderViewHolder`, `SpeakerSessionViewHolder`, `SpeakerInfoViewHolder`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  78 </span>    }
<span class="lineno">  79 </span>
<span class="lineno">  80 </span>    override fun onBindViewHolder(holder: SpeakerViewHolder, position: Int) {
<span class="lineno">  81 </span>        <span class="error">when (holder) {</span>
<span class="lineno">  82 </span><span class="error">            is SpeakerInfoViewHolder -&gt; holder.binding.executeAfter {</span>
<span class="lineno">  83 </span><span class="error">                viewModel = speakerViewModel</span>
<span class="lineno">  84 </span><span class="error">                lifecycleOwner = this@SpeakerAdapter.lifecycleOwner</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/util/Extensions.kt:184:54</span><span class="message">Switching on enum values is a common sign of violation the Open-Closed Principle. Consider introducing an abstraction (interface) for `Theme`, with new implementations of the interface for every value.</span>
        <pre><code><span class="lineno"> 181 </span> * Having to suppress lint. Bug raised: 128789886
<span class="lineno"> 182 </span> */
<span class="lineno"> 183 </span>@SuppressLint(&quot;WrongConstant&quot;)
<span class="lineno"> 184 </span>fun AppCompatActivity.updateForTheme(theme: Theme) = <span class="error">when (theme) {</span>
<span class="lineno"> 185 </span><span class="error">    Theme.DARK -&gt; delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES</span>
<span class="lineno"> 186 </span><span class="error">    Theme.LIGHT -&gt; delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_NO</span>
<span class="lineno"> 187 </span><span class="error">    Theme.SYSTEM -&gt; delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/util/ViewBindingAdapters.kt:77:5</span><span class="message">Switching on enum values is a common sign of violation the Open-Closed Principle. Consider introducing an abstraction (interface) for `Theme?`, with new implementations of the interface for every value.</span>
        <pre><code><span class="lineno">  74 </span>    momentImageUrlDarkTheme: String?,
<span class="lineno">  75 </span>    momentTheme: Theme?
<span class="lineno">  76 </span>) {
<span class="lineno">  77 </span>    <span class="error">when (momentTheme) {</span>
<span class="lineno">  78 </span><span class="error">        DARK -&gt; imageUri(imageView, momentImageUrlDarkTheme?.toUri(), null)</span>
<span class="lineno">  79 </span><span class="error">        else -&gt; imageUri(imageView, momentImageUrl?.toUri(), null)</span>
<span class="lineno">  80 </span><span class="error">    }</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/model/src/main/java/com/google/samples/apps/iosched/model/userdata/UserEvent.kt:111:16</span><span class="message">Switching on enum values is a common sign of violation the Open-Closed Principle. Consider introducing an abstraction (interface) for `ReservationRequestStatus?`, with new implementations of the interface for every value.</span>
        <pre><code><span class="lineno"> 108 </span>        // The request result is garbage if there's a pending request
<span class="lineno"> 109 </span>        if (isPending()) return null
<span class="lineno"> 110 </span>
<span class="lineno"> 111 </span>        return <span class="error">when (reservationRequestResult?.requestResult) {</span>
<span class="lineno"> 112 </span><span class="error">            null -&gt; null // If there's no request result, there's no error</span>
<span class="lineno"> 113 </span><span class="error">            RESERVE_SUCCEEDED -&gt; null</span>
<span class="lineno"> 114 </span><span class="error">            RESERVE_WAITLISTED -&gt; null</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/userevent/FirestoreUserEventDataSource.kt:472:9</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `SwapAction`, `CancelAction`, `RequestAction`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno"> 469 </span>    }
<span class="lineno"> 470 </span>
<span class="lineno"> 471 </span>    private fun getReservationRequestedEventAction(action: ReservationRequestAction): String =
<span class="lineno"> 472 </span>        <span class="error">when (action) {</span>
<span class="lineno"> 473 </span><span class="error">            is RequestAction -&gt; RESERVE_REQ_ACTION</span>
<span class="lineno"> 474 </span><span class="error">            is CancelAction -&gt; RESERVE_CANCEL_ACTION</span>
<span class="lineno"> 475 </span><span class="error">            // This should not happen because there is a dedicated method for the swap request</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/userevent/FirestoreUserEventDataSource.kt:480:9</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `SwapAction`, `CancelAction`, `RequestAction`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno"> 477 </span>        }
<span class="lineno"> 478 </span>
<span class="lineno"> 479 </span>    private fun getReservationRequestedQueueAction(action: ReservationRequestAction) =
<span class="lineno"> 480 </span>        <span class="error">when (action) {</span>
<span class="lineno"> 481 </span><span class="error">            is RequestAction -&gt; REQUEST_QUEUE_ACTION_RESERVE</span>
<span class="lineno"> 482 </span><span class="error">            is CancelAction -&gt; REQUEST_QUEUE_ACTION_CANCEL</span>
<span class="lineno"> 483 </span><span class="error">            // This should not happen because there is a dedicated method for the swap request</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadFilteredUserSessionsUseCase.kt:51:17</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `Result.Error`, `Result.Success`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  48 </span>        result.removeSource(userSessionsObservable)
<span class="lineno">  49 </span>        result.addSource(userSessionsObservable) { observableResult -&gt;
<span class="lineno">  50 </span>            DefaultScheduler.execute {
<span class="lineno">  51 </span>                <span class="error">when (observableResult) {</span>
<span class="lineno">  52 </span><span class="error">                    is Result.Success -&gt; {</span>
<span class="lineno">  53 </span><span class="error">                        val filteredSessions = observableResult.data.userSessions</span>
<span class="lineno">  54 </span><span class="error">                            .filter { sessionMatcher.matches(it) }</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadPinnedSessionsJsonUseCase.kt:70:17</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `Result.Error`, `Result.Success`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  67 </span>        result.value = null
<span class="lineno">  68 </span>        result.addSource(userSessionsObservable) { observableResult -&gt;
<span class="lineno">  69 </span>            DefaultScheduler.execute {
<span class="lineno">  70 </span>                <span class="error">when (observableResult) {</span>
<span class="lineno">  71 </span><span class="error">                    is Result.Success -&gt; {</span>
<span class="lineno">  72 </span><span class="error">                        val useCaseResult = observableResult.data.userSessions.filter {</span>
<span class="lineno">  73 </span><span class="error">                            it.userEvent.isPinned()</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadUserSessionUseCase.kt:47:17</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `Result.Error`, `Result.Success`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  44 </span>        // Post new values to the result object.
<span class="lineno">  45 </span>        result.addSource(newUserSession) {
<span class="lineno">  46 </span>            DefaultScheduler.execute {
<span class="lineno">  47 </span>                <span class="error">when (it) {</span>
<span class="lineno">  48 </span><span class="error">                    is Result.Success -&gt; {</span>
<span class="lineno">  49 </span><span class="error">                        val useCaseResult = LoadUserSessionUseCaseResult(</span>
<span class="lineno">  50 </span><span class="error">                            userSession = it.data.userSession,</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadUserSessionsUseCase.kt:43:17</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `Result.Error`, `Result.Success`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  40 </span>        result.value = null
<span class="lineno">  41 </span>        result.addSource(userSessionsObservable) { observableResult -&gt;
<span class="lineno">  42 </span>            DefaultScheduler.execute {
<span class="lineno">  43 </span>                <span class="error">when (observableResult) {</span>
<span class="lineno">  44 </span><span class="error">                    is Result.Success -&gt; {</span>
<span class="lineno">  45 </span><span class="error">                        // Filter down to events for sessions we're interested in</span>
<span class="lineno">  46 </span><span class="error">                        val relevantUserSessions = observableResult.data.userSessions</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/NotificationAlarmUpdater.kt:50:13</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `Error`, `Success`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  47 </span>        // Go through every UserSession and make sure the alarm is set for the notification.
<span class="lineno">  48 </span>
<span class="lineno">  49 </span>        val newObserver = { sessions: Result&lt;ObservableUserEvents&gt; -&gt;
<span class="lineno">  50 </span>            <span class="error">when (sessions) {</span>
<span class="lineno">  51 </span><span class="error">                is Success -&gt; processEvents(userId, sessions.data)</span>
<span class="lineno">  52 </span><span class="error">                is Error -&gt; Timber.e(sessions.cause)</span>
<span class="lineno">  53 </span><span class="error">            }</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/NotificationAlarmUpdater.kt:92:13</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `Error`, `Success`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  89 </span>    fun cancelAll() {
<span class="lineno">  90 </span>
<span class="lineno">  91 </span>        val newObserver = { sessions: Result&lt;ObservableUserEvents&gt; -&gt;
<span class="lineno">  92 </span>            <span class="error">when (sessions) {</span>
<span class="lineno">  93 </span><span class="error">                is Success -&gt; DefaultScheduler.execute {</span>
<span class="lineno">  94 </span><span class="error">                    cancelAllSessions(sessions.data)</span>
<span class="lineno">  95 </span><span class="error">                }</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/result/Result.kt:32:16</span><span class="message">Type checking is a sign of violating the Open-Closed Principle. Consider introducing an abstraction (interface) for `Error`, `Success&lt;*&gt;`, with new implementations of the interface for every class.</span>
        <pre><code><span class="lineno">  29 </span>    object Loading : Result&lt;Nothing&gt;()
<span class="lineno">  30 </span>
<span class="lineno">  31 </span>    override fun toString(): String {
<span class="lineno">  32 </span>        return <span class="error">when (this) {</span>
<span class="lineno">  33 </span><span class="error">            is Success&lt;*&gt; -&gt; &quot;Success[data=$data]&quot;</span>
<span class="lineno">  34 </span><span class="error">            is Error -&gt; &quot;Error[exception=$exception]&quot;</span>
<span class="lineno">  35 </span><span class="error">            Loading -&gt; &quot;Loading&quot;</span>
</code></pre>
      </li>
    </ul>
  </details>
  <details id="UseCompositionInsteadOfInheritance" open="open">
    <summary class="rule-container"><span class="rule">UseCompositionInsteadOfInheritance: 99 </span><span class="description">This rule reports a file using inheritance.</span></summary>
    <ul>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/agenda/AgendaFragment.kt:39:1</span><span class="message">The class `AgendaFragment` is using inheritance, consider using composition instead.

Does `AgendaFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `AgendaFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `AgendaFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  36 </span>import org.threeten.bp.ZoneId
<span class="lineno">  37 </span>import javax.inject.Inject
<span class="lineno">  38 </span>
<span class="lineno">  39 </span><span class="error">class AgendaFragment : MainNavigationFragment() {</span>
<span class="lineno">  40 </span><span class="error"></span>
<span class="lineno">  41 </span><span class="error">    @Inject</span>
<span class="lineno">  42 </span><span class="error">    lateinit var viewModelFactory: ViewModelProvider.Factory</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/codelabs/CodelabsAdapter.kt:154:5</span><span class="message">The class `CodelabItemHolder` is using inheritance, consider using composition instead.

Does `CodelabItemHolder` want to expose the complete interface (`empty public interface`) of `CodelabsViewHolder` such that `CodelabItemHolder` can be used where `CodelabsViewHolder` is expected? Indicates __inheritance__.

Does `CodelabItemHolder` want only some/part of the behavior exposed by `CodelabsViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 151 </span>
<span class="lineno"> 152 </span>internal sealed class CodelabsViewHolder(itemView: View) : ViewHolder(itemView) {
<span class="lineno"> 153 </span>
<span class="lineno"> 154 </span>    <span class="error">class CodelabItemHolder(</span>
<span class="lineno"> 155 </span><span class="error">        val binding: ItemCodelabBinding</span>
<span class="lineno"> 156 </span><span class="error">    ) : CodelabsViewHolder(binding.root)</span>
<span class="lineno"> 157 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/codelabs/CodelabsAdapter.kt:158:5</span><span class="message">The class `CodelabsInformationCardHolder` is using inheritance, consider using composition instead.

Does `CodelabsInformationCardHolder` want to expose the complete interface (`empty public interface`) of `CodelabsViewHolder` such that `CodelabsInformationCardHolder` can be used where `CodelabsViewHolder` is expected? Indicates __inheritance__.

Does `CodelabsInformationCardHolder` want only some/part of the behavior exposed by `CodelabsViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 155 </span>        val binding: ItemCodelabBinding
<span class="lineno"> 156 </span>    ) : CodelabsViewHolder(binding.root)
<span class="lineno"> 157 </span>
<span class="lineno"> 158 </span>    <span class="error">class CodelabsInformationCardHolder(</span>
<span class="lineno"> 159 </span><span class="error">        val binding: ItemCodelabsInformationCardBinding</span>
<span class="lineno"> 160 </span><span class="error">    ) : CodelabsViewHolder(binding.root)</span>
<span class="lineno"> 161 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/codelabs/CodelabsAdapter.kt:162:5</span><span class="message">The class `CodelabsHeaderHolder` is using inheritance, consider using composition instead.

Does `CodelabsHeaderHolder` want to expose the complete interface (`empty public interface`) of `CodelabsViewHolder` such that `CodelabsHeaderHolder` can be used where `CodelabsViewHolder` is expected? Indicates __inheritance__.

Does `CodelabsHeaderHolder` want only some/part of the behavior exposed by `CodelabsViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 159 </span>        val binding: ItemCodelabsInformationCardBinding
<span class="lineno"> 160 </span>    ) : CodelabsViewHolder(binding.root)
<span class="lineno"> 161 </span>
<span class="lineno"> 162 </span>    <span class="error">class CodelabsHeaderHolder(</span>
<span class="lineno"> 163 </span><span class="error">        val binding: ItemCodelabsHeaderBinding</span>
<span class="lineno"> 164 </span><span class="error">    ) : CodelabsViewHolder(binding.root)</span>
<span class="lineno"> 165 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/codelabs/CodelabsFragment.kt:43:1</span><span class="message">The class `CodelabsFragment` is using inheritance, consider using composition instead.

Does `CodelabsFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `CodelabsFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `CodelabsFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  40 </span>import javax.inject.Inject
<span class="lineno">  41 </span>import javax.inject.Named
<span class="lineno">  42 </span>
<span class="lineno">  43 </span><span class="error">class CodelabsFragment : MainNavigationFragment(), CodelabsActionsHandler {</span>
<span class="lineno">  44 </span><span class="error"></span>
<span class="lineno">  45 </span><span class="error">    companion object {</span>
<span class="lineno">  46 </span><span class="error">        private const val CODELABS_WEBSITE = &quot;https://codelabs.developers.google.com&quot;</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedAnnouncementViewBinders.kt:30:1</span><span class="message">The class `AnnouncementViewBinder` is using inheritance, consider using composition instead.

Does `AnnouncementViewBinder` want to expose the complete interface (`onViewDetachedFromWindow, onViewRecycled, getFeedItemType, bindViewHolder, createViewHolder`) of `FeedItemViewBinder` such that `AnnouncementViewBinder` can be used where `FeedItemViewBinder` is expected? Indicates __inheritance__.

Does `AnnouncementViewBinder` want only some/part of the behavior exposed by `FeedItemViewBinder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  27 </span>import com.google.samples.apps.iosched.model.Announcement
<span class="lineno">  28 </span>import org.threeten.bp.ZoneId
<span class="lineno">  29 </span>
<span class="lineno">  30 </span><span class="error">// For Announcement items</span>
<span class="lineno">  31 </span><span class="error">class AnnouncementViewBinder(</span>
<span class="lineno">  32 </span><span class="error">    private val timeZoneId: LiveData&lt;ZoneId&gt;,</span>
<span class="lineno">  33 </span><span class="error">    private val lifecycleOwner: LifecycleOwner</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedAnnouncementViewBinders.kt:77:1</span><span class="message">The class `AnnouncementsLoadingViewBinder` is using inheritance, consider using composition instead.

Does `AnnouncementsLoadingViewBinder` want to expose the complete interface (`onViewDetachedFromWindow, onViewRecycled, getFeedItemType, bindViewHolder, createViewHolder`) of `FeedItemViewBinder` such that `AnnouncementsLoadingViewBinder` can be used where `FeedItemViewBinder` is expected? Indicates __inheritance__.

Does `AnnouncementsLoadingViewBinder` want only some/part of the behavior exposed by `FeedItemViewBinder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  74 </span>
<span class="lineno">  75 </span>class LoadingViewHolder(itemView: View) : ViewHolder(itemView)
<span class="lineno">  76 </span>
<span class="lineno">  77 </span><span class="error">class AnnouncementsLoadingViewBinder : FeedItemViewBinder&lt;LoadingIndicator, LoadingViewHolder&gt;(</span>
<span class="lineno">  78 </span><span class="error">    LoadingIndicator::class.java</span>
<span class="lineno">  79 </span><span class="error">) {</span>
<span class="lineno">  80 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedAnnouncementViewBinders.kt:101:1</span><span class="message">The class `AnnouncementsEmptyViewBinder` is using inheritance, consider using composition instead.

Does `AnnouncementsEmptyViewBinder` want to expose the complete interface (`onViewDetachedFromWindow, onViewRecycled, getFeedItemType, bindViewHolder, createViewHolder`) of `FeedItemViewBinder` such that `AnnouncementsEmptyViewBinder` can be used where `FeedItemViewBinder` is expected? Indicates __inheritance__.

Does `AnnouncementsEmptyViewBinder` want only some/part of the behavior exposed by `FeedItemViewBinder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  98 </span>
<span class="lineno">  99 </span>class EmptyViewHolder(itemView: View) : ViewHolder(itemView)
<span class="lineno"> 100 </span>
<span class="lineno"> 101 </span><span class="error">class AnnouncementsEmptyViewBinder : FeedItemViewBinder&lt;AnnouncementsEmpty, EmptyViewHolder&gt;(</span>
<span class="lineno"> 102 </span><span class="error">    AnnouncementsEmpty::class.java</span>
<span class="lineno"> 103 </span><span class="error">) {</span>
<span class="lineno"> 104 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedFragment.kt:52:1</span><span class="message">The class `FeedFragment` is using inheritance, consider using composition instead.

Does `FeedFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `FeedFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `FeedFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  49 </span>import timber.log.Timber
<span class="lineno">  50 </span>import javax.inject.Inject
<span class="lineno">  51 </span>
<span class="lineno">  52 </span><span class="error">class FeedFragment : MainNavigationFragment() {</span>
<span class="lineno">  53 </span><span class="error"></span>
<span class="lineno">  54 </span><span class="error">    companion object {</span>
<span class="lineno">  55 </span><span class="error">        private const val DIALOG_NEED_TO_SIGN_IN = &quot;dialog_need_to_sign_in&quot;</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedHeaderViewBinders.kt:43:1</span><span class="message">The class `CountdownViewBinder` is using inheritance, consider using composition instead.

Does `CountdownViewBinder` want to expose the complete interface (`onViewDetachedFromWindow, onViewRecycled, getFeedItemType, bindViewHolder, createViewHolder`) of `FeedItemViewBinder` such that `CountdownViewBinder` can be used where `FeedItemViewBinder` is expected? Indicates __inheritance__.

Does `CountdownViewBinder` want only some/part of the behavior exposed by `FeedItemViewBinder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  40 </span>
<span class="lineno">  41 </span>class CountdownViewHolder(itemView: View) : ViewHolder(itemView)
<span class="lineno">  42 </span>
<span class="lineno">  43 </span><span class="error">class CountdownViewBinder : FeedItemViewBinder&lt;CountdownItem, CountdownViewHolder&gt;(</span>
<span class="lineno">  44 </span><span class="error">    CountdownItem::class.java</span>
<span class="lineno">  45 </span><span class="error">) {</span>
<span class="lineno">  46 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedHeaderViewBinders.kt:62:1</span><span class="message">The class `MomentViewBinder` is using inheritance, consider using composition instead.

Does `MomentViewBinder` want to expose the complete interface (`onViewDetachedFromWindow, onViewRecycled, getFeedItemType, bindViewHolder, createViewHolder`) of `FeedItemViewBinder` such that `MomentViewBinder` can be used where `FeedItemViewBinder` is expected? Indicates __inheritance__.

Does `MomentViewBinder` want only some/part of the behavior exposed by `FeedItemViewBinder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  59 </span>    override fun areContentsTheSame(oldItem: CountdownItem, newItem: CountdownItem) = true
<span class="lineno">  60 </span>}
<span class="lineno">  61 </span>
<span class="lineno">  62 </span><span class="error">// A Moment may be shown during or after the conference based on the current time</span>
<span class="lineno">  63 </span><span class="error">class MomentViewBinder(</span>
<span class="lineno">  64 </span><span class="error">    private val eventListener: FeedEventListener,</span>
<span class="lineno">  65 </span><span class="error">    private val userInfoLiveData: LiveData&lt;AuthenticatedUserInfo?&gt;,</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedSectionHeaderViewBinder.kt:26:1</span><span class="message">The class `FeedSectionHeaderViewBinder` is using inheritance, consider using composition instead.

Does `FeedSectionHeaderViewBinder` want to expose the complete interface (`onViewDetachedFromWindow, onViewRecycled, getFeedItemType, bindViewHolder, createViewHolder`) of `FeedItemViewBinder` such that `FeedSectionHeaderViewBinder` can be used where `FeedItemViewBinder` is expected? Indicates __inheritance__.

Does `FeedSectionHeaderViewBinder` want only some/part of the behavior exposed by `FeedItemViewBinder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  23 </span>import com.google.samples.apps.iosched.databinding.ItemGenericSectionHeaderBinding
<span class="lineno">  24 </span>import com.google.samples.apps.iosched.ui.SectionHeader
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">class FeedSectionHeaderViewBinder :</span>
<span class="lineno">  27 </span><span class="error">    FeedItemViewBinder&lt;SectionHeader, SectionHeaderViewHolder&gt;(SectionHeader::class.java) {</span>
<span class="lineno">  28 </span><span class="error"></span>
<span class="lineno">  29 </span><span class="error">    override fun createViewHolder(parent: ViewGroup): SectionHeaderViewHolder =</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/feed/FeedSessionsViewBinder.kt:54:1</span><span class="message">The class `FeedSessionsViewBinder` is using inheritance, consider using composition instead.

Does `FeedSessionsViewBinder` want to expose the complete interface (`onViewDetachedFromWindow, onViewRecycled, getFeedItemType, bindViewHolder, createViewHolder`) of `FeedItemViewBinder` such that `FeedSessionsViewBinder` can be used where `FeedItemViewBinder` is expected? Indicates __inheritance__.

Does `FeedSessionsViewBinder` want only some/part of the behavior exposed by `FeedItemViewBinder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  51 </span>    val isLoading: Boolean
<span class="lineno">  52 </span>)
<span class="lineno">  53 </span>
<span class="lineno">  54 </span><span class="error">class FeedSessionsViewBinder(</span>
<span class="lineno">  55 </span><span class="error">    private val eventListener: FeedEventListener,</span>
<span class="lineno">  56 </span><span class="error">    var recyclerViewManagerState: Parcelable? = null</span>
<span class="lineno">  57 </span><span class="error">) : FeedItemViewBinder&lt;FeedSessions, FeedSessionsViewHolder&gt;(FeedSessions::class.java) {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/info/InfoFragment.kt:37:1</span><span class="message">The class `InfoFragment` is using inheritance, consider using composition instead.

Does `InfoFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `InfoFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `InfoFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  34 </span>import com.google.samples.apps.iosched.util.doOnApplyWindowInsets
<span class="lineno">  35 </span>import javax.inject.Inject
<span class="lineno">  36 </span>
<span class="lineno">  37 </span><span class="error">class InfoFragment : MainNavigationFragment() {</span>
<span class="lineno">  38 </span><span class="error"></span>
<span class="lineno">  39 </span><span class="error">    @Inject lateinit var analyticsHelper: AnalyticsHelper</span>
<span class="lineno">  40 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/map/LoadGeoJsonFeaturesUseCase.kt:36:1</span><span class="message">The class `LoadGeoJsonFeaturesUseCase` is using inheritance, consider using composition instead.

Does `LoadGeoJsonFeaturesUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadGeoJsonFeaturesUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadGeoJsonFeaturesUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  33 </span>    val featureMap: Map&lt;String, GeoJsonFeature&gt;
<span class="lineno">  34 </span>)
<span class="lineno">  35 </span>
<span class="lineno">  36 </span><span class="error">/** Use case that loads a GeoJsonLayer and its features. */</span>
<span class="lineno">  37 </span><span class="error">class LoadGeoJsonFeaturesUseCase @Inject constructor(</span>
<span class="lineno">  38 </span><span class="error">    private val context: Context</span>
<span class="lineno">  39 </span><span class="error">) : UseCase&lt;LoadGeoJsonParams, GeoJsonData&gt;() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/map/MapFragment.kt:56:1</span><span class="message">The class `MapFragment` is using inheritance, consider using composition instead.

Does `MapFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `MapFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `MapFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  53 </span>import org.threeten.bp.Instant
<span class="lineno">  54 </span>import javax.inject.Inject
<span class="lineno">  55 </span>
<span class="lineno">  56 </span><span class="error">class MapFragment : MainNavigationFragment() {</span>
<span class="lineno">  57 </span><span class="error"></span>
<span class="lineno">  58 </span><span class="error">    @Inject lateinit var viewModelFactory: ViewModelProvider.Factory</span>
<span class="lineno">  59 </span><span class="error">    @Inject lateinit var analyticsHelper: AnalyticsHelper</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/ScheduleFragment.kt:76:1</span><span class="message">The class `ScheduleFragment` is using inheritance, consider using composition instead.

Does `ScheduleFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `ScheduleFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `ScheduleFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  73 </span>import javax.inject.Inject
<span class="lineno">  74 </span>import javax.inject.Named
<span class="lineno">  75 </span>
<span class="lineno">  76 </span><span class="error">/**</span>
<span class="lineno">  77 </span><span class="error"> * The Schedule page of the top-level Activity.</span>
<span class="lineno">  78 </span><span class="error"> */</span>
<span class="lineno">  79 </span><span class="error">class ScheduleFragment : MainNavigationFragment() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/filters/EventFilter.kt:58:5</span><span class="message">The class `MyEventsFilter` is using inheritance, consider using composition instead.

Does `MyEventsFilter` want to expose the complete interface (`getShortText, getShortTextResId, getText, getTextResId, getSelectedTextColor, getColor, getFilterCategory`) of `EventFilter` such that `MyEventsFilter` can be used where `EventFilter` is expected? Indicates __inheritance__.

Does `MyEventsFilter` want only some/part of the behavior exposed by `EventFilter`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  55 </span>    /** Return a short string string to display when [getShortTextResId] returns 0. */
<span class="lineno">  56 </span>    open fun getShortText(): String = &quot;&quot;
<span class="lineno">  57 </span>
<span class="lineno">  58 </span>    <span class="error">/** Filter for user's starred and reserved events. */</span>
<span class="lineno">  59 </span><span class="error">    class MyEventsFilter(isChecked: Boolean) : EventFilter(isChecked) {</span>
<span class="lineno">  60 </span><span class="error"></span>
<span class="lineno">  61 </span><span class="error">        override fun getFilterCategory(): EventFilterCategory = NONE</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/filters/EventFilter.kt:80:5</span><span class="message">The class `TagFilter` is using inheritance, consider using composition instead.

Does `TagFilter` want to expose the complete interface (`getShortText, getShortTextResId, getText, getTextResId, getSelectedTextColor, getColor, getFilterCategory`) of `EventFilter` such that `TagFilter` can be used where `EventFilter` is expected? Indicates __inheritance__.

Does `TagFilter` want only some/part of the behavior exposed by `EventFilter`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  77 </span>        }
<span class="lineno">  78 </span>    }
<span class="lineno">  79 </span>
<span class="lineno">  80 </span>    <span class="error">/** Filter for event tags. */</span>
<span class="lineno">  81 </span><span class="error">    class TagFilter(val tag: Tag, isChecked: Boolean) : EventFilter(isChecked) {</span>
<span class="lineno">  82 </span><span class="error"></span>
<span class="lineno">  83 </span><span class="error">        override fun getFilterCategory(): EventFilterCategory {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/schedule/filters/LoadEventFiltersUseCase.kt:28:1</span><span class="message">The class `LoadEventFiltersUseCase` is using inheritance, consider using composition instead.

Does `LoadEventFiltersUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadEventFiltersUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadEventFiltersUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  25 </span>import com.google.samples.apps.iosched.util.isEven
<span class="lineno">  26 </span>import javax.inject.Inject
<span class="lineno">  27 </span>
<span class="lineno">  28 </span><span class="error">/**</span>
<span class="lineno">  29 </span><span class="error"> * Use case that loads a list of [TagFilter]s for the schedule filters UI.</span>
<span class="lineno">  30 </span><span class="error"> */</span>
<span class="lineno">  31 </span><span class="error">open class LoadEventFiltersUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/search/SearchFragment.kt:43:1</span><span class="message">The class `SearchFragment` is using inheritance, consider using composition instead.

Does `SearchFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `SearchFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `SearchFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  40 </span>import kotlinx.android.synthetic.main.fragment_search.view.searchView
<span class="lineno">  41 </span>import javax.inject.Inject
<span class="lineno">  42 </span>
<span class="lineno">  43 </span><span class="error">class SearchFragment : MainNavigationFragment() {</span>
<span class="lineno">  44 </span><span class="error">    @Inject lateinit var analyticsHelper: AnalyticsHelper</span>
<span class="lineno">  45 </span><span class="error">    @Inject lateinit var viewModelFactory: ViewModelProvider.Factory</span>
<span class="lineno">  46 </span><span class="error">    private lateinit var binding: FragmentSearchBinding</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailAdapter.kt:189:5</span><span class="message">The class `SessionInfoViewHolder` is using inheritance, consider using composition instead.

Does `SessionInfoViewHolder` want to expose the complete interface (`empty public interface`) of `SessionDetailViewHolder` such that `SessionInfoViewHolder` can be used where `SessionDetailViewHolder` is expected? Indicates __inheritance__.

Does `SessionInfoViewHolder` want only some/part of the behavior exposed by `SessionDetailViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 186 </span> */
<span class="lineno"> 187 </span>sealed class SessionDetailViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
<span class="lineno"> 188 </span>
<span class="lineno"> 189 </span>    <span class="error">class SessionInfoViewHolder(</span>
<span class="lineno"> 190 </span><span class="error">        val binding: ItemSessionInfoBinding</span>
<span class="lineno"> 191 </span><span class="error">    ) : SessionDetailViewHolder(binding.root)</span>
<span class="lineno"> 192 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailAdapter.kt:193:5</span><span class="message">The class `SpeakerViewHolder` is using inheritance, consider using composition instead.

Does `SpeakerViewHolder` want to expose the complete interface (`empty public interface`) of `SessionDetailViewHolder` such that `SpeakerViewHolder` can be used where `SessionDetailViewHolder` is expected? Indicates __inheritance__.

Does `SpeakerViewHolder` want only some/part of the behavior exposed by `SessionDetailViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 190 </span>        val binding: ItemSessionInfoBinding
<span class="lineno"> 191 </span>    ) : SessionDetailViewHolder(binding.root)
<span class="lineno"> 192 </span>
<span class="lineno"> 193 </span>    <span class="error">class SpeakerViewHolder(</span>
<span class="lineno"> 194 </span><span class="error">        val binding: ItemSpeakerBinding</span>
<span class="lineno"> 195 </span><span class="error">    ) : SessionDetailViewHolder(binding.root)</span>
<span class="lineno"> 196 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailAdapter.kt:197:5</span><span class="message">The class `RelatedViewHolder` is using inheritance, consider using composition instead.

Does `RelatedViewHolder` want to expose the complete interface (`empty public interface`) of `SessionDetailViewHolder` such that `RelatedViewHolder` can be used where `SessionDetailViewHolder` is expected? Indicates __inheritance__.

Does `RelatedViewHolder` want only some/part of the behavior exposed by `SessionDetailViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 194 </span>        val binding: ItemSpeakerBinding
<span class="lineno"> 195 </span>    ) : SessionDetailViewHolder(binding.root)
<span class="lineno"> 196 </span>
<span class="lineno"> 197 </span>    <span class="error">class RelatedViewHolder(</span>
<span class="lineno"> 198 </span><span class="error">        val binding: ItemSessionBinding</span>
<span class="lineno"> 199 </span><span class="error">    ) : SessionDetailViewHolder(binding.root)</span>
<span class="lineno"> 200 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailAdapter.kt:201:5</span><span class="message">The class `HeaderViewHolder` is using inheritance, consider using composition instead.

Does `HeaderViewHolder` want to expose the complete interface (`empty public interface`) of `SessionDetailViewHolder` such that `HeaderViewHolder` can be used where `SessionDetailViewHolder` is expected? Indicates __inheritance__.

Does `HeaderViewHolder` want only some/part of the behavior exposed by `SessionDetailViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 198 </span>        val binding: ItemSessionBinding
<span class="lineno"> 199 </span>    ) : SessionDetailViewHolder(binding.root)
<span class="lineno"> 200 </span>
<span class="lineno"> 201 </span>    <span class="error">class HeaderViewHolder(</span>
<span class="lineno"> 202 </span><span class="error">        val binding: ItemGenericSectionHeaderBinding</span>
<span class="lineno"> 203 </span><span class="error">    ) : SessionDetailViewHolder(binding.root)</span>
<span class="lineno"> 204 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/sessiondetail/SessionDetailFragment.kt:75:1</span><span class="message">The class `SessionDetailFragment` is using inheritance, consider using composition instead.

Does `SessionDetailFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `SessionDetailFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `SessionDetailFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  72 </span>import javax.inject.Inject
<span class="lineno">  73 </span>import javax.inject.Named
<span class="lineno">  74 </span>
<span class="lineno">  75 </span><span class="error">class SessionDetailFragment : MainNavigationFragment(), SessionFeedbackFragment.Listener {</span>
<span class="lineno">  76 </span><span class="error"></span>
<span class="lineno">  77 </span><span class="error">    private var shareString = &quot;&quot;</span>
<span class="lineno">  78 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/settings/SettingsFragment.kt:39:1</span><span class="message">The class `SettingsFragment` is using inheritance, consider using composition instead.

Does `SettingsFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `SettingsFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `SettingsFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  36 </span>import com.google.samples.apps.iosched.util.doOnApplyWindowInsets
<span class="lineno">  37 </span>import javax.inject.Inject
<span class="lineno">  38 </span>
<span class="lineno">  39 </span><span class="error">class SettingsFragment : MainNavigationFragment() {</span>
<span class="lineno">  40 </span><span class="error">    @Inject lateinit var viewModelFactory: ViewModelProvider.Factory</span>
<span class="lineno">  41 </span><span class="error"></span>
<span class="lineno">  42 </span><span class="error">    private lateinit var viewModel: SettingsViewModel</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/speaker/SpeakerAdapter.kt:161:5</span><span class="message">The class `SpeakerInfoViewHolder` is using inheritance, consider using composition instead.

Does `SpeakerInfoViewHolder` want to expose the complete interface (`empty public interface`) of `SpeakerViewHolder` such that `SpeakerInfoViewHolder` can be used where `SpeakerViewHolder` is expected? Indicates __inheritance__.

Does `SpeakerInfoViewHolder` want only some/part of the behavior exposed by `SpeakerViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 158 </span> */
<span class="lineno"> 159 </span>sealed class SpeakerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
<span class="lineno"> 160 </span>
<span class="lineno"> 161 </span>    <span class="error">class SpeakerInfoViewHolder(</span>
<span class="lineno"> 162 </span><span class="error">        val binding: ItemSpeakerInfoBinding</span>
<span class="lineno"> 163 </span><span class="error">    ) : SpeakerViewHolder(binding.root)</span>
<span class="lineno"> 164 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/speaker/SpeakerAdapter.kt:165:5</span><span class="message">The class `SpeakerSessionViewHolder` is using inheritance, consider using composition instead.

Does `SpeakerSessionViewHolder` want to expose the complete interface (`empty public interface`) of `SpeakerViewHolder` such that `SpeakerSessionViewHolder` can be used where `SpeakerViewHolder` is expected? Indicates __inheritance__.

Does `SpeakerSessionViewHolder` want only some/part of the behavior exposed by `SpeakerViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 162 </span>        val binding: ItemSpeakerInfoBinding
<span class="lineno"> 163 </span>    ) : SpeakerViewHolder(binding.root)
<span class="lineno"> 164 </span>
<span class="lineno"> 165 </span>    <span class="error">class SpeakerSessionViewHolder(</span>
<span class="lineno"> 166 </span><span class="error">        val binding: ItemSessionBinding</span>
<span class="lineno"> 167 </span><span class="error">    ) : SpeakerViewHolder(binding.root)</span>
<span class="lineno"> 168 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/speaker/SpeakerAdapter.kt:169:5</span><span class="message">The class `HeaderViewHolder` is using inheritance, consider using composition instead.

Does `HeaderViewHolder` want to expose the complete interface (`empty public interface`) of `SpeakerViewHolder` such that `HeaderViewHolder` can be used where `SpeakerViewHolder` is expected? Indicates __inheritance__.

Does `HeaderViewHolder` want only some/part of the behavior exposed by `SpeakerViewHolder`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 166 </span>        val binding: ItemSessionBinding
<span class="lineno"> 167 </span>    ) : SpeakerViewHolder(binding.root)
<span class="lineno"> 168 </span>
<span class="lineno"> 169 </span>    <span class="error">class HeaderViewHolder(</span>
<span class="lineno"> 170 </span><span class="error">        val binding: ItemGenericSectionHeaderBinding</span>
<span class="lineno"> 171 </span><span class="error">    ) : SpeakerViewHolder(binding.root)</span>
<span class="lineno"> 172 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/ui/speaker/SpeakerFragment.kt:48:1</span><span class="message">The class `SpeakerFragment` is using inheritance, consider using composition instead.

Does `SpeakerFragment` want to expose the complete interface (`onViewCreated, onDetach, onAttach`) of `MainNavigationFragment` such that `SpeakerFragment` can be used where `MainNavigationFragment` is expected? Indicates __inheritance__.

Does `SpeakerFragment` want only some/part of the behavior exposed by `MainNavigationFragment`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  45 </span>import javax.inject.Inject
<span class="lineno">  46 </span>import javax.inject.Named
<span class="lineno">  47 </span>
<span class="lineno">  48 </span><span class="error">/**</span>
<span class="lineno">  49 </span><span class="error"> * Fragment displaying speaker details and their events.</span>
<span class="lineno">  50 </span><span class="error"> */</span>
<span class="lineno">  51 </span><span class="error">class SpeakerFragment : MainNavigationFragment(), OnOffsetChangedListener {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/main/java/com/google/samples/apps/iosched/util/signin/SignInResult.kt:23:1</span><span class="message">The class `SignInFailed` is using inheritance, consider using composition instead.

Does `SignInFailed` want to expose the complete interface (`empty public interface`) of `SignInResult` such that `SignInFailed` can be used where `SignInResult` is expected? Indicates __inheritance__.

Does `SignInFailed` want only some/part of the behavior exposed by `SignInResult`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>
<span class="lineno">  21 </span>sealed class SignInResult
<span class="lineno">  22 </span>object SignInSuccess : SignInResult()
<span class="lineno">  23 </span><span class="error">data class SignInFailed(val error: FirebaseUiException?) : SignInResult()</span>
<span class="lineno">  24 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/staging/java/com/google/samples/apps/iosched/shared/data/login/StagingSignInHandler.kt:83:1</span><span class="message">The class `StagingLoggedOutFirebaseUserInfo` is using inheritance, consider using composition instead.

Does `StagingLoggedOutFirebaseUserInfo` want to expose the complete interface (`getCreationTimestamp, getLastSignInTimestamp, getProviderId, getPhotoUrl, getDisplayName, isEmailVerified, getUid, getPhoneNumber, isAnonymous, getProviderData, getEmail, isRegistrationDataReady, isRegistered, isSignedIn`) of `StagingAuthenticatedUserInfo` such that `StagingLoggedOutFirebaseUserInfo` can be used where `StagingAuthenticatedUserInfo` is expected? Indicates __inheritance__.

Does `StagingLoggedOutFirebaseUserInfo` want only some/part of the behavior exposed by `StagingAuthenticatedUserInfo`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  80 </span>    }
<span class="lineno">  81 </span>}
<span class="lineno">  82 </span>
<span class="lineno">  83 </span><span class="error">class StagingLoggedOutFirebaseUserInfo(</span>
<span class="lineno">  84 </span><span class="error">    _context: Context</span>
<span class="lineno">  85 </span><span class="error">) : StagingAuthenticatedUserInfo(_context) {</span>
<span class="lineno">  86 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeAppDatabase.kt:28:1</span><span class="message">The class `FakeAppDatabase` is using inheritance, consider using composition instead.

Does `FakeAppDatabase` want to expose the complete interface (`codelabFtsDao, speakerFtsDao, sessionFtsDao`) of `AppDatabase` such that `FakeAppDatabase` can be used where `AppDatabase` is expected? Indicates __inheritance__.

Does `FakeAppDatabase` want only some/part of the behavior exposed by `AppDatabase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  25 </span>import com.google.samples.apps.iosched.shared.data.db.SpeakerFtsDao
<span class="lineno">  26 </span>import org.mockito.Mockito
<span class="lineno">  27 </span>
<span class="lineno">  28 </span><span class="error">class FakeAppDatabase : AppDatabase() {</span>
<span class="lineno">  29 </span><span class="error">    override fun sessionFtsDao(): SessionFtsDao {</span>
<span class="lineno">  30 </span><span class="error">        return Mockito.mock(SessionFtsDao::class.java)</span>
<span class="lineno">  31 </span><span class="error">    }</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/fakes/FakeStarEventUseCase.kt:26:1</span><span class="message">The class `FakeStarEventUseCase` is using inheritance, consider using composition instead.

Does `FakeStarEventUseCase` want to expose the complete interface (`execute`) of `StarEventAndNotifyUseCase` such that `FakeStarEventUseCase` can be used where `StarEventAndNotifyUseCase` is expected? Indicates __inheritance__.

Does `FakeStarEventUseCase` want only some/part of the behavior exposed by `StarEventAndNotifyUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  23 </span>import com.google.samples.apps.iosched.ui.schedule.TestUserEventDataSource
<span class="lineno">  24 </span>import com.nhaarman.mockito_kotlin.mock
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">class FakeStarEventUseCase : StarEventAndNotifyUseCase(</span>
<span class="lineno">  27 </span><span class="error">    DefaultSessionAndUserEventRepository(</span>
<span class="lineno">  28 </span><span class="error">        TestUserEventDataSource(),</span>
<span class="lineno">  29 </span><span class="error">        DefaultSessionRepository(TestDataRepository)</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/test/util/time/FakeIntervalMapperRule.kt:53:1</span><span class="message">The class `FakeSetIntervalLiveData` is using inheritance, consider using composition instead.

Does `FakeSetIntervalLiveData` want to expose the complete interface (`onInactive, onActive, updateValue`) of `SetIntervalLiveData` such that `FakeSetIntervalLiveData` can be used where `SetIntervalLiveData` is expected? Indicates __inheritance__.

Does `FakeSetIntervalLiveData` want only some/part of the behavior exposed by `SetIntervalLiveData`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  50 </span>    }
<span class="lineno">  51 </span>}
<span class="lineno">  52 </span>
<span class="lineno">  53 </span><span class="error">/**</span>
<span class="lineno">  54 </span><span class="error"> * Fake implementation of [SetIntervalLiveData] where the map function is executed</span>
<span class="lineno">  55 </span><span class="error"> * immediately.</span>
<span class="lineno">  56 </span><span class="error"> */</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModelTest.kt:508:1</span><span class="message">The class `FakeObserveUserAuthStateUseCase` is using inheritance, consider using composition instead.

Does `FakeObserveUserAuthStateUseCase` want to expose the complete interface (`execute`) of `ObserveUserAuthStateUseCase` such that `FakeObserveUserAuthStateUseCase` can be used where `ObserveUserAuthStateUseCase` is expected? Indicates __inheritance__.

Does `FakeObserveUserAuthStateUseCase` want only some/part of the behavior exposed by `ObserveUserAuthStateUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 505 </span>    override fun clearListener() {}
<span class="lineno"> 506 </span>}
<span class="lineno"> 507 </span>
<span class="lineno"> 508 </span><span class="error">class FakeObserveUserAuthStateUseCase(</span>
<span class="lineno"> 509 </span><span class="error">    user: Result&lt;AuthenticatedUserInfoBasic?&gt;?,</span>
<span class="lineno"> 510 </span><span class="error">    isRegistered: Result&lt;Boolean?&gt;</span>
<span class="lineno"> 511 </span><span class="error">) : ObserveUserAuthStateUseCase(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/mobile/src/test/java/com/google/samples/apps/iosched/ui/schedule/ScheduleViewModelTest.kt:517:1</span><span class="message">The class `FakeScheduleUiHintsShownUseCase` is using inheritance, consider using composition instead.

Does `FakeScheduleUiHintsShownUseCase` want to expose the complete interface (`execute`) of `ScheduleUiHintsShownUseCase` such that `FakeScheduleUiHintsShownUseCase` can be used where `ScheduleUiHintsShownUseCase` is expected? Indicates __inheritance__.

Does `FakeScheduleUiHintsShownUseCase` want only some/part of the behavior exposed by `ScheduleUiHintsShownUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno"> 514 </span>    mock {}
<span class="lineno"> 515 </span>)
<span class="lineno"> 516 </span>
<span class="lineno"> 517 </span><span class="error">class FakeScheduleUiHintsShownUseCase : ScheduleUiHintsShownUseCase(</span>
<span class="lineno"> 518 </span><span class="error">    preferenceStorage = FakePreferenceStorage()</span>
<span class="lineno"> 519 </span><span class="error">)</span>
<span class="lineno"> 520 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/data/job/ConferenceDataService.kt:26:1</span><span class="message">The class `ConferenceDataService` is using inheritance, consider using composition instead.

Does `ConferenceDataService` want to expose the complete interface (`onCreate`) of `DaggerJobService` such that `ConferenceDataService` can be used where `DaggerJobService` is expected? Indicates __inheritance__.

Does `ConferenceDataService` want only some/part of the behavior exposed by `DaggerJobService`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  23 </span>import timber.log.Timber
<span class="lineno">  24 </span>import javax.inject.Inject
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">/**</span>
<span class="lineno">  27 </span><span class="error"> * A Job that refreshes the conference data in the repository (if the app is active) and</span>
<span class="lineno">  28 </span><span class="error"> * in the cache (if the app is not active).</span>
<span class="lineno">  29 </span><span class="error"> */</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/RefreshConferenceDataUseCase.kt:23:1</span><span class="message">The class `RefreshConferenceDataUseCase` is using inheritance, consider using composition instead.

Does `RefreshConferenceDataUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `RefreshConferenceDataUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `RefreshConferenceDataUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import timber.log.Timber
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Forces a refresh in the conference data repository.</span>
<span class="lineno">  25 </span><span class="error"> */</span>
<span class="lineno">  26 </span><span class="error">open class RefreshConferenceDataUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/agenda/LoadAgendaUseCase.kt:25:1</span><span class="message">The class `LoadAgendaUseCase` is using inheritance, consider using composition instead.

Does `LoadAgendaUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `LoadAgendaUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `LoadAgendaUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  22 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  23 </span>import javax.inject.Inject
<span class="lineno">  24 </span>
<span class="lineno">  25 </span><span class="error">open class LoadAgendaUseCase @Inject constructor(</span>
<span class="lineno">  26 </span><span class="error">    private val repository: AgendaRepository</span>
<span class="lineno">  27 </span><span class="error">) : MediatorUseCase&lt;Unit, List&lt;Block&gt;&gt;() {</span>
<span class="lineno">  28 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/ar/LoadArDebugFlagUseCase.kt:23:1</span><span class="message">The class `LoadArDebugFlagUseCase` is using inheritance, consider using composition instead.

Does `LoadArDebugFlagUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `LoadArDebugFlagUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `LoadArDebugFlagUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.MediatorUseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * UseCase that loads if a signed in user can demo the AR feature (bypass teaser).</span>
<span class="lineno">  25 </span><span class="error"> * Should post Result.Success(true) to result when the signed in user can demo the AR feature.</span>
<span class="lineno">  26 </span><span class="error"> */</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/auth/ObserveUserAuthStateUseCase.kt:30:1</span><span class="message">The class `ObserveUserAuthStateUseCase` is using inheritance, consider using composition instead.

Does `ObserveUserAuthStateUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `ObserveUserAuthStateUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `ObserveUserAuthStateUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  27 </span>import javax.inject.Inject
<span class="lineno">  28 </span>import javax.inject.Singleton
<span class="lineno">  29 </span>
<span class="lineno">  30 </span><span class="error">/**</span>
<span class="lineno">  31 </span><span class="error"> * A [MediatorUseCase] that observes two data sources to generate an [AuthenticatedUserInfo]</span>
<span class="lineno">  32 </span><span class="error"> * that includes whether the user is registered (is an attendee).</span>
<span class="lineno">  33 </span><span class="error"> *</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/codelabs/GetCodelabsInfoCardShownUseCase.kt:23:1</span><span class="message">The class `GetCodelabsInfoCardShownUseCase` is using inheritance, consider using composition instead.

Does `GetCodelabsInfoCardShownUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `GetCodelabsInfoCardShownUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `GetCodelabsInfoCardShownUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">open class GetCodelabsInfoCardShownUseCase @Inject constructor(</span>
<span class="lineno">  24 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  25 </span><span class="error">) : UseCase&lt;Unit, Boolean&gt;() {</span>
<span class="lineno">  26 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/codelabs/LoadCodelabsUseCase.kt:24:1</span><span class="message">The class `LoadCodelabsUseCase` is using inheritance, consider using composition instead.

Does `LoadCodelabsUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadCodelabsUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadCodelabsUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  21 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  22 </span>import javax.inject.Inject
<span class="lineno">  23 </span>
<span class="lineno">  24 </span><span class="error">class LoadCodelabsUseCase @Inject constructor(private val repository: CodelabsRepository) :</span>
<span class="lineno">  25 </span><span class="error">    UseCase&lt;Unit, List&lt;Codelab&gt;&gt;() {</span>
<span class="lineno">  26 </span><span class="error"></span>
<span class="lineno">  27 </span><span class="error">    override fun execute(parameters: Unit): List&lt;Codelab&gt; {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/codelabs/SetCodelabsInfoCardShownUseCase.kt:23:1</span><span class="message">The class `SetCodelabsInfoCardShownUseCase` is using inheritance, consider using composition instead.

Does `SetCodelabsInfoCardShownUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `SetCodelabsInfoCardShownUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `SetCodelabsInfoCardShownUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Use case to record that the user has seen the Codelabs information card</span>
<span class="lineno">  25 </span><span class="error"> */</span>
<span class="lineno">  26 </span><span class="error">open class SetCodelabsInfoCardShownUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/feed/LoadAnnouncementsUseCase.kt:27:1</span><span class="message">The class `LoadAnnouncementsUseCase` is using inheritance, consider using composition instead.

Does `LoadAnnouncementsUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadAnnouncementsUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadAnnouncementsUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  24 </span>import org.threeten.bp.ZonedDateTime
<span class="lineno">  25 </span>import javax.inject.Inject
<span class="lineno">  26 </span>
<span class="lineno">  27 </span><span class="error">/**</span>
<span class="lineno">  28 </span><span class="error"> * Loads all feed items into a list.</span>
<span class="lineno">  29 </span><span class="error"> */</span>
<span class="lineno">  30 </span><span class="error">open class LoadAnnouncementsUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/feed/LoadCurrentMomentUseCase.kt:27:1</span><span class="message">The class `LoadCurrentMomentUseCase` is using inheritance, consider using composition instead.

Does `LoadCurrentMomentUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadCurrentMomentUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadCurrentMomentUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  24 </span>import org.threeten.bp.ZonedDateTime
<span class="lineno">  25 </span>import javax.inject.Inject
<span class="lineno">  26 </span>
<span class="lineno">  27 </span><span class="error">/**</span>
<span class="lineno">  28 </span><span class="error"> * Loads a [Moment] corresponding to the given time passed as a parameter.</span>
<span class="lineno">  29 </span><span class="error"> */</span>
<span class="lineno">  30 </span><span class="error">open class LoadCurrentMomentUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/feed/LoadMomentsUseCase.kt:24:1</span><span class="message">The class `LoadMomentsUseCase` is using inheritance, consider using composition instead.

Does `LoadMomentsUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadMomentsUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadMomentsUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  21 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  22 </span>import javax.inject.Inject
<span class="lineno">  23 </span>
<span class="lineno">  24 </span><span class="error">/**</span>
<span class="lineno">  25 </span><span class="error"> * Loads all moments into a list.</span>
<span class="lineno">  26 </span><span class="error"> */</span>
<span class="lineno">  27 </span><span class="error">open class LoadMomentsUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/logistics/LoadWifiInfoUseCase.kt:25:1</span><span class="message">The class `LoadWifiInfoUseCase` is using inheritance, consider using composition instead.

Does `LoadWifiInfoUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadWifiInfoUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadWifiInfoUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  22 </span>import javax.inject.Inject
<span class="lineno">  23 </span>import javax.inject.Singleton
<span class="lineno">  24 </span>
<span class="lineno">  25 </span><span class="error">@Singleton</span>
<span class="lineno">  26 </span><span class="error">open class LoadWifiInfoUseCase @Inject constructor(</span>
<span class="lineno">  27 </span><span class="error">    private val appConfigDataSource: AppConfigDataSource</span>
<span class="lineno">  28 </span><span class="error">) : UseCase&lt;Unit, ConferenceWifiInfo&gt;() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/LoadSelectedFiltersUseCase.kt:24:1</span><span class="message">The class `LoadSelectedFiltersUseCase` is using inheritance, consider using composition instead.

Does `LoadSelectedFiltersUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadSelectedFiltersUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadSelectedFiltersUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  21 </span>import com.google.samples.apps.iosched.shared.schedule.UserSessionMatcher
<span class="lineno">  22 </span>import javax.inject.Inject
<span class="lineno">  23 </span>
<span class="lineno">  24 </span><span class="error">/** Loads filter selections from persistent storage into a [UserSessionMatcher]. */</span>
<span class="lineno">  25 </span><span class="error">class LoadSelectedFiltersUseCase @Inject constructor(</span>
<span class="lineno">  26 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  27 </span><span class="error">) : UseCase&lt;UserSessionMatcher, Unit&gt;() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/MarkScheduleUiHintsShownUseCase.kt:23:1</span><span class="message">The class `MarkScheduleUiHintsShownUseCase` is using inheritance, consider using composition instead.

Does `MarkScheduleUiHintsShownUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `MarkScheduleUiHintsShownUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `MarkScheduleUiHintsShownUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Use case when the schedule UI hints are shown</span>
<span class="lineno">  25 </span><span class="error"> */</span>
<span class="lineno">  26 </span><span class="error">open class MarkScheduleUiHintsShownUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/MyLocationOptedInUseCase.kt:23:1</span><span class="message">The class `MyLocationOptedInUseCase` is using inheritance, consider using composition instead.

Does `MyLocationOptedInUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `MyLocationOptedInUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `MyLocationOptedInUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">open class MyLocationOptedInUseCase @Inject constructor(</span>
<span class="lineno">  24 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  25 </span><span class="error">) : UseCase&lt;Unit, Boolean&gt;() {</span>
<span class="lineno">  26 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/NotificationsPrefIsShownUseCase.kt:23:1</span><span class="message">The class `NotificationsPrefIsShownUseCase` is using inheritance, consider using composition instead.

Does `NotificationsPrefIsShownUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `NotificationsPrefIsShownUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `NotificationsPrefIsShownUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Returns whether the notifications preference has been shown to the user.</span>
<span class="lineno">  25 </span><span class="error"> */</span>
<span class="lineno">  26 </span><span class="error">open class NotificationsPrefIsShownUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/NotificationsPrefSaveActionUseCase.kt:23:1</span><span class="message">The class `NotificationsPrefSaveActionUseCase` is using inheritance, consider using composition instead.

Does `NotificationsPrefSaveActionUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `NotificationsPrefSaveActionUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `NotificationsPrefSaveActionUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Records the user preference if the user wants to receive notifications from iosched.</span>
<span class="lineno">  25 </span><span class="error"> */</span>
<span class="lineno">  26 </span><span class="error">open class NotificationsPrefSaveActionUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/NotificationsPrefShownActionUseCase.kt:23:1</span><span class="message">The class `NotificationsPrefShownActionUseCase` is using inheritance, consider using composition instead.

Does `NotificationsPrefShownActionUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `NotificationsPrefShownActionUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `NotificationsPrefShownActionUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Records whether the notifications preference has been shown to the user</span>
<span class="lineno">  25 </span><span class="error"> */</span>
<span class="lineno">  26 </span><span class="error">open class NotificationsPrefShownActionUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/OnboardingCompleteActionUseCase.kt:23:1</span><span class="message">The class `OnboardingCompleteActionUseCase` is using inheritance, consider using composition instead.

Does `OnboardingCompleteActionUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `OnboardingCompleteActionUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `OnboardingCompleteActionUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Records whether onboarding has been completed.</span>
<span class="lineno">  25 </span><span class="error"> */</span>
<span class="lineno">  26 </span><span class="error">open class OnboardingCompleteActionUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/OnboardingCompletedUseCase.kt:23:1</span><span class="message">The class `OnboardingCompletedUseCase` is using inheritance, consider using composition instead.

Does `OnboardingCompletedUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `OnboardingCompletedUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `OnboardingCompletedUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Returns whether onboarding has been completed.</span>
<span class="lineno">  25 </span><span class="error"> */</span>
<span class="lineno">  26 </span><span class="error">open class OnboardingCompletedUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/OptIntoMyLocationUseCase.kt:23:1</span><span class="message">The class `OptIntoMyLocationUseCase` is using inheritance, consider using composition instead.

Does `OptIntoMyLocationUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `OptIntoMyLocationUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `OptIntoMyLocationUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">open class OptIntoMyLocationUseCase @Inject constructor(</span>
<span class="lineno">  24 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  25 </span><span class="error">) : UseCase&lt;Boolean, Boolean&gt;() {</span>
<span class="lineno">  26 </span><span class="error">    override fun execute(parameters: Boolean): Boolean {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/SaveSelectedFiltersUseCase.kt:24:1</span><span class="message">The class `SaveSelectedFiltersUseCase` is using inheritance, consider using composition instead.

Does `SaveSelectedFiltersUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `SaveSelectedFiltersUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `SaveSelectedFiltersUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  21 </span>import com.google.samples.apps.iosched.shared.schedule.UserSessionMatcher
<span class="lineno">  22 </span>import javax.inject.Inject
<span class="lineno">  23 </span>
<span class="lineno">  24 </span><span class="error">/** Saves filter selections from a [UserSessionMatcher] to persistent storage. */</span>
<span class="lineno">  25 </span><span class="error">class SaveSelectedFiltersUseCase @Inject constructor(</span>
<span class="lineno">  26 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  27 </span><span class="error">) : UseCase&lt;UserSessionMatcher, Unit&gt;() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/ScheduleUiHintsShownUseCase.kt:23:1</span><span class="message">The class `ScheduleUiHintsShownUseCase` is using inheritance, consider using composition instead.

Does `ScheduleUiHintsShownUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `ScheduleUiHintsShownUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `ScheduleUiHintsShownUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Returns whether the schedule UI hints have been shown.</span>
<span class="lineno">  25 </span><span class="error"> */</span>
<span class="lineno">  26 </span><span class="error">open class ScheduleUiHintsShownUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/prefs/StopSnackbarActionUseCase.kt:23:1</span><span class="message">The class `StopSnackbarActionUseCase` is using inheritance, consider using composition instead.

Does `StopSnackbarActionUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `StopSnackbarActionUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `StopSnackbarActionUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">/**</span>
<span class="lineno">  24 </span><span class="error"> * Use case to update the preference whether Snackbar messages should be stopped.</span>
<span class="lineno">  25 </span><span class="error"> * Only the Snackbars that have R.string.dont_show actionId as its action, the rest</span>
<span class="lineno">  26 </span><span class="error"> * of the Snackbars should still show even after setting this preference as true.</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/search/SearchDbUseCase.kt:28:1</span><span class="message">The class `SearchDbUseCase` is using inheritance, consider using composition instead.

Does `SearchDbUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `SearchDbUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `SearchDbUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  25 </span>import com.google.samples.apps.iosched.shared.domain.search.Searchable.SearchedSpeaker
<span class="lineno">  26 </span>import javax.inject.Inject
<span class="lineno">  27 </span>
<span class="lineno">  28 </span><span class="error">/**</span>
<span class="lineno">  29 </span><span class="error"> * Performs a search in the database from a query string.</span>
<span class="lineno">  30 </span><span class="error"> */</span>
<span class="lineno">  31 </span><span class="error">class SearchDbUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/search/SearchUseCase.kt:25:1</span><span class="message">The class `SearchUseCase` is using inheritance, consider using composition instead.

Does `SearchUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `SearchUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `SearchUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  22 </span>import timber.log.Timber
<span class="lineno">  23 </span>import javax.inject.Inject
<span class="lineno">  24 </span>
<span class="lineno">  25 </span><span class="error">/**</span>
<span class="lineno">  26 </span><span class="error"> * Performs a search from a query string.</span>
<span class="lineno">  27 </span><span class="error"> *</span>
<span class="lineno">  28 </span><span class="error"> * A session is returned in the results if the title, description, or tag matches the query parameter.</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/search/Searchable.kt:28:5</span><span class="message">The class `SearchedSession` is using inheritance, consider using composition instead.

Does `SearchedSession` want to expose the complete interface (`empty public interface`) of `Searchable` such that `SearchedSession` can be used where `Searchable` is expected? Indicates __inheritance__.

Does `SearchedSession` want only some/part of the behavior exposed by `Searchable`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  25 </span> */
<span class="lineno">  26 </span>sealed class Searchable {
<span class="lineno">  27 </span>
<span class="lineno">  28 </span>    <span class="error">class SearchedSession(val session: Session) : Searchable()</span>
<span class="lineno">  29 </span>    class SearchedSpeaker(val speaker: Speaker) : Searchable()
<span class="lineno">  30 </span>    class SearchedCodelab(val codelab: Codelab) : Searchable()
<span class="lineno">  31 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/search/Searchable.kt:29:5</span><span class="message">The class `SearchedSpeaker` is using inheritance, consider using composition instead.

Does `SearchedSpeaker` want to expose the complete interface (`empty public interface`) of `Searchable` such that `SearchedSpeaker` can be used where `Searchable` is expected? Indicates __inheritance__.

Does `SearchedSpeaker` want only some/part of the behavior exposed by `Searchable`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  26 </span>sealed class Searchable {
<span class="lineno">  27 </span>
<span class="lineno">  28 </span>    class SearchedSession(val session: Session) : Searchable()
<span class="lineno">  29 </span>    <span class="error">class SearchedSpeaker(val speaker: Speaker) : Searchable()</span>
<span class="lineno">  30 </span>    class SearchedCodelab(val codelab: Codelab) : Searchable()
<span class="lineno">  31 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/search/Searchable.kt:30:5</span><span class="message">The class `SearchedCodelab` is using inheritance, consider using composition instead.

Does `SearchedCodelab` want to expose the complete interface (`empty public interface`) of `Searchable` such that `SearchedCodelab` can be used where `Searchable` is expected? Indicates __inheritance__.

Does `SearchedCodelab` want only some/part of the behavior exposed by `Searchable`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  27 </span>
<span class="lineno">  28 </span>    class SearchedSession(val session: Session) : Searchable()
<span class="lineno">  29 </span>    class SearchedSpeaker(val speaker: Speaker) : Searchable()
<span class="lineno">  30 </span>    <span class="error">class SearchedCodelab(val codelab: Codelab) : Searchable()</span>
<span class="lineno">  31 </span>}
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/GetsOriginOfConferenceData.kt:24:1</span><span class="message">The class `GetsOriginOfConferenceData` is using inheritance, consider using composition instead.

Does `GetsOriginOfConferenceData` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `GetsOriginOfConferenceData` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `GetsOriginOfConferenceData` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  21 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  22 </span>import javax.inject.Inject
<span class="lineno">  23 </span>
<span class="lineno">  24 </span><span class="error">/**</span>
<span class="lineno">  25 </span><span class="error"> * Gets offline sessions from the repository.</span>
<span class="lineno">  26 </span><span class="error"> */</span>
<span class="lineno">  27 </span><span class="error">open class GetsOriginOfConferenceData @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadFilteredUserSessionsUseCase.kt:32:1</span><span class="message">The class `LoadFilteredUserSessionsUseCase` is using inheritance, consider using composition instead.

Does `LoadFilteredUserSessionsUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `LoadFilteredUserSessionsUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `LoadFilteredUserSessionsUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  29 </span>import timber.log.Timber
<span class="lineno">  30 </span>import javax.inject.Inject
<span class="lineno">  31 </span>
<span class="lineno">  32 </span><span class="error">/**</span>
<span class="lineno">  33 </span><span class="error"> * Loads filtered sessions according to the provided parameters.</span>
<span class="lineno">  34 </span><span class="error"> */</span>
<span class="lineno">  35 </span><span class="error">open class LoadFilteredUserSessionsUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadPinnedSessionsJsonUseCase.kt:32:1</span><span class="message">The class `LoadPinnedSessionsJsonUseCase` is using inheritance, consider using composition instead.

Does `LoadPinnedSessionsJsonUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `LoadPinnedSessionsJsonUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `LoadPinnedSessionsJsonUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  29 </span>import com.google.samples.apps.iosched.shared.util.toEpochMilli
<span class="lineno">  30 </span>import javax.inject.Inject
<span class="lineno">  31 </span>
<span class="lineno">  32 </span><span class="error">/**</span>
<span class="lineno">  33 </span><span class="error"> * Load a list of pinned (starred or reserved) [UserSession]s for a given user as a json format.</span>
<span class="lineno">  34 </span><span class="error"> *</span>
<span class="lineno">  35 </span><span class="error"> * Example JSON is structured as</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadSessionSyncUseCase.kt:25:1</span><span class="message">The class `LoadSessionSyncUseCase` is using inheritance, consider using composition instead.

Does `LoadSessionSyncUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadSessionSyncUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadSessionSyncUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  22 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  23 </span>import javax.inject.Inject
<span class="lineno">  24 </span>
<span class="lineno">  25 </span><span class="error">open class LoadSessionSyncUseCase @Inject constructor(</span>
<span class="lineno">  26 </span><span class="error">    private val repository: SessionRepository</span>
<span class="lineno">  27 </span><span class="error">) : UseCase&lt;SessionId, Session&gt;() {</span>
<span class="lineno">  28 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadSessionUseCase.kt:26:1</span><span class="message">The class `LoadSessionUseCase` is using inheritance, consider using composition instead.

Does `LoadSessionUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `LoadSessionUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `LoadSessionUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  23 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  24 </span>import javax.inject.Inject
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">open class LoadSessionUseCase @Inject constructor(private val repository: SessionRepository) :</span>
<span class="lineno">  27 </span><span class="error">    MediatorUseCase&lt;String, Session&gt;() {</span>
<span class="lineno">  28 </span><span class="error"></span>
<span class="lineno">  29 </span><span class="error">    override fun execute(parameters: SessionId) {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadUserSessionSyncUseCase.kt:25:1</span><span class="message">The class `LoadUserSessionSyncUseCase` is using inheritance, consider using composition instead.

Does `LoadUserSessionSyncUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadUserSessionSyncUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadUserSessionSyncUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  22 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  23 </span>import javax.inject.Inject
<span class="lineno">  24 </span>
<span class="lineno">  25 </span><span class="error">/**</span>
<span class="lineno">  26 </span><span class="error"> * A [UseCase] that returns the [UserSession]s for a user.</span>
<span class="lineno">  27 </span><span class="error"> */</span>
<span class="lineno">  28 </span><span class="error">class LoadUserSessionSyncUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadUserSessionUseCase.kt:29:1</span><span class="message">The class `LoadUserSessionUseCase` is using inheritance, consider using composition instead.

Does `LoadUserSessionUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `LoadUserSessionUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `LoadUserSessionUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  26 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  27 </span>import javax.inject.Inject
<span class="lineno">  28 </span>
<span class="lineno">  29 </span><span class="error">open class LoadUserSessionUseCase @Inject constructor(</span>
<span class="lineno">  30 </span><span class="error">    private val userEventRepository: DefaultSessionAndUserEventRepository</span>
<span class="lineno">  31 </span><span class="error">) : MediatorUseCase&lt;Pair&lt;String?, SessionId&gt;, LoadUserSessionUseCaseResult&gt;() {</span>
<span class="lineno">  32 </span><span class="error"></span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/LoadUserSessionsUseCase.kt:27:1</span><span class="message">The class `LoadUserSessionsUseCase` is using inheritance, consider using composition instead.

Does `LoadUserSessionsUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `LoadUserSessionsUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `LoadUserSessionsUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  24 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  25 </span>import javax.inject.Inject
<span class="lineno">  26 </span>
<span class="lineno">  27 </span><span class="error">/**</span>
<span class="lineno">  28 </span><span class="error"> * Load [UserSession]s for a given list of sessions.</span>
<span class="lineno">  29 </span><span class="error"> */</span>
<span class="lineno">  30 </span><span class="error">open class LoadUserSessionsUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/sessions/ObserveConferenceDataUseCase.kt:24:1</span><span class="message">The class `ObserveConferenceDataUseCase` is using inheritance, consider using composition instead.

Does `ObserveConferenceDataUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `ObserveConferenceDataUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `ObserveConferenceDataUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  21 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  22 </span>import javax.inject.Inject
<span class="lineno">  23 </span>
<span class="lineno">  24 </span><span class="error">/**</span>
<span class="lineno">  25 </span><span class="error"> * Forces a refresh in the conference data repository.</span>
<span class="lineno">  26 </span><span class="error"> */</span>
<span class="lineno">  27 </span><span class="error">open class ObserveConferenceDataUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/settings/GetAnalyticsSettingUseCase.kt:23:1</span><span class="message">The class `GetAnalyticsSettingUseCase` is using inheritance, consider using composition instead.

Does `GetAnalyticsSettingUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `GetAnalyticsSettingUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `GetAnalyticsSettingUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">open class GetAnalyticsSettingUseCase @Inject constructor(</span>
<span class="lineno">  24 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  25 </span><span class="error">) : UseCase&lt;Unit, Boolean&gt;() {</span>
<span class="lineno">  26 </span><span class="error">    override fun execute(parameters: Unit) = preferenceStorage.sendUsageStatistics</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/settings/GetAvailableThemesUseCase.kt:25:1</span><span class="message">The class `GetAvailableThemesUseCase` is using inheritance, consider using composition instead.

Does `GetAvailableThemesUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `GetAvailableThemesUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `GetAvailableThemesUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  22 </span>import com.google.samples.apps.iosched.shared.domain.internal.SyncScheduler
<span class="lineno">  23 </span>import javax.inject.Inject
<span class="lineno">  24 </span>
<span class="lineno">  25 </span><span class="error">class GetAvailableThemesUseCase @Inject constructor() : UseCase&lt;Unit, List&lt;Theme&gt;&gt;() {</span>
<span class="lineno">  26 </span><span class="error">    init {</span>
<span class="lineno">  27 </span><span class="error">        taskScheduler = SyncScheduler</span>
<span class="lineno">  28 </span><span class="error">    }</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/settings/GetNotificationsSettingUseCase.kt:23:1</span><span class="message">The class `GetNotificationsSettingUseCase` is using inheritance, consider using composition instead.

Does `GetNotificationsSettingUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `GetNotificationsSettingUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `GetNotificationsSettingUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">open class GetNotificationsSettingUseCase @Inject constructor(</span>
<span class="lineno">  24 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  25 </span><span class="error">) : UseCase&lt;Unit, Boolean&gt;() {</span>
<span class="lineno">  26 </span><span class="error">    override fun execute(parameters: Unit) = preferenceStorage.preferToReceiveNotifications</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/settings/GetThemeUseCase.kt:26:1</span><span class="message">The class `GetThemeUseCase` is using inheritance, consider using composition instead.

Does `GetThemeUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `GetThemeUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `GetThemeUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  23 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  24 </span>import javax.inject.Inject
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">open class GetThemeUseCase @Inject constructor(</span>
<span class="lineno">  27 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  28 </span><span class="error">) : UseCase&lt;Unit, Theme&gt;() {</span>
<span class="lineno">  29 </span><span class="error">    override fun execute(parameters: Unit): Theme {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/settings/GetTimeZoneUseCase.kt:23:1</span><span class="message">The class `GetTimeZoneUseCase` is using inheritance, consider using composition instead.

Does `GetTimeZoneUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `GetTimeZoneUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `GetTimeZoneUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">open class GetTimeZoneUseCase @Inject constructor(</span>
<span class="lineno">  24 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  25 </span><span class="error">) : UseCase&lt;Unit, Boolean&gt;() {</span>
<span class="lineno">  26 </span><span class="error">    override fun execute(parameters: Unit) = preferenceStorage.preferConferenceTimeZone</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/settings/ObserveThemeModeUseCase.kt:26:1</span><span class="message">The class `ObserveThemeModeUseCase` is using inheritance, consider using composition instead.

Does `ObserveThemeModeUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `ObserveThemeModeUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `ObserveThemeModeUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  23 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  24 </span>import javax.inject.Inject
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">open class ObserveThemeModeUseCase @Inject constructor(</span>
<span class="lineno">  27 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  28 </span><span class="error">) : MediatorUseCase&lt;Unit, Theme&gt;() {</span>
<span class="lineno">  29 </span><span class="error">    override fun execute(parameters: Unit) {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/settings/SetAnalyticsSettingUseCase.kt:23:1</span><span class="message">The class `SetAnalyticsSettingUseCase` is using inheritance, consider using composition instead.

Does `SetAnalyticsSettingUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `SetAnalyticsSettingUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `SetAnalyticsSettingUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">open class SetAnalyticsSettingUseCase @Inject constructor(</span>
<span class="lineno">  24 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  25 </span><span class="error">) : UseCase&lt;Boolean, Boolean&gt;() {</span>
<span class="lineno">  26 </span><span class="error">    override fun execute(parameters: Boolean): Boolean {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/settings/SetThemeUseCase.kt:24:1</span><span class="message">The class `SetThemeUseCase` is using inheritance, consider using composition instead.

Does `SetThemeUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `SetThemeUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `SetThemeUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  21 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  22 </span>import javax.inject.Inject
<span class="lineno">  23 </span>
<span class="lineno">  24 </span><span class="error">open class SetThemeUseCase @Inject constructor(</span>
<span class="lineno">  25 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  26 </span><span class="error">) : UseCase&lt;Theme, Unit&gt;() {</span>
<span class="lineno">  27 </span><span class="error">    override fun execute(parameters: Theme) {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/settings/SetTimeZoneUseCase.kt:23:1</span><span class="message">The class `SetTimeZoneUseCase` is using inheritance, consider using composition instead.

Does `SetTimeZoneUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `SetTimeZoneUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `SetTimeZoneUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">open class SetTimeZoneUseCase @Inject constructor(</span>
<span class="lineno">  24 </span><span class="error">    private val preferenceStorage: PreferenceStorage</span>
<span class="lineno">  25 </span><span class="error">) : UseCase&lt;Boolean, Boolean&gt;() {</span>
<span class="lineno">  26 </span><span class="error">    override fun execute(parameters: Boolean): Boolean {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/speakers/LoadSpeakerSessionsUseCase.kt:26:1</span><span class="message">The class `LoadSpeakerUseCase` is using inheritance, consider using composition instead.

Does `LoadSpeakerUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadSpeakerUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadSpeakerUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  23 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  24 </span>import javax.inject.Inject
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">/**</span>
<span class="lineno">  27 </span><span class="error"> * Loads a [Speaker] and the IDs of any [com.google.samples.apps.iosched.model.Session]s</span>
<span class="lineno">  28 </span><span class="error"> * they are speaking in.</span>
<span class="lineno">  29 </span><span class="error"> */</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/tags/LoadTagsByCategoryUseCase.kt:23:1</span><span class="message">The class `LoadTagsByCategoryUseCase` is using inheritance, consider using composition instead.

Does `LoadTagsByCategoryUseCase` want to expose the complete interface (`execute`) of `LoadTagsUseCase` such that `LoadTagsByCategoryUseCase` can be used where `LoadTagsUseCase` is expected? Indicates __inheritance__.

Does `LoadTagsByCategoryUseCase` want only some/part of the behavior exposed by `LoadTagsUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  20 </span>import com.google.samples.apps.iosched.shared.data.tag.TagRepository
<span class="lineno">  21 </span>import javax.inject.Inject
<span class="lineno">  22 </span>
<span class="lineno">  23 </span><span class="error">open class LoadTagsByCategoryUseCase @Inject constructor(repository: TagRepository) :</span>
<span class="lineno">  24 </span><span class="error">    LoadTagsUseCase(repository) {</span>
<span class="lineno">  25 </span><span class="error"></span>
<span class="lineno">  26 </span><span class="error">    override fun execute(parameters: Unit): List&lt;Tag&gt; {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/tags/LoadTagsUseCase.kt:24:1</span><span class="message">The class `LoadTagsUseCase` is using inheritance, consider using composition instead.

Does `LoadTagsUseCase` want to expose the complete interface (`executeNow, invoke, invoke`) of `UseCase` such that `LoadTagsUseCase` can be used where `UseCase` is expected? Indicates __inheritance__.

Does `LoadTagsUseCase` want only some/part of the behavior exposed by `UseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  21 </span>import com.google.samples.apps.iosched.shared.domain.UseCase
<span class="lineno">  22 </span>import javax.inject.Inject
<span class="lineno">  23 </span>
<span class="lineno">  24 </span><span class="error">/**</span>
<span class="lineno">  25 </span><span class="error"> * Loads tags from a repository. Sub classes should manipulate the tags' order for their use case.</span>
<span class="lineno">  26 </span><span class="error"> */</span>
<span class="lineno">  27 </span><span class="error">open class LoadTagsUseCase @Inject constructor(private val repository: TagRepository) :</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/users/FeedbackUseCase.kt:27:1</span><span class="message">The class `FeedbackUseCase` is using inheritance, consider using composition instead.

Does `FeedbackUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `FeedbackUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `FeedbackUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  24 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  25 </span>import javax.inject.Inject
<span class="lineno">  26 </span>
<span class="lineno">  27 </span><span class="error">open class FeedbackUseCase @Inject constructor(</span>
<span class="lineno">  28 </span><span class="error">    private val endpoint: FeedbackEndpoint,</span>
<span class="lineno">  29 </span><span class="error">    private val repository: SessionAndUserEventRepository</span>
<span class="lineno">  30 </span><span class="error">) : MediatorUseCase&lt;FeedbackParameter, Unit&gt;() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/users/ReservationActionUseCase.kt:29:1</span><span class="message">The class `ReservationActionUseCase` is using inheritance, consider using composition instead.

Does `ReservationActionUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `ReservationActionUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `ReservationActionUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  26 </span>import timber.log.Timber
<span class="lineno">  27 </span>import javax.inject.Inject
<span class="lineno">  28 </span>
<span class="lineno">  29 </span><span class="error">/**</span>
<span class="lineno">  30 </span><span class="error"> * Sends a request to reserve or cancel a reservation for a session.</span>
<span class="lineno">  31 </span><span class="error"> */</span>
<span class="lineno">  32 </span><span class="error">open class ReservationActionUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/users/ReservationActionUseCase.kt:76:5</span><span class="message">The class `RequestAction` is using inheritance, consider using composition instead.

Does `RequestAction` want to expose the complete interface (`empty public interface`) of `ReservationRequestAction` such that `RequestAction` can be used where `ReservationRequestAction` is expected? Indicates __inheritance__.

Does `RequestAction` want only some/part of the behavior exposed by `ReservationRequestAction`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  73 </span>)
<span class="lineno">  74 </span>
<span class="lineno">  75 </span>sealed class ReservationRequestAction {
<span class="lineno">  76 </span>    <span class="error">class RequestAction : ReservationRequestAction() {</span>
<span class="lineno">  77 </span><span class="error">        override fun equals(other: Any?): Boolean {</span>
<span class="lineno">  78 </span><span class="error">            return other is RequestAction</span>
<span class="lineno">  79 </span><span class="error">        }</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/users/ReservationActionUseCase.kt:89:5</span><span class="message">The class `CancelAction` is using inheritance, consider using composition instead.

Does `CancelAction` want to expose the complete interface (`empty public interface`) of `ReservationRequestAction` such that `CancelAction` can be used where `ReservationRequestAction` is expected? Indicates __inheritance__.

Does `CancelAction` want only some/part of the behavior exposed by `ReservationRequestAction`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  86 </span>        }
<span class="lineno">  87 </span>    }
<span class="lineno">  88 </span>
<span class="lineno">  89 </span>    <span class="error">class CancelAction : ReservationRequestAction() {</span>
<span class="lineno">  90 </span><span class="error">        override fun equals(other: Any?): Boolean {</span>
<span class="lineno">  91 </span><span class="error">            return other is CancelAction</span>
<span class="lineno">  92 </span><span class="error">        }</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/users/ReservationActionUseCase.kt:102:5</span><span class="message">The class `SwapAction` is using inheritance, consider using composition instead.

Does `SwapAction` want to expose the complete interface (`empty public interface`) of `ReservationRequestAction` such that `SwapAction` can be used where `ReservationRequestAction` is expected? Indicates __inheritance__.

Does `SwapAction` want only some/part of the behavior exposed by `ReservationRequestAction`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  99 </span>        }
<span class="lineno"> 100 </span>    }
<span class="lineno"> 101 </span>
<span class="lineno"> 102 </span>    <span class="error">/**</span>
<span class="lineno"> 103 </span><span class="error">     * The action when the user is trying to reserve a session, but there is already an overlapping</span>
<span class="lineno"> 104 </span><span class="error">     * reservation.</span>
<span class="lineno"> 105 </span><span class="error">     */</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/users/StarEventAndNotifyUseCase.kt:26:1</span><span class="message">The class `StarEventAndNotifyUseCase` is using inheritance, consider using composition instead.

Does `StarEventAndNotifyUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `StarEventAndNotifyUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `StarEventAndNotifyUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  23 </span>import com.google.samples.apps.iosched.shared.result.Result
<span class="lineno">  24 </span>import javax.inject.Inject
<span class="lineno">  25 </span>
<span class="lineno">  26 </span><span class="error">open class StarEventAndNotifyUseCase @Inject constructor(</span>
<span class="lineno">  27 </span><span class="error">    private val repository: SessionAndUserEventRepository,</span>
<span class="lineno">  28 </span><span class="error">    private val alarmUpdater: StarReserveNotificationAlarmUpdater</span>
<span class="lineno">  29 </span><span class="error">) : MediatorUseCase&lt;StarEventParameter, StarUpdatedStatus&gt;() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/domain/users/SwapActionUseCase.kt:27:1</span><span class="message">The class `SwapActionUseCase` is using inheritance, consider using composition instead.

Does `SwapActionUseCase` want to expose the complete interface (`execute, observe`) of `MediatorUseCase` such that `SwapActionUseCase` can be used where `MediatorUseCase` is expected? Indicates __inheritance__.

Does `SwapActionUseCase` want only some/part of the behavior exposed by `MediatorUseCase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  24 </span>import timber.log.Timber
<span class="lineno">  25 </span>import javax.inject.Inject
<span class="lineno">  26 </span>
<span class="lineno">  27 </span><span class="error">/**</span>
<span class="lineno">  28 </span><span class="error"> * Sends a request to replace reservations.</span>
<span class="lineno">  29 </span><span class="error"> */</span>
<span class="lineno">  30 </span><span class="error">open class SwapActionUseCase @Inject constructor(</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/fcm/IoschedFirebaseMessagingService.kt:30:1</span><span class="message">The class `IoschedFirebaseMessagingService` is using inheritance, consider using composition instead.

Does `IoschedFirebaseMessagingService` want to expose the complete interface (`onCreate`) of `DaggerFirebaseMessagingService` such that `IoschedFirebaseMessagingService` can be used where `DaggerFirebaseMessagingService` is expected? Indicates __inheritance__.

Does `IoschedFirebaseMessagingService` want only some/part of the behavior exposed by `DaggerFirebaseMessagingService`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  27 </span>import timber.log.Timber
<span class="lineno">  28 </span>import java.util.concurrent.TimeUnit
<span class="lineno">  29 </span>
<span class="lineno">  30 </span><span class="error">/**</span>
<span class="lineno">  31 </span><span class="error"> * Receives Firebase Cloud Messages and starts a [ConferenceDataService] to download new data.</span>
<span class="lineno">  32 </span><span class="error"> */</span>
<span class="lineno">  33 </span><span class="error">class IoschedFirebaseMessagingService : DaggerFirebaseMessagingService() {</span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/result/Result.kt:27:5</span><span class="message">The class `Success` is using inheritance, consider using composition instead.

Does `Success` want to expose the complete interface (`toString`) of `Result` such that `Success` can be used where `Result` is expected? Indicates __inheritance__.

Does `Success` want only some/part of the behavior exposed by `Result`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  24 </span> */
<span class="lineno">  25 </span>sealed class Result&lt;out R&gt; {
<span class="lineno">  26 </span>
<span class="lineno">  27 </span>    <span class="error">data class Success&lt;out T&gt;(val data: T) : Result&lt;T&gt;()</span>
<span class="lineno">  28 </span>    data class Error(val exception: Exception) : Result&lt;Nothing&gt;()
<span class="lineno">  29 </span>    object Loading : Result&lt;Nothing&gt;()
<span class="lineno">  30 </span>
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/main/java/com/google/samples/apps/iosched/shared/result/Result.kt:28:5</span><span class="message">The class `Error` is using inheritance, consider using composition instead.

Does `Error` want to expose the complete interface (`toString`) of `Result` such that `Error` can be used where `Result` is expected? Indicates __inheritance__.

Does `Error` want only some/part of the behavior exposed by `Result`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  25 </span>sealed class Result&lt;out R&gt; {
<span class="lineno">  26 </span>
<span class="lineno">  27 </span>    data class Success&lt;out T&gt;(val data: T) : Result&lt;T&gt;()
<span class="lineno">  28 </span>    <span class="error">data class Error(val exception: Exception) : Result&lt;Nothing&gt;()</span>
<span class="lineno">  29 </span>    object Loading : Result&lt;Nothing&gt;()
<span class="lineno">  30 </span>
<span class="lineno">  31 </span>    override fun toString(): String {
</code></pre>
      </li>
      <li><span class="location">/Users/mariuskohmann/Code/School/master/code/iosched/shared/src/test/java/com/google/samples/apps/iosched/test/util/FakeAppDatabase.kt:28:1</span><span class="message">The class `FakeAppDatabase` is using inheritance, consider using composition instead.

Does `FakeAppDatabase` want to expose the complete interface (`codelabFtsDao, speakerFtsDao, sessionFtsDao`) of `AppDatabase` such that `FakeAppDatabase` can be used where `AppDatabase` is expected? Indicates __inheritance__.

Does `FakeAppDatabase` want only some/part of the behavior exposed by `AppDatabase`? Indicates __Composition__.</span>
        <pre><code><span class="lineno">  25 </span>import com.google.samples.apps.iosched.shared.data.db.SpeakerFtsDao
<span class="lineno">  26 </span>import org.mockito.Mockito
<span class="lineno">  27 </span>
<span class="lineno">  28 </span><span class="error">class FakeAppDatabase : AppDatabase() {</span>
<span class="lineno">  29 </span><span class="error">    override fun sessionFtsDao(): SessionFtsDao {</span>
<span class="lineno">  30 </span><span class="error">        return Mockito.mock(SessionFtsDao::class.java)</span>
<span class="lineno">  31 </span><span class="error">    }</span>
</code></pre>
      </li>
    </ul>
  </details>
</div>


generated with <a href="https://arturbosch.github.io/detekt">detekt version 1.7.4</a> on 2020-04-23 10:03:09 UTC.

</body>
</html>