Code quality

Code quality
This commit is contained in:
Benoit Marty 2022-12-21 15:32:53 +01:00
parent c040e18431
commit a4fd7bab4f
30 changed files with 44 additions and 51 deletions

View file

@ -31,10 +31,10 @@ import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import dagger.multibindings.IntoMap import dagger.multibindings.IntoMap
import io.element.android.x.anvilannotations.ContributesViewModel import io.element.android.x.anvilannotations.ContributesViewModel
import java.io.File
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import java.io.File
/** /**
* This is an anvil plugin that allows ViewModels to use [ContributesViewModel] alone and let this plugin automatically * This is an anvil plugin that allows ViewModels to use [ContributesViewModel] alone and let this plugin automatically
@ -69,7 +69,12 @@ class ContributesViewModelCodeGenerator : CodeGenerator {
.returns(assistedViewModelFactoryFqName.asClassName(module).parameterizedBy(STAR, STAR)) .returns(assistedViewModelFactoryFqName.asClassName(module).parameterizedBy(STAR, STAR))
.addAnnotation(Binds::class) .addAnnotation(Binds::class)
.addAnnotation(IntoMap::class) .addAnnotation(IntoMap::class)
.addAnnotation(AnnotationSpec.Companion.builder(viewModelKeyFqName.asClassName(module)).addMember("%T::class", vmClass.asClassName()).build()) .addAnnotation(
AnnotationSpec.Companion
.builder(viewModelKeyFqName.asClassName(module))
.addMember("%T::class", vmClass.asClassName())
.build()
)
.build(), .build(),
) )
.build(), .build(),

View file

@ -33,8 +33,6 @@
android:exported="false" android:exported="false"
tools:node="remove"/> tools:node="remove"/>
</application> </application>
</manifest> </manifest>

View file

@ -8,7 +8,6 @@ package io.element.android.x
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.compose.animation.AnimatedContentScope import androidx.compose.animation.AnimatedContentScope
import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
@ -38,16 +37,12 @@ import androidx.core.view.WindowCompat
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import com.airbnb.android.showkase.models.Showkase import com.airbnb.android.showkase.models.Showkase
import com.airbnb.mvrx.compose.mavericksActivityViewModel import com.airbnb.mvrx.compose.mavericksActivityViewModel
import com.airbnb.mvrx.compose.mavericksViewModel
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import com.ramcosta.composedestinations.DestinationsNavHost import com.ramcosta.composedestinations.DestinationsNavHost
import com.ramcosta.composedestinations.animations.defaults.RootNavGraphDefaultAnimations import com.ramcosta.composedestinations.animations.defaults.RootNavGraphDefaultAnimations
import com.ramcosta.composedestinations.animations.rememberAnimatedNavHostEngine import com.ramcosta.composedestinations.animations.rememberAnimatedNavHostEngine
import com.ramcosta.composedestinations.manualcomposablecalls.animatedComposable
import com.ramcosta.composedestinations.navigation.dependency
import com.ramcosta.composedestinations.spec.Route import com.ramcosta.composedestinations.spec.Route
import io.element.android.x.core.compose.OnLifecycleEvent import io.element.android.x.core.compose.OnLifecycleEvent
import io.element.android.x.core.di.DaggerComponentOwner
import io.element.android.x.designsystem.ElementXTheme import io.element.android.x.designsystem.ElementXTheme
import io.element.android.x.destinations.OnBoardingScreenNavigationDestination import io.element.android.x.destinations.OnBoardingScreenNavigationDestination
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
@ -160,7 +155,6 @@ class MainActivity : ComponentActivity() {
navGraph = NavGraphs.root, navGraph = NavGraphs.root,
startRoute = startRoute, startRoute = startRoute,
dependenciesContainerBuilder = { dependenciesContainerBuilder = {
} }
) )
} }

View file

@ -8,7 +8,7 @@ import io.element.android.x.core.di.DaggerMavericksBindings
@SingleIn(AppScope::class) @SingleIn(AppScope::class)
@MergeComponent(AppScope::class) @MergeComponent(AppScope::class)
interface AppComponent: DaggerMavericksBindings { interface AppComponent : DaggerMavericksBindings {
@Component.Factory @Component.Factory
interface Factory { interface Factory {

View file

@ -9,7 +9,7 @@ import io.element.android.x.matrix.MatrixClient
@SingleIn(SessionScope::class) @SingleIn(SessionScope::class)
@MergeSubcomponent(SessionScope::class) @MergeSubcomponent(SessionScope::class)
interface SessionComponent: DaggerMavericksBindings { interface SessionComponent : DaggerMavericksBindings {
fun matrixClient(): MatrixClient fun matrixClient(): MatrixClient

View file

@ -41,5 +41,4 @@ class SessionComponentsOwner @Inject constructor(@ApplicationContext private val
activeSessionComponent = null activeSessionComponent = null
} }
} }
} }

View file

@ -35,6 +35,4 @@ private class ElementImageLoaderFactory(
} }
.build() .build()
} }
} }

View file

@ -2,7 +2,6 @@ package io.element.android.x.initializer
import android.content.Context import android.content.Context
import androidx.startup.Initializer import androidx.startup.Initializer
import com.airbnb.mvrx.Mavericks
import io.element.android.x.matrix.tracing.TracingConfigurations import io.element.android.x.matrix.tracing.TracingConfigurations
import io.element.android.x.matrix.tracing.setupTracing import io.element.android.x.matrix.tracing.setupTracing
import io.element.android.x.sdk.matrix.BuildConfig import io.element.android.x.sdk.matrix.BuildConfig
@ -18,6 +17,4 @@ class MatrixInitializer : Initializer<Unit> {
} }
override fun dependencies(): List<Class<out Initializer<*>>> = emptyList() override fun dependencies(): List<Class<out Initializer<*>>> = emptyList()
} }

View file

@ -11,6 +11,4 @@ class MavericksInitializer : Initializer<Unit> {
} }
override fun dependencies(): List<Class<out Initializer<*>>> = listOf() override fun dependencies(): List<Class<out Initializer<*>>> = listOf()
} }

View file

@ -12,7 +12,6 @@ anvil {
generateDaggerFactories.set(true) generateDaggerFactories.set(true)
} }
dependencies { dependencies {
implementation(project(":anvilannotations")) implementation(project(":anvilannotations"))
anvil(project(":anvilcodegen")) anvil(project(":anvilcodegen"))

View file

@ -12,7 +12,6 @@ anvil {
generateDaggerFactories.set(true) generateDaggerFactories.set(true)
} }
dependencies { dependencies {
implementation(project(":anvilannotations")) implementation(project(":anvilannotations"))
anvil(project(":anvilcodegen")) anvil(project(":anvilcodegen"))

View file

@ -9,7 +9,6 @@ import io.element.android.x.anvilannotations.ContributesViewModel
import io.element.android.x.core.di.daggerMavericksViewModelFactory import io.element.android.x.core.di.daggerMavericksViewModelFactory
import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.x.designsystem.components.avatar.AvatarData
import io.element.android.x.designsystem.components.avatar.AvatarSize import io.element.android.x.designsystem.components.avatar.AvatarSize
import io.element.android.x.di.AppScope
import io.element.android.x.di.SessionScope import io.element.android.x.di.SessionScope
import io.element.android.x.features.messages.model.MessagesItemAction import io.element.android.x.features.messages.model.MessagesItemAction
import io.element.android.x.features.messages.model.MessagesItemActionsSheetState import io.element.android.x.features.messages.model.MessagesItemActionsSheetState
@ -17,7 +16,6 @@ import io.element.android.x.features.messages.model.MessagesTimelineItemState
import io.element.android.x.features.messages.model.MessagesViewState import io.element.android.x.features.messages.model.MessagesViewState
import io.element.android.x.features.messages.model.content.MessagesTimelineItemRedactedContent import io.element.android.x.features.messages.model.content.MessagesTimelineItemRedactedContent
import io.element.android.x.features.messages.model.content.MessagesTimelineItemTextBasedContent import io.element.android.x.features.messages.model.content.MessagesTimelineItemTextBasedContent
import io.element.android.x.matrix.Matrix
import io.element.android.x.matrix.MatrixClient import io.element.android.x.matrix.MatrixClient
import io.element.android.x.matrix.media.MediaResolver import io.element.android.x.matrix.media.MediaResolver
import io.element.android.x.matrix.timeline.MatrixTimeline import io.element.android.x.matrix.timeline.MatrixTimeline

View file

@ -1,6 +1,9 @@
package io.element.android.x.features.roomlist package io.element.android.x.features.roomlist
import com.airbnb.mvrx.* import com.airbnb.mvrx.Loading
import com.airbnb.mvrx.MavericksViewModel
import com.airbnb.mvrx.MavericksViewModelFactory
import com.airbnb.mvrx.Success
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesViewModel import io.element.android.x.anvilannotations.ContributesViewModel

View file

@ -27,7 +27,7 @@ inline fun <reified T : Any> Context.bindings() = bindings(T::class.java)
*/ */
inline fun <reified T : Any> Fragment.bindings() = bindings(T::class.java) inline fun <reified T : Any> Fragment.bindings() = bindings(T::class.java)
/** Use no-arg extension function instead: [Context.bindings] */ /** Use no-arg extension function instead: [Context.bindings]. */
fun <T : Any> Context.bindings(klass: Class<T>): T { fun <T : Any> Context.bindings(klass: Class<T>): T {
// search dagger components in the context hierarchy // search dagger components in the context hierarchy
return generateSequence(this) { (it as? ContextWrapper)?.baseContext } return generateSequence(this) { (it as? ContextWrapper)?.baseContext }
@ -40,7 +40,7 @@ fun <T : Any> Context.bindings(klass: Class<T>): T {
?: error("Unable to find bindings for ${klass.name}") ?: error("Unable to find bindings for ${klass.name}")
} }
/** Use no-arg extension function instead: [Fragment.bindings] */ /** Use no-arg extension function instead: [Fragment.bindings]. */
fun <T : Any> Fragment.bindings(klass: Class<T>): T { fun <T : Any> Fragment.bindings(klass: Class<T>): T {
// search dagger components in fragment hierarchy, then fallback to activity and application // search dagger components in fragment hierarchy, then fallback to activity and application
return generateSequence(this, Fragment::getParentFragment) return generateSequence(this, Fragment::getParentFragment)

View file

@ -29,6 +29,8 @@ inline fun <reified VM : MavericksViewModel<S>, S : MavericksState> daggerMaveri
* using its AssistedInject Factory. This class should be implemented by the companion object * using its AssistedInject Factory. This class should be implemented by the companion object
* of every ViewModel which uses AssistedInject via [daggerMavericksViewModelFactory]. * of every ViewModel which uses AssistedInject via [daggerMavericksViewModelFactory].
* *
* @param VM The ViewModel type
* @param S The ViewState type
* @param viewModelClass The [Class] of the ViewModel being requested for creation * @param viewModelClass The [Class] of the ViewModel being requested for creation
* *
* This class accesses the map of ViewModel class to [AssistedViewModelFactory]s from the nearest [DaggerComponentOwner] and * This class accesses the map of ViewModel class to [AssistedViewModelFactory]s from the nearest [DaggerComponentOwner] and

View file

@ -10,6 +10,9 @@ import io.element.android.x.matrix.media.MediaFetcher
import io.element.android.x.matrix.media.MediaKeyer import io.element.android.x.matrix.media.MediaKeyer
import io.element.android.x.matrix.session.SessionStore import io.element.android.x.matrix.session.SessionStore
import io.element.android.x.matrix.util.logError import io.element.android.x.matrix.util.logError
import java.io.File
import java.util.concurrent.Executors
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.asCoroutineDispatcher
@ -19,10 +22,6 @@ import org.matrix.rustcomponents.sdk.AuthenticationService
import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.Client
import org.matrix.rustcomponents.sdk.ClientBuilder import org.matrix.rustcomponents.sdk.ClientBuilder
import timber.log.Timber import timber.log.Timber
import java.io.File
import java.util.*
import java.util.concurrent.Executors
import javax.inject.Inject
@SingleIn(AppScope::class) @SingleIn(AppScope::class)
class Matrix @Inject constructor( class Matrix @Inject constructor(

View file

@ -1,7 +1,6 @@
package io.element.android.x.matrix package io.element.android.x.matrix
import io.element.android.x.core.coroutine.CoroutineDispatchers import io.element.android.x.core.coroutine.CoroutineDispatchers
import io.element.android.x.di.SingleIn
import io.element.android.x.matrix.core.UserId import io.element.android.x.matrix.core.UserId
import io.element.android.x.matrix.media.MediaResolver import io.element.android.x.matrix.media.MediaResolver
import io.element.android.x.matrix.media.RustMediaResolver import io.element.android.x.matrix.media.RustMediaResolver

View file

@ -45,7 +45,8 @@ fun CommonExtension<*, *, *, *>.composeConfig() {
lint { lint {
// Extra rules for compose // Extra rules for compose
error.add("ComposableLambdaParameterNaming") // Disabled until lint stops inspecting generated ksp files...
// error.add("ComposableLambdaParameterNaming")
error.add("ComposableLambdaParameterPosition") error.add("ComposableLambdaParameterPosition")
} }
} }

View file

@ -95,6 +95,7 @@ comments:
active: true active: true
OutdatedDocumentation: OutdatedDocumentation:
active: true active: true
allowParamOnConstructorProperties: true
UndocumentedPublicClass: UndocumentedPublicClass:
active: false active: false
UndocumentedPublicFunction: UndocumentedPublicFunction:

View file

@ -112,6 +112,9 @@
<!-- Notification --> <!-- Notification -->
<issue id="LaunchActivityFromNotification" severity="error" /> <issue id="LaunchActivityFromNotification" severity="error" />
<!-- We handle them manually -->
<issue id="EnsureInitializerMetadata" severity="ignore" />
<!-- DI --> <!-- DI -->
<!-- issue id="JvmStaticProvidesInObjectDetector" severity="error" /--> <!-- issue id="JvmStaticProvidesInObjectDetector" severity="error" /-->
</lint> </lint>