Merge pull request #6966 from thundernest/update_dependencies
Update dependencies
This commit is contained in:
commit
46449fea82
4 changed files with 135 additions and 89 deletions
|
@ -7,11 +7,8 @@ plugins {
|
|||
}
|
||||
|
||||
configure<DetektExtension> {
|
||||
source = project.files(
|
||||
project.file(project.rootDir),
|
||||
)
|
||||
|
||||
config = project.rootProject.files("config/detekt/detekt.yml")
|
||||
source.setFrom(project.file(project.rootDir))
|
||||
config.setFrom(project.rootProject.files("config/detekt/detekt.yml"))
|
||||
baseline = project.rootProject.file("config/detekt/baseline.xml")
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,14 @@
|
|||
<SmellBaseline>
|
||||
<ManuallySuppressedIssues></ManuallySuppressedIssues>
|
||||
<CurrentIssues>
|
||||
<ID>CastToNullableType:AccountSetupCheckSettings.kt$AccountSetupCheckSettings$as</ID>
|
||||
<ID>CastToNullableType:MessageList.kt$MessageList$as</ID>
|
||||
<ID>CastToNullableType:MessageViewContainerFragment.kt$MessageViewContainerFragment$as</ID>
|
||||
<ID>CastToNullableType:MessageViewFragment.kt$MessageViewFragment$as</ID>
|
||||
<ID>CastToNullableType:RealImapFolder.kt$RealImapFolder$as</ID>
|
||||
<ID>CastToNullableType:SettingsExporter.kt$SettingsExporter$as</ID>
|
||||
<ID>CastToNullableType:ToolbarBottomSheetDialogFragment.kt$ToolbarBottomSheetDialogFragment$as</ID>
|
||||
<ID>CastToNullableType:VibrationPreference.kt$VibrationPreference$as</ID>
|
||||
<ID>ComplexCondition:HttpUriParser.kt$HttpUriParser$!compressionEnabled && beginSegmentsCount + endSegmentsCount == 8 || compressionEnabled && beginSegmentsCount + endSegmentsCount < 8</ID>
|
||||
<ID>ComplexCondition:MessageListFragment.kt$MessageListFragment$operation == FolderOperation.MOVE && !messagingController.isMoveCapable(account) || operation == FolderOperation.COPY && !messagingController.isCopyCapable(account)</ID>
|
||||
<ID>ComplexCondition:MessageListFragment.kt$MessageListFragment$operation == FolderOperation.MOVE && !messagingController.isMoveCapable(message) || operation == FolderOperation.COPY && !messagingController.isCopyCapable(message)</ID>
|
||||
|
@ -14,7 +22,6 @@
|
|||
<ID>ComplexCondition:TextInputLayoutExtensions.kt$text != null && before > 0 && (text.isEmpty() || text.length - count == 0)</ID>
|
||||
<ID>ComplexCondition:TouchInterceptView.kt$TouchInterceptView$absoluteDeltaY > touchSlop && absoluteDeltaY > absoluteDeltaX && (scrollView.canScrollVertically(deltaY.toInt()) || webView.canScrollVertically(deltaY.toInt()))</ID>
|
||||
<ID>ComplexCondition:build.gradle.kts$project.hasProperty("k9mail.keyAlias") && project.hasProperty("k9mail.keyPassword") && project.hasProperty("k9mail.storeFile") && project.hasProperty("k9mail.storePassword")</ID>
|
||||
<ID>ConstructorParameterNaming:MessageTopView.kt$MessageTopView.SavedState$`in`: Parcel</ID>
|
||||
<ID>CyclomaticComplexMethod:AccountSettingsDataStore.kt$AccountSettingsDataStore$override fun getBoolean(key: String, defValue: Boolean): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:AccountSettingsDataStore.kt$AccountSettingsDataStore$override fun getString(key: String, defValue: String?): String?</ID>
|
||||
<ID>CyclomaticComplexMethod:AccountSettingsDataStore.kt$AccountSettingsDataStore$override fun putBoolean(key: String, value: Boolean)</ID>
|
||||
|
@ -127,27 +134,19 @@
|
|||
<ID>LongMethod:TextBodyBuilderTest.kt$TextBodyBuilderTest.Companion$@JvmStatic @Parameterized.Parameters(name = "{index}: {0}") fun data(): Collection<TestData></ID>
|
||||
<ID>LongMethod:ThreadMessageOperationsTest.kt$ThreadMessageOperationsTest$@Test fun `merge two existing threads`()</ID>
|
||||
<ID>LongParameterList:CopyMessageOperations.kt$DatabaseMessagePart$( val id: Long, val type: Int, val root: Long, val parent: Long, val seq: Int, val mimeType: String?, val decodedBodySize: Long?, val displayName: String?, val header: ByteArray?, val encoding: String?, val charset: String?, val dataLocation: Int, val data: ByteArray?, val preamble: ByteArray?, val epilogue: ByteArray?, val boundary: String?, val contentId: String?, val serverExtra: String?, )</ID>
|
||||
<ID>LongParameterList:FolderHelpers.kt$( name: String = "irrelevant", type: String = "regular", serverId: String? = null, isLocalOnly: Boolean = true, integrate: Boolean = false, inTopGroup: Boolean = false, displayClass: String = "NO_CLASS", syncClass: String? = "INHERITED", notifyClass: String? = "INHERITED", pushClass: String? = "SECOND_CLASS", lastUpdated: Long = 0L, unreadCount: Int = 0, visibleLimit: Int = 25, status: String? = null, flaggedCount: Int = 0, moreMessages: String = "unknown", )</ID>
|
||||
<ID>LongParameterList:ImapSync.kt$ImapSync$( remoteFolder: ImapFolder, backendFolder: BackendFolder, largeMessages: List<ImapMessage>, progress: AtomicInteger, downloadedMessageCount: AtomicInteger, todo: Int, highestKnownUid: Long?, listener: SyncListener, maxDownloadSize: Int, )</ID>
|
||||
<ID>LongParameterList:ImapSync.kt$ImapSync$( remoteFolder: ImapFolder, backendFolder: BackendFolder, smallMessages: List<ImapMessage>, progress: AtomicInteger, downloadedMessageCount: AtomicInteger, todo: Int, highestKnownUid: Long?, listener: SyncListener, )</ID>
|
||||
<ID>LongParameterList:ImapSync.kt$ImapSync$( syncConfig: SyncConfig, remoteFolder: ImapFolder, unsyncedMessages: List<ImapMessage>, smallMessages: MutableList<ImapMessage>, largeMessages: MutableList<ImapMessage>, progress: AtomicInteger, todo: Int, listener: SyncListener, )</ID>
|
||||
<ID>LongParameterList:MessageDatabaseHelpers.kt$( folderId: Long, deleted: Boolean = false, uid: String? = null, subject: String = "", date: Long = 0L, flags: String = "", senderList: String = "", toList: String = "", ccList: String = "", bccList: String = "", replyToList: String = "", attachmentCount: Int = 0, internalDate: Long = 0L, messageIdHeader: String? = null, previewType: DatabasePreviewType = DatabasePreviewType.NONE, preview: String = "", mimeType: String = "text/plain", normalizedSubjectHash: Long = 0L, empty: Boolean = false, read: Boolean = false, flagged: Boolean = false, answered: Boolean = false, forwarded: Boolean = false, messagePartId: Long = 0L, encryptionType: String? = null, newMessage: Boolean = false, )</ID>
|
||||
<ID>LongParameterList:MessageDatabaseHelpers.kt$( type: Int = 0, root: Int? = null, parent: Int = -1, seq: Int = 0, mimeType: String = "text/plain", decodedBodySize: Int = 0, displayName: String? = null, header: String? = null, encoding: String = "7bit", charset: String? = null, dataLocation: Int = 0, data: ByteArray? = null, preamble: String? = null, epilogue: String? = null, boundary: String? = null, contentId: String? = null, serverExtra: String? = null, directory: File? = null, )</ID>
|
||||
<ID>LongParameterList:MessageDetailsViewModel.kt$MessageDetailsViewModel$( private val resources: Resources, private val messageRepository: MessageRepository, private val folderRepository: FolderRepository, private val contactSettingsProvider: ContactSettingsProvider, private val contactRepository: ContactRepository, private val contactPermissionResolver: ContactPermissionResolver, private val clipboardManager: ClipboardManager, private val accountManager: AccountManager, private val participantFormatter: MessageDetailsParticipantFormatter, private val folderNameFormatter: FolderNameFormatter, )</ID>
|
||||
<ID>LongParameterList:MessageListAdapterTest.kt$MessageListAdapterTest$( account: Account = Account(SOME_ACCOUNT_UUID), subject: String? = "irrelevant", threadCount: Int = 0, messageDate: Long = 0L, internalDate: Long = 0L, displayName: CharSequence = "irrelevant", displayAddress: Address? = Address.parse("irrelevant@domain.example").first(), previewText: String = "irrelevant", isMessageEncrypted: Boolean = false, isRead: Boolean = false, isStarred: Boolean = false, isAnswered: Boolean = false, isForwarded: Boolean = false, hasAttachments: Boolean = false, uniqueId: Long = 0L, folderId: Long = 0L, messageUid: String = "irrelevant", databaseId: Long = 0L, threadRoot: Long = 0L, )</ID>
|
||||
<ID>LongParameterList:MessageListAdapterTest.kt$MessageListAdapterTest$( fontSizes: FontSizes = createFontSizes(), previewLines: Int = 0, stars: Boolean = true, senderAboveSubject: Boolean = false, showContactPicture: Boolean = true, showingThreadedList: Boolean = true, backGroundAsReadIndicator: Boolean = false, showAccountChip: Boolean = false, density: UiDensity = UiDensity.Default, )</ID>
|
||||
<ID>LongParameterList:MessagePartDatabaseHelpers.kt$( type: Int = MessagePartType.UNKNOWN, root: Long? = null, parent: Long = -1, seq: Int = 0, mimeType: String? = null, decodedBodySize: Int? = null, displayName: String? = null, header: String? = null, encoding: String? = null, charset: String? = null, dataLocation: Int = DataLocation.MISSING, data: ByteArray? = null, preamble: String? = null, epilogue: String? = null, boundary: String? = null, contentId: String? = null, serverExtra: String? = null, )</ID>
|
||||
<ID>LongParameterList:PasswordPromptDialogFragment.kt$PasswordPromptDialogFragment.Companion$( accountUuid: String, accountName: String, inputIncomingServerPassword: Boolean, incomingServerName: String?, inputOutgoingServerPassword: Boolean, outgoingServerName: String?, targetFragment: Fragment, requestCode: Int, )</ID>
|
||||
<ID>LongParameterList:PushController.kt$PushController$( private val preferences: Preferences, private val generalSettingsManager: GeneralSettingsManager, private val backendManager: BackendManager, private val pushServiceManager: PushServiceManager, private val bootCompleteManager: BootCompleteManager, private val autoSyncManager: AutoSyncManager, private val pushNotificationManager: PushNotificationManager, private val connectivityManager: ConnectivityManager, private val accountPushControllerFactory: AccountPushControllerFactory, private val coroutineScope: CoroutineScope = GlobalScope, private val coroutineDispatcher: CoroutineDispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher(), )</ID>
|
||||
<ID>LongParameterList:RecipientPresenter.kt$RecipientPresenter$( private val context: Context, loaderManager: LoaderManager, private val openPgpApiManager: OpenPgpApiManager, private val recipientMvpView: RecipientMvpView, account: Account, private val composePgpInlineDecider: ComposePgpInlineDecider, private val composePgpEnableByDefaultDecider: ComposePgpEnableByDefaultDecider, private val autocryptStatusInteractor: AutocryptStatusInteractor, private val replyToParser: ReplyToParser, private val draftStateHeaderParser: AutocryptDraftStateHeaderParser, )</ID>
|
||||
<ID>LongParameterList:SaveMessageOperationsTest.kt$SaveMessageOperationsTest$( subject: String? = getSubject(), date: Long = sentDate?.time ?: System.currentTimeMillis(), internalDate: Long = date, downloadState: MessageDownloadState = getDownloadState(), attachmentCount: Int = 0, previewResult: PreviewResult = PreviewResult.none(), textForSearchIndex: String? = null, encryptionType: String? = null, )</ID>
|
||||
<ID>LongParameterList:SettingsImportViewModel.kt$SavedAccountState$( val accountIndex: Int, val displayName: String, val accountUuid: String, val selected: Boolean, val importStatus: ImportStatus, val incomingServerName: String?, val outgoingServerName: String?, val incomingServerPasswordNeeded: Boolean, val outgoingServerPasswordNeeded: Boolean, )</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:AccountSetupCheckSettings.kt$AccountSetupCheckSettings$for (subjectAlternativeName in subjectAlternativeNames) { val type = subjectAlternativeName[0] as Int val value: Any? = subjectAlternativeName[1] val name: String = when (type) { 0 -> { Timber.w("SubjectAltName of type OtherName not supported.") continue } 1 -> value as String 2 -> value as String 3 -> { Timber.w("unsupported SubjectAltName of type x400Address") continue } 4 -> { Timber.w("unsupported SubjectAltName of type directoryName") continue } 5 -> { Timber.w("unsupported SubjectAltName of type ediPartyName") continue } 6 -> value as String 7 -> value as String else -> { Timber.w("unsupported SubjectAltName of unknown type") continue } } // if some of the SubjectAltNames match the store or transport -host, display them if (name.equals(incomingServerHost, ignoreCase = true) || name.equals(outgoingServerHost, ignoreCase = true) ) { // TODO: localize this string altNamesText.append("Subject(alt): ").append(name).append(",...\n") } else if (name.startsWith("*.") && ( incomingServerHost.endsWith(name.substring(2)) || outgoingServerHost.endsWith(name.substring(2)) ) ) { // TODO: localize this string altNamesText.append("Subject(alt): ").append(name).append(",...\n") } }</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:HttpUriParser.kt$HttpUriParser$while (currentPos < text.length) { val c = text[currentPos] if (isHexDigit(c)) { shouldBeHex = (shouldBeHex - 1).coerceAtLeast(0) } else if (shouldBeHex == 0) { if (c in allowedCharacters) { // Everything ok here :) } else if (c == '%') { shouldBeHex = 2 } else { break } } else { break } currentPos++ }</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:RealImapStore.kt$RealImapStore$for (listResponse in listResponses) { val serverId = listResponse.name if (pathDelimiter == null) { pathDelimiter = listResponse.hierarchyDelimiter combinedPrefix = null } if (RealImapFolder.INBOX.equals(serverId, ignoreCase = true)) { continue } else if (listResponse.hasAttribute("\\NoSelect")) { continue } val name = getFolderDisplayName(serverId) val oldServerId = getOldServerId(serverId) val type = when { listResponse.hasAttribute("\\Archive") -> FolderType.ARCHIVE listResponse.hasAttribute("\\All") -> FolderType.ARCHIVE listResponse.hasAttribute("\\Drafts") -> FolderType.DRAFTS listResponse.hasAttribute("\\Sent") -> FolderType.SENT listResponse.hasAttribute("\\Junk") -> FolderType.SPAM listResponse.hasAttribute("\\Trash") -> FolderType.TRASH else -> FolderType.REGULAR } val existingItem = folderMap[serverId] if (existingItem == null || existingItem.type == FolderType.REGULAR) { folderMap[serverId] = FolderListItem(serverId, name, type, oldServerId) } }</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:SettingsExporter.kt$SettingsExporter$for ((key, value) in prefs) { val valueString = value.toString() val comps = key.split(".") if (comps.size < 3) { // Skip non-identity config entries continue } val keyUuid = comps[0] val identityKey = comps[1] val identityIndex = comps[2] if (keyUuid != accountUuid || identityIndex != identity) { // Skip entries that belong to another identity continue } val versionedSetting = IdentitySettingsDescriptions.SETTINGS[identityKey] if (versionedSetting != null) { val highestVersion = versionedSetting.lastKey() val setting = versionedSetting[highestVersion] if (setting != null) { // Only write settings that have an entry in IdentitySettings.SETTINGS try { writeKeyAndPrettyValueFromSetting(serializer, identityKey, setting, valueString) } catch (e: InvalidSettingValueException) { Timber.w( "Identity setting \"%s\" has invalid value \"%s\" in preference storage. " + "This shouldn't happen!", identityKey, valueString, ) } } } }</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:SettingsExporter.kt$SettingsExporter$for ((key, value) in prefs) { val valueString = value.toString() val comps = key.split(".", limit = 2) if (comps.size < 2) { // Skip global settings continue } val keyUuid = comps[0] val keyPart = comps[1] if (keyUuid != accountUuid) { // Setting doesn't belong to the account we're currently writing. continue } val indexOfLastDot = keyPart.lastIndexOf(".") val hasThirdPart = indexOfLastDot != -1 && indexOfLastDot < keyPart.length - 1 if (hasThirdPart) { val secondPart = keyPart.substring(0, indexOfLastDot) val thirdPart = keyPart.substring(indexOfLastDot + 1) if (secondPart == IDENTITY_EMAIL_KEY) { // This is an identity key. Save identity index for later... thirdPart.toIntOrNull()?.let { identities.add(it) } // ... but don't write it now. continue } if (FolderSettingsDescriptions.SETTINGS.containsKey(thirdPart)) { // This is a folder key. Ignore it. continue } } if (keyPart !in FOLDER_NAME_KEYS) { writeAccountSettingIfValid(serializer, keyPart, valueString, account) } }</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:UnreadWidgetMigrations.kt$UnreadWidgetMigrations$for (widgetId in widgetIds) { val accountUuid = preferences.getString("unread_widget.$widgetId", null) ?: continue val account = accountRepository.getAccount(accountUuid) ?: continue val folderServerId = preferences.getString("unread_widget.$widgetId.folder_name", null) if (folderServerId != null) { val folderId = folderRepository.getFolderId(account, folderServerId) putString("unread_widget.$widgetId.folder_id", folderId?.toString()) } remove("unread_widget.$widgetId.folder_name") }</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:AccountSetupCheckSettings.kt$AccountSetupCheckSettings$for</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:HttpUriParser.kt$HttpUriParser$while</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:RealImapStore.kt$RealImapStore$for</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:SettingsExporter.kt$SettingsExporter$for</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:UnreadWidgetMigrations.kt$UnreadWidgetMigrations$for</ID>
|
||||
<ID>MagicNumber:Account.kt$Account$168</ID>
|
||||
<ID>MagicNumber:Account.kt$Account$2</ID>
|
||||
<ID>MagicNumber:Account.kt$Account$28</ID>
|
||||
|
@ -277,7 +276,6 @@
|
|||
<ID>MagicNumber:MimeHeaderParser.kt$MimeHeaderParser$4</ID>
|
||||
<ID>MagicNumber:MimeParameterDecoder.kt$MimeParameterDecoder$3</ID>
|
||||
<ID>MagicNumber:MimeParameterEncoder.kt$MimeParameterEncoder$126</ID>
|
||||
<ID>MagicNumber:MimeParameterEncoder.kt$MimeParameterEncoder$16</ID>
|
||||
<ID>MagicNumber:MimeParameterEncoder.kt$MimeParameterEncoder$3</ID>
|
||||
<ID>MagicNumber:MimeParameterEncoder.kt$MimeParameterEncoder$33</ID>
|
||||
<ID>MagicNumber:MimeParameterEncoder.kt$MimeParameterEncoder$35</ID>
|
||||
|
@ -742,15 +740,11 @@
|
|||
<ID>TooManyFunctions:UnreadWidgetConfigurationFragment.kt$UnreadWidgetConfigurationFragment : PreferenceFragmentCompat</ID>
|
||||
<ID>TooManyFunctions:UpdateFolderOperations.kt$UpdateFolderOperations</ID>
|
||||
<ID>TooManyFunctions:VibrationDialogFragment.kt$VibrationDialogFragment$VibrationPatternAdapter : BaseAdapter</ID>
|
||||
<ID>UnnecessaryAbstractClass:AppRobolectricTest.kt$AppRobolectricTest$AppRobolectricTest</ID>
|
||||
<ID>UnnecessaryAbstractClass:HtmlModification.kt$HtmlModification$HtmlModification</ID>
|
||||
<ID>UnnecessaryAbstractClass:K9RobolectricTest.kt$K9RobolectricTest$K9RobolectricTest</ID>
|
||||
<ID>UnnecessaryAbstractClass:RobolectricTest.kt$RobolectricTest$RobolectricTest</ID>
|
||||
<ID>UnusedPrivateMember:Contacts.kt$Contacts$addresses: Array<Address?>?</ID>
|
||||
<ID>UnusedPrivateMember:ExtraAccountDiscovery.kt$ExtraAccountDiscovery$email: String</ID>
|
||||
<ID>UnusedPrivateMember:HttpUriParser.kt$HttpUriParser$i</ID>
|
||||
<ID>UnusedPrivateMember:MessageListLoader.kt$MessageListLoader$account: Account</ID>
|
||||
<ID>UnusedPrivateMember:MessageViewFragment.kt$MessageViewFragment$requestKey: String</ID>
|
||||
<ID>UnusedParameter:Contacts.kt$Contacts$addresses: Array<Address?>?</ID>
|
||||
<ID>UnusedParameter:ExtraAccountDiscovery.kt$ExtraAccountDiscovery$email: String</ID>
|
||||
<ID>UnusedParameter:MessageListLoader.kt$MessageListLoader$account: Account</ID>
|
||||
<ID>UnusedParameter:MessageViewFragment.kt$MessageViewFragment$requestKey: String</ID>
|
||||
<ID>UnusedPrivateProperty:HttpUriParser.kt$HttpUriParser$i</ID>
|
||||
<ID>UseCheckOrError:OutboxStateRepository.kt$OutboxStateRepository$throw IllegalStateException("No outbox_state entry for message with id $messageId")</ID>
|
||||
<ID>UseCheckOrError:ThemeExtensions.kt$throw IllegalStateException("Couldn't resolve attribute ($attrId)")</ID>
|
||||
<ID>UseRequire:MimeParameterEncoder.kt$MimeParameterEncoder$throw IllegalArgumentException("Unsupported character: $c")</ID>
|
||||
|
|
|
@ -48,6 +48,7 @@ output-reports:
|
|||
# - 'XmlOutputReport'
|
||||
# - 'HtmlOutputReport'
|
||||
# - 'MdOutputReport'
|
||||
# - 'SarifOutputReport'
|
||||
|
||||
comments:
|
||||
active: true
|
||||
|
@ -66,7 +67,7 @@ comments:
|
|||
endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)'
|
||||
KDocReferencesNonPublicProperty:
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
OutdatedDocumentation:
|
||||
active: false
|
||||
matchTypeParameters: true
|
||||
|
@ -74,7 +75,7 @@ comments:
|
|||
allowParamOnConstructorProperties: false
|
||||
UndocumentedPublicClass:
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
searchInNestedClass: true
|
||||
searchInInnerClass: true
|
||||
searchInInnerObject: true
|
||||
|
@ -82,11 +83,11 @@ comments:
|
|||
searchInProtectedClass: false
|
||||
UndocumentedPublicFunction:
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
searchProtectedFunction: false
|
||||
UndocumentedPublicProperty:
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
searchProtectedProperty: false
|
||||
|
||||
complexity:
|
||||
|
@ -132,7 +133,7 @@ complexity:
|
|||
active: true
|
||||
functionThreshold: 8
|
||||
constructorThreshold: 8
|
||||
ignoreDefaultParameters: false
|
||||
ignoreDefaultParameters: true
|
||||
ignoreDataClasses: true
|
||||
ignoreAnnotatedParameter: []
|
||||
MethodOverloading:
|
||||
|
@ -158,14 +159,14 @@ complexity:
|
|||
active: false
|
||||
StringLiteralDuplication:
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
threshold: 3
|
||||
ignoreAnnotation: true
|
||||
excludeStringsWithLessThan5Characters: true
|
||||
ignoreStringsRegex: '$^'
|
||||
TooManyFunctions:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
thresholdInFiles: 11
|
||||
thresholdInClasses: 11
|
||||
thresholdInInterfaces: 11
|
||||
|
@ -189,6 +190,8 @@ coroutines:
|
|||
active: true
|
||||
SleepInsteadOfDelay:
|
||||
active: true
|
||||
SuspendFunSwallowedCancellation:
|
||||
active: false
|
||||
SuspendFunWithCoroutineScopeReceiver:
|
||||
active: false
|
||||
SuspendFunWithFlowReturnType:
|
||||
|
@ -240,7 +243,7 @@ exceptions:
|
|||
- 'toString'
|
||||
InstanceOfCheckForException:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
NotImplementedDeclaration:
|
||||
active: false
|
||||
ObjectExtendsThrowable:
|
||||
|
@ -266,7 +269,7 @@ exceptions:
|
|||
active: false
|
||||
ThrowingExceptionsWithoutMessageOrCause:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
exceptions:
|
||||
- 'ArrayIndexOutOfBoundsException'
|
||||
- 'Exception'
|
||||
|
@ -281,7 +284,7 @@ exceptions:
|
|||
active: true
|
||||
TooGenericExceptionCaught:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
exceptionNames:
|
||||
- 'ArrayIndexOutOfBoundsException'
|
||||
- 'Error'
|
||||
|
@ -305,7 +308,6 @@ naming:
|
|||
BooleanPropertyNaming:
|
||||
active: false
|
||||
allowedPattern: '^(is|has|are)'
|
||||
ignoreOverridden: true
|
||||
ClassNaming:
|
||||
active: true
|
||||
classPattern: '[A-Z][a-zA-Z0-9]*'
|
||||
|
@ -314,7 +316,6 @@ naming:
|
|||
parameterPattern: '[a-z][A-Za-z0-9]*'
|
||||
privateParameterPattern: '[a-z][A-Za-z0-9]*'
|
||||
excludeClassPattern: '$^'
|
||||
ignoreOverridden: true
|
||||
EnumNaming:
|
||||
active: true
|
||||
enumEntryPattern: '[A-Z][_a-zA-Z0-9]*'
|
||||
|
@ -329,17 +330,15 @@ naming:
|
|||
minimumFunctionNameLength: 3
|
||||
FunctionNaming:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
functionPattern: '[a-z][a-zA-Z0-9]*'
|
||||
excludeClassPattern: '$^'
|
||||
ignoreOverridden: true
|
||||
ignoreAnnotated:
|
||||
- 'Composable'
|
||||
FunctionParameterNaming:
|
||||
active: true
|
||||
parameterPattern: '[a-z][A-Za-z0-9]*'
|
||||
excludeClassPattern: '$^'
|
||||
ignoreOverridden: true
|
||||
InvalidPackageDeclaration:
|
||||
active: true
|
||||
rootPackage: ''
|
||||
|
@ -381,7 +380,6 @@ naming:
|
|||
variablePattern: '[a-z][A-Za-z0-9]*'
|
||||
privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*'
|
||||
excludeClassPattern: '$^'
|
||||
ignoreOverridden: true
|
||||
|
||||
performance:
|
||||
active: true
|
||||
|
@ -392,10 +390,10 @@ performance:
|
|||
threshold: 3
|
||||
ForEachOnRange:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
SpreadOperator:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
UnnecessaryPartOfBinaryExpression:
|
||||
active: false
|
||||
UnnecessaryTemporaryInstantiation:
|
||||
|
@ -407,8 +405,10 @@ potential-bugs:
|
|||
active: true
|
||||
forbiddenTypePatterns:
|
||||
- 'kotlin.String'
|
||||
CastNullableToNonNullableType:
|
||||
active: true
|
||||
CastToNullableType:
|
||||
active: false
|
||||
active: true
|
||||
Deprecation:
|
||||
active: false
|
||||
DontDowncastCollectionTypes:
|
||||
|
@ -426,6 +426,7 @@ potential-bugs:
|
|||
- 'java.util.HashMap'
|
||||
ElseCaseInsteadOfExhaustiveWhen:
|
||||
active: false
|
||||
ignoredSubjectTypes: []
|
||||
EqualsAlwaysReturnsTrueOrFalse:
|
||||
active: true
|
||||
EqualsWithHashCodeExist:
|
||||
|
@ -440,9 +441,12 @@ potential-bugs:
|
|||
active: true
|
||||
restrictToConfig: true
|
||||
returnValueAnnotations:
|
||||
- 'CheckResult'
|
||||
- '*.CheckResult'
|
||||
- 'CheckReturnValue'
|
||||
- '*.CheckReturnValue'
|
||||
ignoreReturnValueAnnotations:
|
||||
- 'CanIgnoreReturnValue'
|
||||
- '*.CanIgnoreReturnValue'
|
||||
returnValueTypes:
|
||||
- 'kotlin.sequences.Sequence'
|
||||
|
@ -462,7 +466,7 @@ potential-bugs:
|
|||
active: true
|
||||
LateinitUsage:
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
ignoreOnClassesPattern: ''
|
||||
MapGetWithNotNullAssertionOperator:
|
||||
active: true
|
||||
|
@ -473,6 +477,8 @@ potential-bugs:
|
|||
active: false
|
||||
NullableToStringCall:
|
||||
active: false
|
||||
PropertyUsedBeforeDeclaration:
|
||||
active: false
|
||||
UnconditionalJumpStatementInLoop:
|
||||
active: false
|
||||
UnnecessaryNotNullCheck:
|
||||
|
@ -487,7 +493,7 @@ potential-bugs:
|
|||
active: true
|
||||
UnsafeCallOnNullableType:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
UnsafeCast:
|
||||
active: true
|
||||
UnusedUnaryOperator:
|
||||
|
@ -501,6 +507,14 @@ style:
|
|||
active: true
|
||||
AlsoCouldBeApply:
|
||||
active: false
|
||||
BracesOnIfStatements:
|
||||
active: false
|
||||
singleLine: 'never'
|
||||
multiLine: 'always'
|
||||
BracesOnWhenStatements:
|
||||
active: false
|
||||
singleLine: 'necessary'
|
||||
multiLine: 'consistent'
|
||||
CanBeNonNullable:
|
||||
active: false
|
||||
CascadingCallWrapping:
|
||||
|
@ -514,11 +528,22 @@ style:
|
|||
active: false
|
||||
conversionFunctionPrefix:
|
||||
- 'to'
|
||||
allowOperators: false
|
||||
DataClassShouldBeImmutable:
|
||||
active: false
|
||||
DestructuringDeclarationWithTooManyEntries:
|
||||
active: true
|
||||
maxDestructuringEntries: 3
|
||||
DoubleNegativeLambda:
|
||||
active: false
|
||||
negativeFunctions:
|
||||
- reason: 'Use `takeIf` instead.'
|
||||
value: 'takeUnless'
|
||||
- reason: 'Use `all` instead.'
|
||||
value: 'none'
|
||||
negativeFunctionNameParts:
|
||||
- 'not'
|
||||
- 'non'
|
||||
EqualsNullCall:
|
||||
active: true
|
||||
EqualsOnSignatureLine:
|
||||
|
@ -530,13 +555,31 @@ style:
|
|||
ExpressionBodySyntax:
|
||||
active: false
|
||||
includeLineWrapping: false
|
||||
ForbiddenAnnotation:
|
||||
active: false
|
||||
annotations:
|
||||
- reason: 'it is a java annotation. Use `Suppress` instead.'
|
||||
value: 'java.lang.SuppressWarnings'
|
||||
- reason: 'it is a java annotation. Use `kotlin.Deprecated` instead.'
|
||||
value: 'java.lang.Deprecated'
|
||||
- reason: 'it is a java annotation. Use `kotlin.annotation.MustBeDocumented` instead.'
|
||||
value: 'java.lang.annotation.Documented'
|
||||
- reason: 'it is a java annotation. Use `kotlin.annotation.Target` instead.'
|
||||
value: 'java.lang.annotation.Target'
|
||||
- reason: 'it is a java annotation. Use `kotlin.annotation.Retention` instead.'
|
||||
value: 'java.lang.annotation.Retention'
|
||||
- reason: 'it is a java annotation. Use `kotlin.annotation.Repeatable` instead.'
|
||||
value: 'java.lang.annotation.Repeatable'
|
||||
- reason: 'Kotlin does not support @Inherited annotation, see https://youtrack.jetbrains.com/issue/KT-22265'
|
||||
value: 'java.lang.annotation.Inherited'
|
||||
ForbiddenComment:
|
||||
active: true
|
||||
values:
|
||||
- 'FIXME:'
|
||||
- 'STOPSHIP:'
|
||||
comments:
|
||||
- reason: 'Forbidden FIXME todo marker in comment, please fix the problem.'
|
||||
value: 'FIXME:'
|
||||
- reason: 'Forbidden STOPSHIP todo marker in comment, please address the problem before shipping the code.'
|
||||
value: 'STOPSHIP:'
|
||||
allowedPatterns: ''
|
||||
customMessage: ''
|
||||
ForbiddenImport:
|
||||
active: false
|
||||
imports: []
|
||||
|
@ -565,7 +608,7 @@ style:
|
|||
maxJumpCount: 1
|
||||
MagicNumber:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**', '**/*.kts']
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**', '**/*.kts']
|
||||
ignoreNumbers:
|
||||
- '-1'
|
||||
- '0'
|
||||
|
@ -583,8 +626,6 @@ style:
|
|||
ignoreEnums: false
|
||||
ignoreRanges: false
|
||||
ignoreExtensionFunctions: true
|
||||
MandatoryBracesIfStatements:
|
||||
active: false
|
||||
MandatoryBracesLoops:
|
||||
active: false
|
||||
MaxChainedCallsOnSameLine:
|
||||
|
@ -606,6 +647,9 @@ style:
|
|||
MultilineRawStringIndentation:
|
||||
active: false
|
||||
indentSize: 4
|
||||
trimmingMethods:
|
||||
- 'trimIndent'
|
||||
- 'trimMargin'
|
||||
NestedClassesVisibility:
|
||||
active: true
|
||||
NewLineAtEndOfFile:
|
||||
|
@ -646,6 +690,10 @@ style:
|
|||
active: true
|
||||
SpacingBetweenPackageAndImports:
|
||||
active: false
|
||||
StringShouldBeRawString:
|
||||
active: false
|
||||
maxEscapedCharacterCount: 2
|
||||
ignoredCharacters: []
|
||||
ThrowsCount:
|
||||
active: true
|
||||
max: 2
|
||||
|
@ -654,6 +702,9 @@ style:
|
|||
active: false
|
||||
TrimMultilineRawString:
|
||||
active: false
|
||||
trimmingMethods:
|
||||
- 'trimIndent'
|
||||
- 'trimMargin'
|
||||
UnderscoresInNumericLiterals:
|
||||
active: false
|
||||
acceptableLength: 4
|
||||
|
@ -666,6 +717,8 @@ style:
|
|||
active: true
|
||||
UnnecessaryBackticks:
|
||||
active: false
|
||||
UnnecessaryBracesAroundTrailingLambda:
|
||||
active: false
|
||||
UnnecessaryFilter:
|
||||
active: true
|
||||
UnnecessaryInheritance:
|
||||
|
@ -681,11 +734,17 @@ style:
|
|||
active: false
|
||||
UnusedImports:
|
||||
active: false
|
||||
UnusedParameter:
|
||||
active: true
|
||||
allowedNames: 'ignored|expected'
|
||||
UnusedPrivateClass:
|
||||
active: true
|
||||
UnusedPrivateMember:
|
||||
active: true
|
||||
allowedNames: '(_|ignored|expected|serialVersionUID)'
|
||||
allowedNames: ''
|
||||
UnusedPrivateProperty:
|
||||
active: true
|
||||
allowedNames: '_|ignored|expected|serialVersionUID'
|
||||
ignoreAnnotated:
|
||||
- 'Preview'
|
||||
UseAnyOrNoneInsteadOfFind:
|
||||
|
@ -705,8 +764,11 @@ style:
|
|||
active: false
|
||||
UseIfInsteadOfWhen:
|
||||
active: false
|
||||
ignoreWhenContainingVariableDeclaration: false
|
||||
UseIsNullOrEmpty:
|
||||
active: true
|
||||
UseLet:
|
||||
active: false
|
||||
UseOrEmpty:
|
||||
active: true
|
||||
UseRequire:
|
||||
|
@ -733,8 +795,6 @@ Compose:
|
|||
allowedCompositionLocals: [LocalColors, LocalElevations, LocalImages, LocalSizes, LocalSpacings]
|
||||
ContentEmitterReturningValues:
|
||||
active: true
|
||||
# You can optionally add your own composables here
|
||||
# contentEmitters: MyComposable,MyOtherComposable
|
||||
ModifierComposable:
|
||||
active: true
|
||||
ModifierMissing:
|
||||
|
@ -745,22 +805,16 @@ Compose:
|
|||
active: true
|
||||
MultipleEmitters:
|
||||
active: true
|
||||
# You can optionally add your own composables here
|
||||
# contentEmitters: MyComposable,MyOtherComposable
|
||||
MutableParams:
|
||||
active: true
|
||||
ComposableNaming:
|
||||
active: true
|
||||
# You can optionally disable the checks in this rule for regex matches against the composable name (e.g. molecule presenters)
|
||||
# allowedComposableFunctionNames: .*Presenter,.*MoleculePresenter
|
||||
ComposableParamOrder:
|
||||
active: true
|
||||
PreviewNaming:
|
||||
active: true
|
||||
PreviewPublic:
|
||||
active: true
|
||||
# You can optionally disable that only previews with @PreviewParameter are flagged
|
||||
# previewPublicOnlyIfParams: false
|
||||
RememberMissing:
|
||||
active: true
|
||||
UnstableCollections:
|
||||
|
@ -769,4 +823,3 @@ Compose:
|
|||
active: true
|
||||
ViewModelInjection:
|
||||
active: true
|
||||
|
||||
|
|
|
@ -3,49 +3,51 @@
|
|||
|
||||
[versions]
|
||||
gradle = "8.1.1"
|
||||
androidGradlePlugin = "8.0.1"
|
||||
androidGradlePlugin = "8.0.2"
|
||||
ktlint = "0.48.2"
|
||||
|
||||
kotlin = "1.8.20"
|
||||
kotlinxCoroutines = "1.6.4"
|
||||
kotlin = "1.8.21"
|
||||
kotlinxCoroutines = "1.7.1"
|
||||
jetbrainsAnnotations = "24.0.1"
|
||||
androidxAppCompat = "1.6.1"
|
||||
androidxActivity = "1.7.1"
|
||||
androidxActivity = "1.7.2"
|
||||
androidxRecyclerView = "1.3.0"
|
||||
androidxLifecycle = "2.6.1"
|
||||
androidxNavigation = "2.5.3"
|
||||
androidxNavigation = "2.6.0"
|
||||
androidxConstraintLayout = "2.1.4"
|
||||
androidxFragment = "1.5.6"
|
||||
androidxCore = "1.10.0"
|
||||
androidxFragment = "1.5.7"
|
||||
androidxCore = "1.10.1"
|
||||
androidxCoreSplashscreen = "1.0.1"
|
||||
androidxPreference = "1.2.0"
|
||||
androidxDrawerLayout = "1.1.1"
|
||||
androidxTransition = "1.4.1"
|
||||
androidxComposeCompiler = "1.4.6"
|
||||
androidxComposeBom = "2023.04.01"
|
||||
androidxComposeMaterial = "1.3.1"
|
||||
androidxComposeCompiler = "1.4.7"
|
||||
androidxComposeBom = "2023.05.01"
|
||||
androidxComposeMaterial = "1.4.3"
|
||||
accompanist = "0.30.1"
|
||||
fastAdapter = "5.7.0"
|
||||
preferencesFix = "1.1.0"
|
||||
timber = "5.0.1"
|
||||
koinCore = "3.4.0"
|
||||
koinAndroid = "3.4.0"
|
||||
koinCore = "3.4.2"
|
||||
koinAndroid = "3.4.2"
|
||||
koinAndroidCompose = "3.4.5"
|
||||
koinTest = "3.4.1"
|
||||
mime4j = "0.8.9"
|
||||
okhttp = "4.10.0"
|
||||
okhttp = "4.11.0"
|
||||
glide = "4.15.1"
|
||||
moshi = "1.14.0"
|
||||
moshi = "1.15.0"
|
||||
mockito = "5.3.1"
|
||||
|
||||
[plugins]
|
||||
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
|
||||
android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" }
|
||||
android-lint = { id = "com.android.lint", version.ref = "androidGradlePlugin" }
|
||||
ksp = "com.google.devtools.ksp:1.8.20-1.0.11"
|
||||
ksp = "com.google.devtools.ksp:1.8.21-1.0.11"
|
||||
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||||
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
|
||||
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||||
spotless = "com.diffplug.spotless:6.14.0"
|
||||
detekt = "io.gitlab.arturbosch.detekt:1.22.0"
|
||||
detekt = "io.gitlab.arturbosch.detekt:1.23.0"
|
||||
dependency-check = "com.github.ben-manes.versions:0.46.0"
|
||||
|
||||
[libraries]
|
||||
|
@ -96,7 +98,7 @@ androidx-compose-navigation = { module = "androidx.navigation:navigation-compose
|
|||
androidx-test-core = "androidx.test:core:1.5.0"
|
||||
androidx-test-ext-junit-ktx = "androidx.test.ext:junit-ktx:1.1.5"
|
||||
androidx-test-espresso-core = "androidx.test.espresso:espresso-core:3.5.1"
|
||||
android-material = "com.google.android.material:material:1.8.0"
|
||||
android-material = "com.google.android.material:material:1.9.0"
|
||||
accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" }
|
||||
fastadapter = { module = "com.mikepenz:fastadapter", version.ref = "fastAdapter" }
|
||||
fastadapter-extensions-drag = { module = "com.mikepenz:fastadapter-extensions-drag", version.ref = "fastAdapter" }
|
||||
|
@ -111,9 +113,9 @@ moshi-kotlin-codegen = { module = "com.squareup.moshi:moshi-kotlin-codegen", ver
|
|||
timber = "com.jakewharton.timber:timber:5.0.1"
|
||||
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koinCore" }
|
||||
koin-android = { module = "io.insert-koin:koin-android", version.ref = "koinAndroid" }
|
||||
koin-androidx-compose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koinAndroid" }
|
||||
koin-test = { module = "io.insert-koin:koin-test", version.ref = "koinCore" }
|
||||
koin-test-junit4 = { module = "io.insert-koin:koin-test-junit4", version.ref = "koinCore" }
|
||||
koin-androidx-compose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koinAndroidCompose" }
|
||||
koin-test = { module = "io.insert-koin:koin-test", version.ref = "koinTest" }
|
||||
koin-test-junit4 = { module = "io.insert-koin:koin-test-junit4", version.ref = "koinTest" }
|
||||
commons-io = "commons-io:commons-io:2.11.0"
|
||||
mime4j-core = { module = "org.apache.james:apache-mime4j-core", version.ref = "mime4j" }
|
||||
mime4j-dom = { module = "org.apache.james:apache-mime4j-dom", version.ref = "mime4j" }
|
||||
|
@ -142,14 +144,14 @@ junit = "junit:junit:4.13.2"
|
|||
robolectric = "org.robolectric:robolectric:4.9.2"
|
||||
mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" }
|
||||
mockito-kotlin = "org.mockito.kotlin:mockito-kotlin:4.1.0"
|
||||
turbine = "app.cash.turbine:turbine:0.12.3"
|
||||
turbine = "app.cash.turbine:turbine:0.13.0"
|
||||
jdom2 = "org.jdom:jdom2:2.0.6.1"
|
||||
icu4j-charset = "com.ibm.icu:icu4j-charset:72.1"
|
||||
assertk = "com.willowtreeapps.assertk:assertk-jvm:0.26.1"
|
||||
|
||||
leakcanary-android = "com.squareup.leakcanary:leakcanary-android:2.9.1"
|
||||
|
||||
detekt-plugin-compose = "io.nlopez.compose.rules:detekt:0.1.1"
|
||||
detekt-plugin-compose = "io.nlopez.compose.rules:detekt:0.1.7"
|
||||
|
||||
[bundles]
|
||||
shared-jvm-main = [
|
||||
|
|
Loading…
Reference in a new issue