reports/output-iosched.html
<!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("Use setOnRateListener")</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<Announcement> {</span>
<span class="lineno"> 115 </span><span class="error"> throw Exception("Error!")</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<EventFilter> {</span>
<span class="lineno"> 473 </span><span class="error"> throw Exception("Testing exception")</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<Boolean?>) :
<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<Result<Boolean?>?> {
<span class="lineno"> 491 </span> return MutableLiveData<Result<Boolean?>?>().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<Result<Boolean?>?>().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<AuthenticatedUserInfoBasic?>?
<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<Result<AuthenticatedUserInfoBasic?>> =
<span class="lineno"> 503 </span> MutableLiveData<Result<AuthenticatedUserInfoBasic?>>().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<Result<AuthenticatedUserInfoBasic?>> =
<span class="lineno"> 503 </span> MutableLiveData<Result<AuthenticatedUserInfoBasic?>>().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("not implemented")
</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("Bootstrap data source doesn't have remote data")</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("Test")</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("Test")</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<Announcement> {</span>
<span class="lineno"> 91 </span><span class="error"> throw Exception("Error!")</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("Error!")
<span class="lineno"> 92 </span> }
<span class="lineno"> 93 </span>
<span class="lineno"> 94 </span> <span class="error">override fun getMoments(): List<Moment> {</span>
<span class="lineno"> 95 </span><span class="error"> throw Exception("Error!")</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<Announcement> {</span>
<span class="lineno"> 104 </span><span class="error"> throw Exception("Error!")</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("Error!")
<span class="lineno"> 105 </span> }
<span class="lineno"> 106 </span>
<span class="lineno"> 107 </span> <span class="error">override fun getMoments(): List<Moment> {</span>
<span class="lineno"> 108 </span><span class="error"> throw Exception("Error!")</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<Session> {</span>
<span class="lineno"> 227 </span><span class="error"> throw Exception("test")</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("test")
<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("test")</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("test")
<span class="lineno"> 232 </span> }
<span class="lineno"> 233 </span>
<span class="lineno"> 234 </span> <span class="error">override fun getConferenceDays(): List<ConferenceDay> {</span>
<span class="lineno"> 235 </span><span class="error"> throw Exception("test")</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("not implemented")
<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<ConferenceDay> {
<span class="lineno"> 169 </span> TODO("not implemented")
</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("not implemented")
<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("not implemented")
<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<ConferenceDay> {
<span class="lineno"> 225 </span> TODO("not implemented")
</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<Result<Unit>> {</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<Result<ObservableUserEvents>> {</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<Result<LoadUserSessionUseCaseResult>> {</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<UserEvent> {</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<ConferenceDay> {
<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<ConferenceDay> {</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 = "https://codelabs.developers.google.com"</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<M, in VH : ViewHolder>(</span>
<span class="lineno"> 60 </span><span class="error"> val modelClass: Class<out M></span>
<span class="lineno"> 61 </span><span class="error">) : DiffUtil.ItemCallback<M>() {</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 & 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<Event<SessionId>>()</span>
<span class="lineno"> 29 </span><span class="error"> override val navigateToSignInDialogAction = MutableLiveData<Event<Unit>>()</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<AuthenticatedUserInfo?>()</span>
<span class="lineno"> 31 </span><span class="error"> override val currentUserImageUri = MutableLiveData<Uri?>()</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 = "America/Los_Angeles"</span>
<span class="lineno"> 28 </span><span class="error"> val startTimeString = "2018-05-08T07:00:00-07:00[$timeZone]"</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<UserEventsResult> = MutableLiveData(),</span>
<span class="lineno"> 39 </span><span class="error"> private val userEventResult: MutableLiveData<UserEventResult> = 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: "TRACK", name: "ANDROID"} 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<Announcement>
<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<Moment>
<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 = "testuser"
<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<UserEventsResult> = MutableLiveData(),</span>
<span class="lineno"> 39 </span><span class="error"> private val userEventResult: MutableLiveData<UserEventResult> = 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 -> R.layout.item_codelab</span>
<span class="lineno"> 82 </span><span class="error"> is CodelabsInformationCard -> R.layout.item_codelabs_information_card</span>
<span class="lineno"> 83 </span><span class="error"> is CodelabsHeaderItem -> 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 -> userSessionMatcher.setShowPinnedEventsOnly(enabled)</span>
<span class="lineno"> 319 </span><span class="error"> is TagFilter -> {</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 -> VIEW_TYPE_HEADING</span>
<span class="lineno"> 83 </span><span class="error"> is EventFilter -> VIEW_TYPE_FILTER</span>
<span class="lineno"> 84 </span><span class="error"> else -> throw IllegalArgumentException("Unknown item type")</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 -> holder.bind(getItem(position) as SectionHeader)</span>
<span class="lineno"> 123 </span><span class="error"> is FilterViewHolder -> 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("searchResultIcon")
<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 -> R.drawable.ic_event</span>
<span class="lineno"> 33 </span><span class="error"> SPEAKER -> R.drawable.ic_account_box</span>
<span class="lineno"> 34 </span><span class="error"> CODELAB -> 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 ->
<span class="lineno"> 76 </span> <span class="error">when (searched) {</span>
<span class="lineno"> 77 </span><span class="error"> is SearchedSession -> {</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 -> {</span>
<span class="lineno"> 117 </span><span class="error"> val sessionId = searchResult.objectId</span>
<span class="lineno"> 118 </span><span class="error"> analyticsHelper.logUiEvent("Session: $sessionId",</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 -> R.string.reservation_new</span>
<span class="lineno"> 35 </span><span class="error"> RESERVATIONS_REPLACED -> R.string.reservation_replaced</span>
<span class="lineno"> 36 </span><span class="error"> CHANGES_IN_WAITLIST -> 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 -> 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 -> R.layout.item_session_info</span>
<span class="lineno"> 121 </span><span class="error"> is Speaker -> R.layout.item_speaker</span>
<span class="lineno"> 122 </span><span class="error"> is UserSession -> 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 -> 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 -> 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 -> getString(R.string.settings_theme_light)</span>
<span class="lineno"> 77 </span><span class="error"> Theme.DARK -> getString(R.string.settings_theme_dark)</span>
<span class="lineno"> 78 </span><span class="error"> Theme.SYSTEM -> 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 -> 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("WrongConstant")
<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 -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES</span>
<span class="lineno"> 186 </span><span class="error"> Theme.LIGHT -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_NO</span>
<span class="lineno"> 187 </span><span class="error"> Theme.SYSTEM -> 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 -> imageUri(imageView, momentImageUrlDarkTheme?.toUri(), null)</span>
<span class="lineno"> 79 </span><span class="error"> else -> 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 -> null // If there's no request result, there's no error</span>
<span class="lineno"> 113 </span><span class="error"> RESERVE_SUCCEEDED -> null</span>
<span class="lineno"> 114 </span><span class="error"> RESERVE_WAITLISTED -> 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 -> RESERVE_REQ_ACTION</span>
<span class="lineno"> 474 </span><span class="error"> is CancelAction -> 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 -> REQUEST_QUEUE_ACTION_RESERVE</span>
<span class="lineno"> 482 </span><span class="error"> is CancelAction -> 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 ->
<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 -> {</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 ->
<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 -> {</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 -> {</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 ->
<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 -> {</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<ObservableUserEvents> ->
<span class="lineno"> 50 </span> <span class="error">when (sessions) {</span>
<span class="lineno"> 51 </span><span class="error"> is Success -> processEvents(userId, sessions.data)</span>
<span class="lineno"> 52 </span><span class="error"> is Error -> 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<ObservableUserEvents> ->
<span class="lineno"> 92 </span> <span class="error">when (sessions) {</span>
<span class="lineno"> 93 </span><span class="error"> is Success -> 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<*>`, with new implementations of the interface for every class.</span>
<pre><code><span class="lineno"> 29 </span> object Loading : Result<Nothing>()
<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<*> -> "Success[data=$data]"</span>
<span class="lineno"> 34 </span><span class="error"> is Error -> "Error[exception=$exception]"</span>
<span class="lineno"> 35 </span><span class="error"> Loading -> "Loading"</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 = "https://codelabs.developers.google.com"</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<ZoneId>,</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<LoadingIndicator, LoadingViewHolder>(</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<AnnouncementsEmpty, EmptyViewHolder>(</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 = "dialog_need_to_sign_in"</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<CountdownItem, CountdownViewHolder>(</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<AuthenticatedUserInfo?>,</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<SectionHeader, SectionHeaderViewHolder>(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<FeedSessions, FeedSessionsViewHolder>(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<String, GeoJsonFeature>
<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<LoadGeoJsonParams, GeoJsonData>() {</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 = ""
<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 = ""</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<AuthenticatedUserInfoBasic?>?,</span>
<span class="lineno"> 510 </span><span class="error"> isRegistered: Result<Boolean?></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<Unit, List<Block>>() {</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<Unit, Boolean>() {</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<Unit, List<Codelab>>() {</span>
<span class="lineno"> 26 </span><span class="error"></span>
<span class="lineno"> 27 </span><span class="error"> override fun execute(parameters: Unit): List<Codelab> {</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<Unit, ConferenceWifiInfo>() {</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<UserSessionMatcher, 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/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<Unit, Boolean>() {</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<Boolean, Boolean>() {</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<UserSessionMatcher, 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/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<SessionId, Session>() {</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<String, Session>() {</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<Pair<String?, SessionId>, LoadUserSessionUseCaseResult>() {</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<Unit, Boolean>() {</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<Unit, List<Theme>>() {</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<Unit, Boolean>() {</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<Unit, Theme>() {</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<Unit, Boolean>() {</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<Unit, Theme>() {</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<Boolean, Boolean>() {</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<Theme, Unit>() {</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<Boolean, Boolean>() {</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<Tag> {</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<FeedbackParameter, 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/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<StarEventParameter, StarUpdatedStatus>() {</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<out R> {
<span class="lineno"> 26 </span>
<span class="lineno"> 27 </span> <span class="error">data class Success<out T>(val data: T) : Result<T>()</span>
<span class="lineno"> 28 </span> data class Error(val exception: Exception) : Result<Nothing>()
<span class="lineno"> 29 </span> object Loading : Result<Nothing>()
<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<out R> {
<span class="lineno"> 26 </span>
<span class="lineno"> 27 </span> data class Success<out T>(val data: T) : Result<T>()
<span class="lineno"> 28 </span> <span class="error">data class Error(val exception: Exception) : Result<Nothing>()</span>
<span class="lineno"> 29 </span> object Loading : Result<Nothing>()
<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>