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.multibindings.IntoMap
import io.element.android.x.anvilannotations.ContributesViewModel
import java.io.File
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.name.FqName
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
@ -69,7 +69,12 @@ class ContributesViewModelCodeGenerator : CodeGenerator {
.returns(assistedViewModelFactoryFqName.asClassName(module).parameterizedBy(STAR, STAR))
.addAnnotation(Binds::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(),

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -2,7 +2,6 @@ package io.element.android.x.initializer
import android.content.Context
import androidx.startup.Initializer
import com.airbnb.mvrx.Mavericks
import io.element.android.x.matrix.tracing.TracingConfigurations
import io.element.android.x.matrix.tracing.setupTracing
import io.element.android.x.sdk.matrix.BuildConfig
@ -18,6 +17,4 @@ class MatrixInitializer : Initializer<Unit> {
}
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()
}

View file

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

View file

@ -12,7 +12,6 @@ anvil {
generateDaggerFactories.set(true)
}
dependencies {
implementation(project(":anvilannotations"))
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.designsystem.components.avatar.AvatarData
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.features.messages.model.MessagesItemAction
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.content.MessagesTimelineItemRedactedContent
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.media.MediaResolver
import io.element.android.x.matrix.timeline.MatrixTimeline

View file

@ -1,6 +1,9 @@
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.AssistedInject
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)
/** 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 {
// search dagger components in the context hierarchy
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}")
}
/** 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 {
// search dagger components in fragment hierarchy, then fallback to activity and application
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
* 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
*
* 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.session.SessionStore
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.Dispatchers
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.ClientBuilder
import timber.log.Timber
import java.io.File
import java.util.*
import java.util.concurrent.Executors
import javax.inject.Inject
@SingleIn(AppScope::class)
class Matrix @Inject constructor(

View file

@ -1,7 +1,6 @@
package io.element.android.x.matrix
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.media.MediaResolver
import io.element.android.x.matrix.media.RustMediaResolver

View file

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

View file

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

View file

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