From 4c9a451eb1f4780ec62d5b6461403eb0aed40393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Mon, 22 Jan 2024 16:32:42 +0100 Subject: [PATCH 01/14] Add detekt dependency --- android/buildSrc/src/main/kotlin/Dependencies.kt | 1 + android/buildSrc/src/main/kotlin/Versions.kt | 1 + 2 files changed, 2 insertions(+) diff --git a/android/buildSrc/src/main/kotlin/Dependencies.kt b/android/buildSrc/src/main/kotlin/Dependencies.kt index 9893cadc167a..055bf72d1252 100644 --- a/android/buildSrc/src/main/kotlin/Dependencies.kt +++ b/android/buildSrc/src/main/kotlin/Dependencies.kt @@ -116,6 +116,7 @@ object Dependencies { const val dependencyCheck = "org.owasp:dependency-check-gradle:${Versions.Plugin.dependencyCheck}" const val dependencyCheckId = "org.owasp.dependencycheck" + const val detektId = "io.gitlab.arturbosch.detekt" const val gradleVersionsId = "com.github.ben-manes.versions" const val junit5 = "de.mannodermaus.android-junit5" const val kotlin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}" diff --git a/android/buildSrc/src/main/kotlin/Versions.kt b/android/buildSrc/src/main/kotlin/Versions.kt index 58aa769cb7b7..3c2470b2d031 100644 --- a/android/buildSrc/src/main/kotlin/Versions.kt +++ b/android/buildSrc/src/main/kotlin/Versions.kt @@ -50,6 +50,7 @@ object Versions { const val androidAapt = "$android-10154469" const val playPublisher = "3.8.4" const val dependencyCheck = "8.3.1" + const val detekt = "1.23.4" const val gradleVersions = "0.47.0" const val junit5 = "1.10.0.0" const val ktfmt = "0.16.0" From 2f762a6106c4bb07805410b1b1dbd954b5f48f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Tue, 30 Jan 2024 09:37:51 +0100 Subject: [PATCH 02/14] Add detekt gradle configuration --- android/build.gradle.kts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 8f801b85a794..46573d80c2fb 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -1,9 +1,11 @@ import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask +import io.gitlab.arturbosch.detekt.Detekt plugins { id(Dependencies.Plugin.dependencyCheckId) version Versions.Plugin.dependencyCheck apply false id(Dependencies.Plugin.gradleVersionsId) version Versions.Plugin.gradleVersions id(Dependencies.Plugin.ktfmtId) version Versions.Plugin.ktfmt apply false + id(Dependencies.Plugin.detektId) version Versions.Plugin.detekt } buildscript { @@ -11,6 +13,7 @@ buildscript { google() mavenCentral() maven(Repositories.GradlePlugins) + gradlePluginPortal() } dependencies { @@ -27,6 +30,28 @@ buildscript { } } +val baselineFile = file("$rootDir/config/baseline.xml") +val configFile = files("$rootDir/config/detekt.yml") + +val projectSource = file(projectDir) +val buildFiles = "**/build/**" + +detekt { + buildUponDefaultConfig = true + allRules = false + config.setFrom(configFile) + source.setFrom(projectSource) + baseline = baselineFile + parallel = true + ignoreFailures = false + autoCorrect = true +} + +tasks.withType().configureEach { + // Ignore generated files from the build directory, e.g files created by ksp. + exclude(buildFiles) +} + allprojects { apply(plugin = Dependencies.Plugin.dependencyCheckId) apply(plugin = Dependencies.Plugin.ktfmtId) From 64c6aed281b0944764823dd3b8006f8c02e14edb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Fri, 2 Feb 2024 16:29:03 +0100 Subject: [PATCH 03/14] Add default generated detekt config --- android/config/detekt.yml | 784 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 784 insertions(+) create mode 100644 android/config/detekt.yml diff --git a/android/config/detekt.yml b/android/config/detekt.yml new file mode 100644 index 000000000000..7615608ce326 --- /dev/null +++ b/android/config/detekt.yml @@ -0,0 +1,784 @@ +build: + maxIssues: 0 + excludeCorrectable: false + weights: + # complexity: 2 + # LongParameterList: 1 + # style: 1 + # comments: 1 + +config: + validation: true + warningsAsErrors: false + checkExhaustiveness: false + # when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]' + excludes: '' + +processors: + active: true + exclude: + - 'DetektProgressListener' + # - 'KtFileCountProcessor' + # - 'PackageCountProcessor' + # - 'ClassCountProcessor' + # - 'FunctionCountProcessor' + # - 'PropertyCountProcessor' + # - 'ProjectComplexityProcessor' + # - 'ProjectCognitiveComplexityProcessor' + # - 'ProjectLLOCProcessor' + # - 'ProjectCLOCProcessor' + # - 'ProjectLOCProcessor' + # - 'ProjectSLOCProcessor' + # - 'LicenseHeaderLoaderExtension' + +console-reports: + active: true + exclude: + - 'ProjectStatisticsReport' + - 'ComplexityReport' + - 'NotificationReport' + - 'FindingsReport' + - 'FileBasedFindingsReport' + # - 'LiteFindingsReport' + +output-reports: + active: true + exclude: + # - 'TxtOutputReport' + # - 'XmlOutputReport' + # - 'HtmlOutputReport' + # - 'MdOutputReport' + # - 'SarifOutputReport' + +comments: + active: true + AbsentOrWrongFileLicense: + active: false + licenseTemplateFile: 'license.template' + licenseTemplateIsRegex: false + CommentOverPrivateFunction: + active: false + CommentOverPrivateProperty: + active: false + DeprecatedBlockTag: + active: false + EndOfSentenceFormat: + active: false + endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)' + KDocReferencesNonPublicProperty: + active: false + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + OutdatedDocumentation: + active: false + matchTypeParameters: true + matchDeclarationsOrder: true + allowParamOnConstructorProperties: false + UndocumentedPublicClass: + active: false + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + searchInNestedClass: true + searchInInnerClass: true + searchInInnerObject: true + searchInInnerInterface: true + searchInProtectedClass: false + UndocumentedPublicFunction: + active: false + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + searchProtectedFunction: false + UndocumentedPublicProperty: + active: false + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + searchProtectedProperty: false + +complexity: + active: true + CognitiveComplexMethod: + active: false + threshold: 15 + ComplexCondition: + active: true + threshold: 4 + ComplexInterface: + active: false + threshold: 10 + includeStaticDeclarations: false + includePrivateDeclarations: false + ignoreOverloaded: false + CyclomaticComplexMethod: + active: true + threshold: 15 + ignoreSingleWhenExpression: false + ignoreSimpleWhenEntries: false + ignoreNestingFunctions: false + nestingFunctions: + - 'also' + - 'apply' + - 'forEach' + - 'isNotNull' + - 'ifNull' + - 'let' + - 'run' + - 'use' + - 'with' + LabeledExpression: + active: false + ignoredLabels: [] + LargeClass: + active: true + threshold: 600 + LongMethod: + active: true + threshold: 60 + LongParameterList: + active: true + functionThreshold: 6 + constructorThreshold: 7 + ignoreDefaultParameters: false + ignoreDataClasses: true + ignoreAnnotatedParameter: [] + MethodOverloading: + active: false + threshold: 6 + NamedArguments: + active: false + threshold: 3 + ignoreArgumentsMatchingNames: false + NestedBlockDepth: + active: true + threshold: 4 + NestedScopeFunctions: + active: false + threshold: 1 + functions: + - 'kotlin.apply' + - 'kotlin.run' + - 'kotlin.with' + - 'kotlin.let' + - 'kotlin.also' + ReplaceSafeCallChainWithRun: + active: false + StringLiteralDuplication: + active: false + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + threshold: 3 + ignoreAnnotation: true + excludeStringsWithLessThan5Characters: true + ignoreStringsRegex: '$^' + TooManyFunctions: + active: true + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + thresholdInFiles: 11 + thresholdInClasses: 11 + thresholdInInterfaces: 11 + thresholdInObjects: 11 + thresholdInEnums: 11 + ignoreDeprecated: false + ignorePrivate: false + ignoreOverridden: false + +coroutines: + active: true + GlobalCoroutineUsage: + active: false + InjectDispatcher: + active: true + dispatcherNames: + - 'IO' + - 'Default' + - 'Unconfined' + RedundantSuspendModifier: + active: true + SleepInsteadOfDelay: + active: true + SuspendFunSwallowedCancellation: + active: false + SuspendFunWithCoroutineScopeReceiver: + active: false + SuspendFunWithFlowReturnType: + active: true + +empty-blocks: + active: true + EmptyCatchBlock: + active: true + allowedExceptionNameRegex: '_|(ignore|expected).*' + EmptyClassBlock: + active: true + EmptyDefaultConstructor: + active: true + EmptyDoWhileBlock: + active: true + EmptyElseBlock: + active: true + EmptyFinallyBlock: + active: true + EmptyForBlock: + active: true + EmptyFunctionBlock: + active: true + ignoreOverridden: false + EmptyIfBlock: + active: true + EmptyInitBlock: + active: true + EmptyKtFile: + active: true + EmptySecondaryConstructor: + active: true + EmptyTryBlock: + active: true + EmptyWhenBlock: + active: true + EmptyWhileBlock: + active: true + +exceptions: + active: true + ExceptionRaisedInUnexpectedLocation: + active: true + methodNames: + - 'equals' + - 'finalize' + - 'hashCode' + - 'toString' + InstanceOfCheckForException: + active: true + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + NotImplementedDeclaration: + active: false + ObjectExtendsThrowable: + active: false + PrintStackTrace: + active: true + RethrowCaughtException: + active: true + ReturnFromFinally: + active: true + ignoreLabeled: false + SwallowedException: + active: true + ignoredExceptionTypes: + - 'InterruptedException' + - 'MalformedURLException' + - 'NumberFormatException' + - 'ParseException' + allowedExceptionNameRegex: '_|(ignore|expected).*' + ThrowingExceptionFromFinally: + active: true + ThrowingExceptionInMain: + active: false + ThrowingExceptionsWithoutMessageOrCause: + active: true + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + exceptions: + - 'ArrayIndexOutOfBoundsException' + - 'Exception' + - 'IllegalArgumentException' + - 'IllegalMonitorStateException' + - 'IllegalStateException' + - 'IndexOutOfBoundsException' + - 'NullPointerException' + - 'RuntimeException' + - 'Throwable' + ThrowingNewInstanceOfSameException: + active: true + TooGenericExceptionCaught: + active: true + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + exceptionNames: + - 'ArrayIndexOutOfBoundsException' + - 'Error' + - 'Exception' + - 'IllegalMonitorStateException' + - 'IndexOutOfBoundsException' + - 'NullPointerException' + - 'RuntimeException' + - 'Throwable' + allowedExceptionNameRegex: '_|(ignore|expected).*' + TooGenericExceptionThrown: + active: true + exceptionNames: + - 'Error' + - 'Exception' + - 'RuntimeException' + - 'Throwable' + +naming: + active: true + BooleanPropertyNaming: + active: false + allowedPattern: '^(is|has|are)' + ClassNaming: + active: true + classPattern: '[A-Z][a-zA-Z0-9]*' + ConstructorParameterNaming: + active: true + parameterPattern: '[a-z][A-Za-z0-9]*' + privateParameterPattern: '[a-z][A-Za-z0-9]*' + excludeClassPattern: '$^' + EnumNaming: + active: true + enumEntryPattern: '[A-Z][_a-zA-Z0-9]*' + ForbiddenClassName: + active: false + forbiddenName: [] + FunctionMaxLength: + active: false + maximumFunctionNameLength: 30 + FunctionMinLength: + active: false + minimumFunctionNameLength: 3 + FunctionNaming: + active: true + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + functionPattern: '[a-z][a-zA-Z0-9]*' + excludeClassPattern: '$^' + FunctionParameterNaming: + active: true + parameterPattern: '[a-z][A-Za-z0-9]*' + excludeClassPattern: '$^' + InvalidPackageDeclaration: + active: true + rootPackage: '' + requireRootInDeclaration: false + LambdaParameterNaming: + active: false + parameterPattern: '[a-z][A-Za-z0-9]*|_' + MatchingDeclarationName: + active: true + mustBeFirst: true + MemberNameEqualsClassName: + active: true + ignoreOverridden: true + NoNameShadowing: + active: true + NonBooleanPropertyPrefixedWithIs: + active: false + ObjectPropertyNaming: + active: true + constantPattern: '[A-Za-z][_A-Za-z0-9]*' + propertyPattern: '[A-Za-z][_A-Za-z0-9]*' + privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*' + PackageNaming: + active: true + packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*' + TopLevelPropertyNaming: + active: true + constantPattern: '[A-Z][_A-Z0-9]*' + propertyPattern: '[A-Za-z][_A-Za-z0-9]*' + privatePropertyPattern: '_?[A-Za-z][_A-Za-z0-9]*' + VariableMaxLength: + active: false + maximumVariableNameLength: 64 + VariableMinLength: + active: false + minimumVariableNameLength: 1 + VariableNaming: + active: true + variablePattern: '[a-z][A-Za-z0-9]*' + privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*' + excludeClassPattern: '$^' + +performance: + active: true + ArrayPrimitive: + active: true + CouldBeSequence: + active: false + threshold: 3 + ForEachOnRange: + active: true + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + SpreadOperator: + active: true + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + UnnecessaryPartOfBinaryExpression: + active: false + UnnecessaryTemporaryInstantiation: + active: true + +potential-bugs: + active: true + AvoidReferentialEquality: + active: true + forbiddenTypePatterns: + - 'kotlin.String' + CastNullableToNonNullableType: + active: false + CastToNullableType: + active: false + Deprecation: + active: false + DontDowncastCollectionTypes: + active: false + DoubleMutabilityForCollection: + active: true + mutableTypes: + - 'kotlin.collections.MutableList' + - 'kotlin.collections.MutableMap' + - 'kotlin.collections.MutableSet' + - 'java.util.ArrayList' + - 'java.util.LinkedHashSet' + - 'java.util.HashSet' + - 'java.util.LinkedHashMap' + - 'java.util.HashMap' + ElseCaseInsteadOfExhaustiveWhen: + active: false + ignoredSubjectTypes: [] + EqualsAlwaysReturnsTrueOrFalse: + active: true + EqualsWithHashCodeExist: + active: true + ExitOutsideMain: + active: false + ExplicitGarbageCollectionCall: + active: true + HasPlatformType: + active: true + IgnoredReturnValue: + active: true + restrictToConfig: true + returnValueAnnotations: + - 'CheckResult' + - '*.CheckResult' + - 'CheckReturnValue' + - '*.CheckReturnValue' + ignoreReturnValueAnnotations: + - 'CanIgnoreReturnValue' + - '*.CanIgnoreReturnValue' + returnValueTypes: + - 'kotlin.sequences.Sequence' + - 'kotlinx.coroutines.flow.*Flow' + - 'java.util.stream.*Stream' + ignoreFunctionCall: [] + ImplicitDefaultLocale: + active: true + ImplicitUnitReturnType: + active: false + allowExplicitReturnType: true + InvalidRange: + active: true + IteratorHasNextCallsNextMethod: + active: true + IteratorNotThrowingNoSuchElementException: + active: true + LateinitUsage: + active: false + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + ignoreOnClassesPattern: '' + MapGetWithNotNullAssertionOperator: + active: true + MissingPackageDeclaration: + active: false + excludes: ['**/*.kts'] + NullCheckOnMutableProperty: + active: false + NullableToStringCall: + active: false + PropertyUsedBeforeDeclaration: + active: false + UnconditionalJumpStatementInLoop: + active: false + UnnecessaryNotNullCheck: + active: false + UnnecessaryNotNullOperator: + active: true + UnnecessarySafeCall: + active: true + UnreachableCatchBlock: + active: true + UnreachableCode: + active: true + UnsafeCallOnNullableType: + active: true + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + UnsafeCast: + active: true + UnusedUnaryOperator: + active: true + UselessPostfixExpression: + active: true + WrongEqualsTypeParameter: + active: true + +style: + active: true + AlsoCouldBeApply: + active: false + BracesOnIfStatements: + active: false + singleLine: 'never' + multiLine: 'always' + BracesOnWhenStatements: + active: false + singleLine: 'necessary' + multiLine: 'consistent' + CanBeNonNullable: + active: false + CascadingCallWrapping: + active: false + includeElvis: true + ClassOrdering: + active: false + CollapsibleIfStatements: + active: false + DataClassContainsFunctions: + 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: + active: false + ExplicitCollectionElementAccessMethod: + active: false + ExplicitItLambdaParameter: + active: true + 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 + 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:' + - reason: 'Forbidden TODO todo marker in comment, please do the changes.' + value: 'TODO:' + allowedPatterns: '' + ForbiddenImport: + active: false + imports: [] + forbiddenPatterns: '' + ForbiddenMethodCall: + active: false + methods: + - reason: 'print does not allow you to configure the output stream. Use a logger instead.' + value: 'kotlin.io.print' + - reason: 'println does not allow you to configure the output stream. Use a logger instead.' + value: 'kotlin.io.println' + ForbiddenSuppress: + active: false + rules: [] + ForbiddenVoid: + active: true + ignoreOverridden: false + ignoreUsageInGenerics: false + FunctionOnlyReturningConstant: + active: true + ignoreOverridableFunction: true + ignoreActualFunction: true + excludedFunctions: [] + LoopWithTooManyJumpStatements: + active: true + maxJumpCount: 1 + MagicNumber: + active: true + excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**', '**/*.kts'] + ignoreNumbers: + - '-1' + - '0' + - '1' + - '2' + ignoreHashCodeFunction: true + ignorePropertyDeclaration: false + ignoreLocalVariableDeclaration: false + ignoreConstantDeclaration: true + ignoreCompanionObjectPropertyDeclaration: true + ignoreAnnotation: false + ignoreNamedArgument: true + ignoreEnums: false + ignoreRanges: false + ignoreExtensionFunctions: true + MandatoryBracesLoops: + active: false + MaxChainedCallsOnSameLine: + active: false + maxChainedCalls: 5 + MaxLineLength: + active: true + maxLineLength: 120 + excludePackageStatements: true + excludeImportStatements: true + excludeCommentStatements: false + excludeRawStrings: true + MayBeConst: + active: true + ModifierOrder: + active: true + MultilineLambdaItParameter: + active: false + MultilineRawStringIndentation: + active: false + indentSize: 4 + trimmingMethods: + - 'trimIndent' + - 'trimMargin' + NestedClassesVisibility: + active: true + NewLineAtEndOfFile: + active: true + NoTabs: + active: false + NullableBooleanCheck: + active: false + ObjectLiteralToLambda: + active: true + OptionalAbstractKeyword: + active: true + OptionalUnit: + active: false + PreferToOverPairSyntax: + active: false + ProtectedMemberInFinalClass: + active: true + RedundantExplicitType: + active: false + RedundantHigherOrderMapUsage: + active: true + RedundantVisibilityModifierRule: + active: false + ReturnCount: + active: true + max: 2 + excludedFunctions: + - 'equals' + excludeLabeled: false + excludeReturnFromLambda: true + excludeGuardClauses: false + SafeCast: + active: true + SerialVersionUIDInSerializableClass: + active: true + SpacingBetweenPackageAndImports: + active: false + StringShouldBeRawString: + active: false + maxEscapedCharacterCount: 2 + ignoredCharacters: [] + ThrowsCount: + active: true + max: 2 + excludeGuardClauses: false + TrailingWhitespace: + active: false + TrimMultilineRawString: + active: false + trimmingMethods: + - 'trimIndent' + - 'trimMargin' + UnderscoresInNumericLiterals: + active: false + acceptableLength: 4 + allowNonStandardGrouping: false + UnnecessaryAbstractClass: + active: true + UnnecessaryAnnotationUseSiteTarget: + active: false + UnnecessaryApply: + active: true + UnnecessaryBackticks: + active: false + UnnecessaryBracesAroundTrailingLambda: + active: false + UnnecessaryFilter: + active: true + UnnecessaryInheritance: + active: true + UnnecessaryInnerClass: + active: false + UnnecessaryLet: + active: false + UnnecessaryParentheses: + active: false + allowForUnclearPrecedence: false + UntilInsteadOfRangeTo: + active: false + UnusedImports: + active: false + UnusedParameter: + active: true + allowedNames: 'ignored|expected' + UnusedPrivateClass: + active: true + UnusedPrivateMember: + active: true + allowedNames: '' + UnusedPrivateProperty: + active: true + allowedNames: '_|ignored|expected|serialVersionUID' + UseAnyOrNoneInsteadOfFind: + active: true + UseArrayLiteralsInAnnotations: + active: true + UseCheckNotNull: + active: true + UseCheckOrError: + active: true + UseDataClass: + active: false + allowVars: false + UseEmptyCounterpart: + active: false + UseIfEmptyOrIfBlank: + active: false + UseIfInsteadOfWhen: + active: false + ignoreWhenContainingVariableDeclaration: false + UseIsNullOrEmpty: + active: true + UseLet: + active: false + UseOrEmpty: + active: true + UseRequire: + active: true + UseRequireNotNull: + active: true + UseSumOfInsteadOfFlatMapSize: + active: false + UselessCallOnNotNull: + active: true + UtilityClassWithPublicConstructor: + active: true + VarCouldBeVal: + active: true + ignoreLateinitVar: false + WildcardImport: + active: true + excludeImports: + - 'java.util.*' From 77aaaf2110897c39f5c845832bbb12e8c2d0b7e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Fri, 2 Feb 2024 16:30:33 +0100 Subject: [PATCH 04/14] Apply custom compose, report and other detekt rules --- android/config/detekt.yml | 202 +++++++++++++++++++++++++++++++------- 1 file changed, 164 insertions(+), 38 deletions(-) diff --git a/android/config/detekt.yml b/android/config/detekt.yml index 7615608ce326..d6444acd7f4d 100644 --- a/android/config/detekt.yml +++ b/android/config/detekt.yml @@ -34,21 +34,21 @@ processors: console-reports: active: true exclude: - - 'ProjectStatisticsReport' - - 'ComplexityReport' - - 'NotificationReport' - - 'FindingsReport' - - 'FileBasedFindingsReport' + - 'ProjectStatisticsReport' + - 'ComplexityReport' + - 'NotificationReport' + - 'FindingsReport' + - 'FileBasedFindingsReport' # - 'LiteFindingsReport' output-reports: active: true exclude: - # - 'TxtOutputReport' - # - 'XmlOutputReport' - # - 'HtmlOutputReport' - # - 'MdOutputReport' - # - 'SarifOutputReport' + - 'TxtOutputReport' + - 'XmlOutputReport' + - 'MdOutputReport' + - 'SarifOutputReport' + - 'sarif' comments: active: true @@ -67,7 +67,15 @@ comments: endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)' KDocReferencesNonPublicProperty: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' OutdatedDocumentation: active: false matchTypeParameters: true @@ -75,7 +83,15 @@ comments: allowParamOnConstructorProperties: false UndocumentedPublicClass: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' searchInNestedClass: true searchInInnerClass: true searchInInnerObject: true @@ -83,11 +99,27 @@ comments: searchInProtectedClass: false UndocumentedPublicFunction: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' searchProtectedFunction: false UndocumentedPublicProperty: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' searchProtectedProperty: false complexity: @@ -128,12 +160,12 @@ complexity: threshold: 600 LongMethod: active: true - threshold: 60 + threshold: 80 LongParameterList: active: true - functionThreshold: 6 - constructorThreshold: 7 - ignoreDefaultParameters: false + functionThreshold: 15 + constructorThreshold: 10 + ignoreDefaultParameters: true ignoreDataClasses: true ignoreAnnotatedParameter: [] MethodOverloading: @@ -159,19 +191,36 @@ complexity: active: false StringLiteralDuplication: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/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/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] - thresholdInFiles: 11 - thresholdInClasses: 11 - thresholdInInterfaces: 11 - thresholdInObjects: 11 - thresholdInEnums: 11 + # Configuration maybe should change when this has been merged: https://github.com/detekt/detekt/issues/6516 + active: true + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' + thresholdInFiles: 30 + thresholdInClasses: 14 + thresholdInInterfaces: 14 + thresholdInObjects: 14 + thresholdInEnums: 14 ignoreDeprecated: false ignorePrivate: false ignoreOverridden: false @@ -243,7 +292,15 @@ exceptions: - 'toString' InstanceOfCheckForException: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' NotImplementedDeclaration: active: false ObjectExtendsThrowable: @@ -256,7 +313,7 @@ exceptions: active: true ignoreLabeled: false SwallowedException: - active: true + active: false ignoredExceptionTypes: - 'InterruptedException' - 'MalformedURLException' @@ -269,7 +326,15 @@ exceptions: active: false ThrowingExceptionsWithoutMessageOrCause: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' exceptions: - 'ArrayIndexOutOfBoundsException' - 'Exception' @@ -284,7 +349,15 @@ exceptions: active: true TooGenericExceptionCaught: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' exceptionNames: - 'ArrayIndexOutOfBoundsException' - 'Error' @@ -330,9 +403,18 @@ naming: minimumFunctionNameLength: 3 FunctionNaming: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' functionPattern: '[a-z][a-zA-Z0-9]*' excludeClassPattern: '$^' + ignoreAnnotated: ['Composable'] FunctionParameterNaming: active: true parameterPattern: '[a-z][A-Za-z0-9]*' @@ -364,7 +446,7 @@ naming: packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*' TopLevelPropertyNaming: active: true - constantPattern: '[A-Z][_A-Z0-9]*' + constantPattern: '[A-Z][_A-Za-z0-9]*' propertyPattern: '[A-Za-z][_A-Za-z0-9]*' privatePropertyPattern: '_?[A-Za-z][_A-Za-z0-9]*' VariableMaxLength: @@ -388,10 +470,26 @@ performance: threshold: 3 ForEachOnRange: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' SpreadOperator: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' UnnecessaryPartOfBinaryExpression: active: false UnnecessaryTemporaryInstantiation: @@ -464,7 +562,15 @@ potential-bugs: active: true LateinitUsage: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' ignoreOnClassesPattern: '' MapGetWithNotNullAssertionOperator: active: true @@ -491,7 +597,15 @@ potential-bugs: active: true UnsafeCallOnNullableType: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' UnsafeCast: active: true UnusedUnaryOperator: @@ -532,6 +646,7 @@ style: DestructuringDeclarationWithTooManyEntries: active: true maxDestructuringEntries: 3 + ignoreAnnotated: ['Composable'] DoubleNegativeLambda: active: false negativeFunctions: @@ -608,14 +723,23 @@ style: maxJumpCount: 1 MagicNumber: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**', '**/*.kts'] + excludes: + - '**/test/**' + - '**/androidTest/**' + - '**/commonTest/**' + - '**/jvmTest/**' + - '**/androidUnitTest/**' + - '**/androidInstrumentedTest/**' + - '**/jsTest/**' + - '**/iosTest/**' + - '**/*.kts' ignoreNumbers: - '-1' - '0' - '1' - '2' ignoreHashCodeFunction: true - ignorePropertyDeclaration: false + ignorePropertyDeclaration: true ignoreLocalVariableDeclaration: false ignoreConstantDeclaration: true ignoreCompanionObjectPropertyDeclaration: true @@ -624,6 +748,7 @@ style: ignoreEnums: false ignoreRanges: false ignoreExtensionFunctions: true + ignoreAnnotated: ['Preview'] MandatoryBracesLoops: active: false MaxChainedCallsOnSameLine: @@ -738,6 +863,7 @@ style: UnusedPrivateMember: active: true allowedNames: '' + ignoreAnnotated: ['Preview'] UnusedPrivateProperty: active: true allowedNames: '_|ignored|expected|serialVersionUID' From 45fa4fa21373e7c275a73acd9b947c86cfebc540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Thu, 25 Jan 2024 09:58:06 +0100 Subject: [PATCH 05/14] Clean up UnusedPrivateMember and UnusedPrivateProperty --- .../compose/screen/RedeemVoucherDialogTest.kt | 1 - .../ServiceConnectionDeviceDataSourceTest.kt | 3 --- .../mullvad/mullvadvpn/service/MullvadDaemon.kt | 14 ++++++++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/RedeemVoucherDialogTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/RedeemVoucherDialogTest.kt index 9a2a9ce86ddf..44338c398935 100644 --- a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/RedeemVoucherDialogTest.kt +++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/RedeemVoucherDialogTest.kt @@ -149,7 +149,6 @@ class RedeemVoucherDialogTest { } companion object { - private const val REDEEM_BUTTON_TEXT = "Redeem" private const val CANCEL_BUTTON_TEXT = "Cancel" private const val GOT_IT_BUTTON_TEXT = "Got it!" private const val DUMMY_VOUCHER = "DUMMY____VOUCHER" diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionDeviceDataSourceTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionDeviceDataSourceTest.kt index d4fd34943889..8f17f37bbda2 100644 --- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionDeviceDataSourceTest.kt +++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionDeviceDataSourceTest.kt @@ -13,7 +13,6 @@ import io.mockk.mockkObject import io.mockk.mockkStatic import io.mockk.unmockkAll import kotlin.reflect.KClass -import net.mullvad.mullvadvpn.lib.common.util.JobTracker import net.mullvad.mullvadvpn.lib.ipc.Event import net.mullvad.mullvadvpn.lib.ipc.EventDispatcher import net.mullvad.mullvadvpn.lib.ipc.Request @@ -22,8 +21,6 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test class ServiceConnectionDeviceDataSourceTest { - private val tracker = JobTracker() - @MockK private lateinit var mockedMainLooper: Looper @MockK private lateinit var mockedDispatchingHandler: EventDispatcher diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt index 107f5d35fe2f..52e662c77194 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt @@ -296,30 +296,44 @@ class MullvadDaemon( quantumResistant: QuantumResistantState ) + // Used by JNI + @Suppress("unused") private fun notifyAppVersionInfoEvent(appVersionInfo: AppVersionInfo) { onAppVersionInfoChange?.invoke(appVersionInfo) } + // Used by JNI + @Suppress("unused") private fun notifyRelayListEvent(relayList: RelayList) { onRelayListChange?.invoke(relayList) } + // Used by JNI + @Suppress("unused") private fun notifySettingsEvent(settings: Settings) { onSettingsChange.notify(settings) } + // Used by JNI + @Suppress("unused") private fun notifyTunnelStateEvent(event: TunnelState) { onTunnelStateChange.notify(event) } + // Used by JNI + @Suppress("unused") private fun notifyDaemonStopped() { onDaemonStopped?.invoke() } + // Used by JNI + @Suppress("unused") private fun notifyDeviceEvent(event: DeviceEvent) { _deviceStateUpdates.tryEmit(event.newState) } + // Used by JNI + @Suppress("unused") private fun notifyRemoveDeviceEvent(event: RemoveDeviceEvent) { _deviceListUpdates.tryEmit(DeviceListEvent.Available(event.accountToken, event.newDevices)) } From dc356c9c2045327d9f5a3d4a81be7b8c5d249b65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Tue, 23 Jan 2024 07:59:40 +0100 Subject: [PATCH 06/14] Fix class name --- .../net/mullvad/mullvadvpn/test/arch/classes/DataClassTests.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/classes/DataClassTests.kt b/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/classes/DataClassTests.kt index 44ca7bcd499c..06ffaddcc39e 100644 --- a/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/classes/DataClassTests.kt +++ b/android/test/arch/src/test/kotlin/net/mullvad/mullvadvpn/test/arch/classes/DataClassTests.kt @@ -6,7 +6,7 @@ import com.lemonappdev.konsist.api.ext.list.properties import com.lemonappdev.konsist.api.verify.assertNot import org.junit.jupiter.api.Test -class DataClasses { +class DataClassTests { @Test fun `ensure data classes only use immutable properties`() = Konsist.scopeFromProject() From eafd38b64dc6732496312424722c9465dfd6daff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Tue, 23 Jan 2024 08:00:18 +0100 Subject: [PATCH 07/14] Add const property to old const --- .../net/mullvad/mullvadvpn/service/MullvadVpnService.kt | 2 +- .../service/notifications/AccountExpiryNotification.kt | 4 ++-- .../service/notifications/TunnelStateNotification.kt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt index b0c55540a672..66a77b0d7334 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -273,7 +273,7 @@ class MullvadVpnService : TalpidVpnService() { } companion object { - private val TAG = "mullvad" + private const val TAG = "mullvad" init { System.loadLibrary("mullvad_jni") diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt index 371e19be7b68..634051b2b1e9 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt @@ -140,8 +140,8 @@ class AccountExpiryNotification( } companion object { - val NOTIFICATION_ID: Int = 2 + const val NOTIFICATION_ID: Int = 2 val REMAINING_TIME_FOR_REMINDERS = Duration.standardDays(2) - val TIME_BETWEEN_CHECKS: Long = 12 /* h */ * 60 /* min */ * 60 /* s */ * 1000 /* ms */ + const val TIME_BETWEEN_CHECKS: Long = 12 /* h */ * 60 /* min */ * 60 /* s */ * 1000 /* ms */ } } diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/TunnelStateNotification.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/TunnelStateNotification.kt index 0c04c09eebdf..44a34589d96f 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/TunnelStateNotification.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/TunnelStateNotification.kt @@ -147,6 +147,6 @@ class TunnelStateNotification(val context: Context) { } companion object { - val NOTIFICATION_ID: Int = 1 + const val NOTIFICATION_ID: Int = 1 } } From 70a33111e13b0d4327c3132bd0e7b1e59e474fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Tue, 23 Jan 2024 08:06:15 +0100 Subject: [PATCH 08/14] Fix too general Exception --- .../util/PackageManagerExtensions.kt | 10 +++--- .../viewmodel/VpnSettingsViewModel.kt | 3 +- .../lib/billing/BillingRepository.kt | 31 +++++++------------ .../lib/common/util/CommonStringExtensions.kt | 4 ++- .../mullvad/mullvadvpn/lib/ipc/HandlerFlow.kt | 15 ++++----- .../net/mullvad/talpid/TalpidVpnService.kt | 2 +- 6 files changed, 27 insertions(+), 38 deletions(-) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt index ea8ce1f4e1ec..c5bf7965caa7 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt @@ -7,12 +7,10 @@ import androidx.core.graphics.drawable.toBitmapOrNull fun PackageManager.getApplicationIconBitmapOrNull(packageName: String): Bitmap? = try { getApplicationIcon(packageName).toBitmapOrNull() - } catch (e: Exception) { + } catch (e: PackageManager.NameNotFoundException) { // Name not found is thrown if the application is not installed + null + } catch (e: IllegalArgumentException) { // IllegalArgumentException is thrown if the application has an invalid icon - when (e) { - is PackageManager.NameNotFoundException, - is IllegalArgumentException -> null - else -> throw e - } + null } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt index 7a7332eb2a2f..3e88ccc28ad9 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt @@ -5,6 +5,7 @@ import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import java.net.InetAddress +import java.net.UnknownHostException import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.BufferOverflow @@ -223,7 +224,7 @@ class VpnSettingsViewModel( private fun List.asInetAddressList(): List { return try { map { InetAddress.getByName(it) } - } catch (ex: Exception) { + } catch (ex: UnknownHostException) { Log.e("mullvad", "Error parsing the DNS address list.") emptyList() } diff --git a/android/lib/billing/src/main/kotlin/net/mullvad/mullvadvpn/lib/billing/BillingRepository.kt b/android/lib/billing/src/main/kotlin/net/mullvad/mullvadvpn/lib/billing/BillingRepository.kt index f9239516d9a8..6b3098fad071 100644 --- a/android/lib/billing/src/main/kotlin/net/mullvad/mullvadvpn/lib/billing/BillingRepository.kt +++ b/android/lib/billing/src/main/kotlin/net/mullvad/mullvadvpn/lib/billing/BillingRepository.kt @@ -131,12 +131,8 @@ class BillingRepository(context: Context) { val activity = activityProvider() // Launch the billing flow billingClient.launchBillingFlow(activity, billingFlowParams) - } catch (t: Throwable) { - if (t is BillingException) { - t.toBillingResult() - } else { - throw t - } + } catch (t: BillingException) { + t.toBillingResult() } } @@ -150,15 +146,12 @@ class BillingRepository(context: Context) { .build() billingClient.queryPurchasesAsync(queryPurchaseHistoryParams) - } catch (t: Throwable) { - if (t is BillingException) { - t.toPurchasesResult() - } else { - throw t - } + } catch (t: BillingException) { + t.toPurchasesResult() } } + @Suppress("TooGenericExceptionCaught") private suspend fun queryProductDetails(productIds: List): ProductDetailsResult { return try { ensureConnected() @@ -174,15 +167,13 @@ class BillingRepository(context: Context) { params.setProductList(productList) billingClient.queryProductDetails(params.build()) + } catch (billingException: BillingException) { + ProductDetailsResult(billingException.toBillingResult(), null) } catch (t: Throwable) { - if (t is BillingException) { - return ProductDetailsResult(t.toBillingResult(), null) - } else { - return ProductDetailsResult( - BillingResult.newBuilder().setResponseCode(BillingResponseCode.ERROR).build(), - null - ) - } + ProductDetailsResult( + BillingResult.newBuilder().setResponseCode(BillingResponseCode.ERROR).build(), + null + ) } } } diff --git a/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/CommonStringExtensions.kt b/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/CommonStringExtensions.kt index 06a2de91485c..536fea3d2489 100644 --- a/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/CommonStringExtensions.kt +++ b/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/CommonStringExtensions.kt @@ -10,7 +10,9 @@ private const val SPACE_CHAR = ' ' fun String.parseAsDateTime(): DateTime? { return try { DateTime.parse(this, DateTimeFormat.forPattern(EXPIRY_FORMAT)) - } catch (ex: Exception) { + } catch (ex: IllegalArgumentException) { + null + } catch (ex: UnsupportedOperationException) { null } } diff --git a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/HandlerFlow.kt b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/HandlerFlow.kt index 4d60cf4d7b8f..7b839a365835 100644 --- a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/HandlerFlow.kt +++ b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/HandlerFlow.kt @@ -27,15 +27,12 @@ class HandlerFlow(looper: Looper, private val extractor: (Message) -> T) : try { channel.trySendBlocking(extractedData) - } catch (exception: Exception) { - when (exception) { - is ClosedSendChannelException, - is CancellationException -> { - Log.w("mullvad", "Received a message after HandlerFlow was closed", exception) - removeCallbacksAndMessages(null) - } - else -> throw exception - } + } catch (exception: ClosedSendChannelException) { + Log.w("mullvad", "Received a message after HandlerFlow was closed", exception) + removeCallbacksAndMessages(null) + } catch (exception: CancellationException) { + Log.w("mullvad", "Received a message after HandlerFlow was cancelled", exception) + removeCallbacksAndMessages(null) } } } diff --git a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt index 1d43b6f9f94f..94b097fe1310 100644 --- a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt +++ b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt @@ -141,7 +141,7 @@ open class TalpidVpnService : VpnService() { return when (address) { is Inet4Address -> 32 is Inet6Address -> 128 - else -> throw RuntimeException("Invalid IP address (not IPv4 nor IPv6)") + else -> throw IllegalArgumentException("Invalid IP address (not IPv4 nor IPv6)") } } From 68b143514ae128258458a1c00cff54e1d0e509a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Tue, 23 Jan 2024 09:00:23 +0100 Subject: [PATCH 09/14] Fix wildcard import --- .../mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt | 7 ++++++- .../mullvadvpn/service/endpoint/SettingsListener.kt | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt index adccf231a3b7..6ad5675a43c9 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/SplitTunnelingCell.kt @@ -8,7 +8,12 @@ import androidx.compose.foundation.layout.size import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt index 874b78cab3ad..9422b6a94e0a 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt @@ -8,7 +8,11 @@ import kotlinx.coroutines.channels.actor import kotlinx.coroutines.channels.trySendBlocking import net.mullvad.mullvadvpn.lib.ipc.Event import net.mullvad.mullvadvpn.lib.ipc.Request -import net.mullvad.mullvadvpn.model.* +import net.mullvad.mullvadvpn.model.DnsOptions +import net.mullvad.mullvadvpn.model.ObfuscationSettings +import net.mullvad.mullvadvpn.model.QuantumResistantState +import net.mullvad.mullvadvpn.model.RelaySettings +import net.mullvad.mullvadvpn.model.Settings import net.mullvad.mullvadvpn.service.MullvadDaemon import net.mullvad.talpid.util.EventNotifier From 3c5452635da52b675156fc27ffc50a22a7bf22d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Tue, 23 Jan 2024 09:02:51 +0100 Subject: [PATCH 10/14] Ignore magic numbers --- .../src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt index 39cee0342a87..843c7c293059 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt @@ -1,3 +1,5 @@ +@file:Suppress("MagicNumber") + package net.mullvad.mullvadvpn.util import kotlinx.coroutines.Deferred From a2e6a68e0addd1f5d5b952f23ed3ba78954634af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Thu, 25 Jan 2024 09:59:15 +0100 Subject: [PATCH 11/14] Remove unnecessary backticks --- android/buildSrc/src/main/kotlin/Extensions.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/buildSrc/src/main/kotlin/Extensions.kt b/android/buildSrc/src/main/kotlin/Extensions.kt index 0115aa9f300d..b81a40537bc7 100644 --- a/android/buildSrc/src/main/kotlin/Extensions.kt +++ b/android/buildSrc/src/main/kotlin/Extensions.kt @@ -11,8 +11,8 @@ fun String.isNonStableVersion(): Boolean { return isNonStable } -fun DependencyHandler.`leakCanaryImplementation`(dependencyNotation: Any): Dependency? = +fun DependencyHandler.leakCanaryImplementation(dependencyNotation: Any): Dependency? = add("leakCanaryImplementation", dependencyNotation) -fun DependencyHandler.`playImplementation`(dependencyNotation: Any): Dependency? = +fun DependencyHandler.playImplementation(dependencyNotation: Any): Dependency? = add("playImplementation", dependencyNotation) From ba3ee3340957ad996bf0f7cf363149e2fe683374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Mon, 22 Jan 2024 16:33:16 +0100 Subject: [PATCH 12/14] Add baseline --- android/config/baseline.xml | 616 ++++++++++++++++++++++++++++++++++++ 1 file changed, 616 insertions(+) create mode 100644 android/config/baseline.xml diff --git a/android/config/baseline.xml b/android/config/baseline.xml new file mode 100644 index 000000000000..cccc81b70311 --- /dev/null +++ b/android/config/baseline.xml @@ -0,0 +1,616 @@ + + + + + ComplexCondition:TunnelStateNotification.kt$TunnelStateNotification$context.isNotificationPermissionMissing().not() && visible && (!reconnecting || !showingReconnecting) + ConstructorParameterNaming:AccessMethodKt.kt$AccessMethodKt.BridgesKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Bridges.Builder + ConstructorParameterNaming:AccessMethodKt.kt$AccessMethodKt.DirectKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Direct.Builder + ConstructorParameterNaming:AccessMethodKt.kt$AccessMethodKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Builder + ConstructorParameterNaming:AccessMethodKt.kt$AccessMethodKt.ShadowsocksKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Shadowsocks.Builder + ConstructorParameterNaming:AccessMethodKt.kt$AccessMethodKt.Socks5LocalKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Socks5Local.Builder + ConstructorParameterNaming:AccessMethodKt.kt$AccessMethodKt.Socks5RemoteKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Socks5Remote.Builder + ConstructorParameterNaming:AccessMethodKt.kt$AccessMethodKt.SocksAuthKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.SocksAuth.Builder + ConstructorParameterNaming:AccessMethodSettingKt.kt$AccessMethodSettingKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethodSetting.Builder + ConstructorParameterNaming:AccountAndDevice.kt$AccountAndDevice$val account_token: String + ConstructorParameterNaming:AccountAndDeviceKt.kt$AccountAndDeviceKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccountAndDevice.Builder + ConstructorParameterNaming:AccountDataKt.kt$AccountDataKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccountData.Builder + ConstructorParameterNaming:AccountHistoryKt.kt$AccountHistoryKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccountHistory.Builder + ConstructorParameterNaming:ApiAccessMethodSettingsKt.kt$ApiAccessMethodSettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ApiAccessMethodSettings.Builder + ConstructorParameterNaming:ApiAddressesKt.kt$ApiAddressesKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ApiAddresses.Builder + ConstructorParameterNaming:AppVersionInfoKt.kt$AppVersionInfoKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AppVersionInfo.Builder + ConstructorParameterNaming:BridgeEndpointDataKt.kt$BridgeEndpointDataKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeEndpointData.Builder + ConstructorParameterNaming:BridgeSettingsKt.kt$BridgeSettingsKt.BridgeConstraintsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.BridgeConstraints.Builder + ConstructorParameterNaming:BridgeSettingsKt.kt$BridgeSettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.Builder + ConstructorParameterNaming:BridgeSettingsKt.kt$BridgeSettingsKt.LocalProxySettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.LocalProxySettings.Builder + ConstructorParameterNaming:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxyAuthKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxyAuth.Builder + ConstructorParameterNaming:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxySettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxySettings.Builder + ConstructorParameterNaming:BridgeSettingsKt.kt$BridgeSettingsKt.ShadowsocksProxySettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.ShadowsocksProxySettings.Builder + ConstructorParameterNaming:BridgeStateKt.kt$BridgeStateKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeState.Builder + ConstructorParameterNaming:ConnectionConfigKt.kt$ConnectionConfigKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.Builder + ConstructorParameterNaming:ConnectionConfigKt.kt$ConnectionConfigKt.OpenvpnConfigKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.OpenvpnConfig.Builder + ConstructorParameterNaming:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.Builder + ConstructorParameterNaming:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.PeerConfigKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.PeerConfig.Builder + ConstructorParameterNaming:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.TunnelConfigKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.TunnelConfig.Builder + ConstructorParameterNaming:CustomDnsOptionsKt.kt$CustomDnsOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.CustomDnsOptions.Builder + ConstructorParameterNaming:CustomListKt.kt$CustomListKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.CustomList.Builder + ConstructorParameterNaming:CustomListSettingsKt.kt$CustomListSettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.CustomListSettings.Builder + ConstructorParameterNaming:CustomRelaySettingsKt.kt$CustomRelaySettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.CustomRelaySettings.Builder + ConstructorParameterNaming:DaemonEventKt.kt$DaemonEventKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.DaemonEvent.Builder + ConstructorParameterNaming:DefaultDnsOptionsKt.kt$DefaultDnsOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.DefaultDnsOptions.Builder + ConstructorParameterNaming:DeviceEventKt.kt$DeviceEventKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.DeviceEvent.Builder + ConstructorParameterNaming:DeviceKt.kt$DeviceKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.Device.Builder + ConstructorParameterNaming:DeviceListKt.kt$DeviceListKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.DeviceList.Builder + ConstructorParameterNaming:DeviceRemovalKt.kt$DeviceRemovalKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.DeviceRemoval.Builder + ConstructorParameterNaming:DeviceStateKt.kt$DeviceStateKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.DeviceState.Builder + ConstructorParameterNaming:DnsOptionsKt.kt$DnsOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.DnsOptions.Builder + ConstructorParameterNaming:EndpointKt.kt$EndpointKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.Endpoint.Builder + ConstructorParameterNaming:ErrorStateKt.kt$ErrorStateKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ErrorState.Builder + ConstructorParameterNaming:ErrorStateKt.kt$ErrorStateKt.FirewallPolicyErrorKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ErrorState.FirewallPolicyError.Builder + ConstructorParameterNaming:ExcludedProcessKt.kt$ExcludedProcessKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ExcludedProcess.Builder + ConstructorParameterNaming:ExcludedProcessListKt.kt$ExcludedProcessListKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ExcludedProcessList.Builder + ConstructorParameterNaming:GeoIpLocationKt.kt$GeoIpLocationKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.GeoIpLocation.Builder + ConstructorParameterNaming:GeographicLocationConstraintKt.kt$GeographicLocationConstraintKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.GeographicLocationConstraint.Builder + ConstructorParameterNaming:LocationConstraintKt.kt$LocationConstraintKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.LocationConstraint.Builder + ConstructorParameterNaming:LocationKt.kt$LocationKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.Location.Builder + ConstructorParameterNaming:NewAccessMethodSettingKt.kt$NewAccessMethodSettingKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.NewAccessMethodSetting.Builder + ConstructorParameterNaming:NormalRelaySettingsKt.kt$NormalRelaySettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.NormalRelaySettings.Builder + ConstructorParameterNaming:ObfuscationEndpointKt.kt$ObfuscationEndpointKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ObfuscationEndpoint.Builder + ConstructorParameterNaming:ObfuscationSettingsKt.kt$ObfuscationSettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ObfuscationSettings.Builder + ConstructorParameterNaming:OpenVpnEndpointDataKt.kt$OpenVpnEndpointDataKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.OpenVpnEndpointData.Builder + ConstructorParameterNaming:OpenVpnEndpointKt.kt$OpenVpnEndpointKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.OpenVpnEndpoint.Builder + ConstructorParameterNaming:OpenvpnConstraintsKt.kt$OpenvpnConstraintsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.OpenvpnConstraints.Builder + ConstructorParameterNaming:PortRangeKt.kt$PortRangeKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.PortRange.Builder + ConstructorParameterNaming:ProxyEndpointKt.kt$ProxyEndpointKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ProxyEndpoint.Builder + ConstructorParameterNaming:PublicKeyKt.kt$PublicKeyKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.PublicKey.Builder + ConstructorParameterNaming:QuantumResistantStateKt.kt$QuantumResistantStateKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.QuantumResistantState.Builder + ConstructorParameterNaming:RelayKt.kt$RelayKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.Relay.Builder + ConstructorParameterNaming:RelayListCityKt.kt$RelayListCityKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.RelayListCity.Builder + ConstructorParameterNaming:RelayListCountryKt.kt$RelayListCountryKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.RelayListCountry.Builder + ConstructorParameterNaming:RelayListKt.kt$RelayListKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.RelayList.Builder + ConstructorParameterNaming:RelaySettingsKt.kt$RelaySettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.RelaySettings.Builder + ConstructorParameterNaming:RemoveDeviceEventKt.kt$RemoveDeviceEventKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.RemoveDeviceEvent.Builder + ConstructorParameterNaming:SettingsKt.kt$SettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.Settings.Builder + ConstructorParameterNaming:ShadowsocksEndpointDataKt.kt$ShadowsocksEndpointDataKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ShadowsocksEndpointData.Builder + ConstructorParameterNaming:SplitTunnelSettingsKt.kt$SplitTunnelSettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.SplitTunnelSettings.Builder + ConstructorParameterNaming:TransportPortKt.kt$TransportPortKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TransportPort.Builder + ConstructorParameterNaming:TunnelEndpointKt.kt$TunnelEndpointKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelEndpoint.Builder + ConstructorParameterNaming:TunnelMetadataKt.kt$TunnelMetadataKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelMetadata.Builder + ConstructorParameterNaming:TunnelOptionsKt.kt$TunnelOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.Builder + ConstructorParameterNaming:TunnelOptionsKt.kt$TunnelOptionsKt.GenericOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.GenericOptions.Builder + ConstructorParameterNaming:TunnelOptionsKt.kt$TunnelOptionsKt.OpenvpnOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.OpenvpnOptions.Builder + ConstructorParameterNaming:TunnelOptionsKt.kt$TunnelOptionsKt.WireguardOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.WireguardOptions.Builder + ConstructorParameterNaming:TunnelStateKt.kt$TunnelStateKt.ConnectedKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Connected.Builder + ConstructorParameterNaming:TunnelStateKt.kt$TunnelStateKt.ConnectingKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Connecting.Builder + ConstructorParameterNaming:TunnelStateKt.kt$TunnelStateKt.DisconnectedKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Disconnected.Builder + ConstructorParameterNaming:TunnelStateKt.kt$TunnelStateKt.DisconnectingKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Disconnecting.Builder + ConstructorParameterNaming:TunnelStateKt.kt$TunnelStateKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Builder + ConstructorParameterNaming:TunnelStateKt.kt$TunnelStateKt.ErrorKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Error.Builder + ConstructorParameterNaming:TunnelStateRelayInfoKt.kt$TunnelStateRelayInfoKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelStateRelayInfo.Builder + ConstructorParameterNaming:UUIDKt.kt$UUIDKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.UUID.Builder + ConstructorParameterNaming:Udp2TcpObfuscationSettingsKt.kt$Udp2TcpObfuscationSettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.Udp2TcpObfuscationSettings.Builder + ConstructorParameterNaming:VoucherSubmissionKt.kt$VoucherSubmissionKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.VoucherSubmission.Builder + ConstructorParameterNaming:WireguardConstraintsKt.kt$WireguardConstraintsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.WireguardConstraints.Builder + ConstructorParameterNaming:WireguardEndpointDataKt.kt$WireguardEndpointDataKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.WireguardEndpointData.Builder + ConstructorParameterNaming:WireguardRelayEndpointDataKt.kt$WireguardRelayEndpointDataKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.WireguardRelayEndpointData.Builder + CyclomaticComplexMethod:BillingPaymentRepository.kt$BillingPaymentRepository$override fun purchaseProduct( productId: ProductId, activityProvider: () -> Activity ): Flow<PurchaseResult> + CyclomaticComplexMethod:MockApiDispatcher.kt$MockApiDispatcher$override fun dispatch(request: RecordedRequest): MockResponse + CyclomaticComplexMethod:RelayLocationCell.kt$@Composable fun RelayLocationCell( relay: RelayItem, modifier: Modifier = Modifier, activeColor: Color = MaterialTheme.colorScheme.selected, inactiveColor: Color = MaterialTheme.colorScheme.error, selectedItem: RelayItem? = null, onSelectRelay: (item: RelayItem) -> Unit = {} ) + EmptyFunctionBlock:AccountTestRule.kt$AccountTestRule${} + EmptyKtFile:build.gradle.kts$.build.gradle.kts + ForbiddenComment:DeviceRevokedViewModel.kt$DeviceRevokedViewModel$// TODO: Refactor ConnectionProxy to be easily injectable rather than injecting + ForbiddenComment:MullvadDaemon.kt$MullvadDaemon$// TODO: Review this method when redoing Daemon communication, it can be null which was not + ForbiddenComment:PlayPurchaseInitError.kt$PlayPurchaseInitError.OtherError$// TODO: Add more errors here. + ForbiddenComment:PlayPurchaseVerifyError.kt$PlayPurchaseVerifyError.OtherError$// TODO: Add more errors here. + ForbiddenComment:ServiceConnectionManager.kt$ServiceConnectionManager$// TODO: Remove after refactoring fragments to support flow. + ForbiddenComment:ServiceConnectionManager.kt$ServiceConnectionManager$// TODO: Remove once `serviceNotifier` is no longer used. + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.BridgesKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Bridges + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.BridgesKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Bridges.Builder, ): Dsl + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.DirectKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Direct + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.DirectKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Direct.Builder, ): Dsl + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccessMethod + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Builder, ): Dsl + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.ShadowsocksKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Shadowsocks + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.ShadowsocksKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Shadowsocks.Builder, ): Dsl + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.Socks5LocalKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Socks5Local + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.Socks5LocalKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Socks5Local.Builder, ): Dsl + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.Socks5RemoteKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Socks5Remote + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.Socks5RemoteKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Socks5Remote.Builder, ): Dsl + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.SocksAuthKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccessMethod.SocksAuth + FunctionNaming:AccessMethodKt.kt$AccessMethodKt.SocksAuthKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.SocksAuth.Builder, ): Dsl + FunctionNaming:AccessMethodSettingKt.kt$AccessMethodSettingKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccessMethodSetting + FunctionNaming:AccessMethodSettingKt.kt$AccessMethodSettingKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethodSetting.Builder, ): Dsl + FunctionNaming:AccountAndDeviceKt.kt$AccountAndDeviceKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccountAndDevice + FunctionNaming:AccountAndDeviceKt.kt$AccountAndDeviceKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccountAndDevice.Builder, ): Dsl + FunctionNaming:AccountDataKt.kt$AccountDataKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccountData + FunctionNaming:AccountDataKt.kt$AccountDataKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccountData.Builder, ): Dsl + FunctionNaming:AccountHistoryKt.kt$AccountHistoryKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AccountHistory + FunctionNaming:AccountHistoryKt.kt$AccountHistoryKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AccountHistory.Builder, ): Dsl + FunctionNaming:ApiAccessMethodSettingsKt.kt$ApiAccessMethodSettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ApiAccessMethodSettings + FunctionNaming:ApiAccessMethodSettingsKt.kt$ApiAccessMethodSettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ApiAccessMethodSettings.Builder, ): Dsl + FunctionNaming:ApiAddressesKt.kt$ApiAddressesKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ApiAddresses + FunctionNaming:ApiAddressesKt.kt$ApiAddressesKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ApiAddresses.Builder, ): Dsl + FunctionNaming:AppVersionInfoKt.kt$AppVersionInfoKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.AppVersionInfo + FunctionNaming:AppVersionInfoKt.kt$AppVersionInfoKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.AppVersionInfo.Builder, ): Dsl + FunctionNaming:BridgeEndpointDataKt.kt$BridgeEndpointDataKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.BridgeEndpointData + FunctionNaming:BridgeEndpointDataKt.kt$BridgeEndpointDataKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.BridgeEndpointData.Builder, ): Dsl + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.BridgeConstraintsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.BridgeConstraints + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.BridgeConstraintsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.BridgeConstraints.Builder, ): Dsl + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.BridgeSettings + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.Builder, ): Dsl + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.LocalProxySettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.LocalProxySettings + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.LocalProxySettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.LocalProxySettings.Builder, ): Dsl + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxyAuthKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxyAuth + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxyAuthKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxyAuth.Builder, ): Dsl + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxySettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxySettings + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxySettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxySettings.Builder, ): Dsl + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.ShadowsocksProxySettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.ShadowsocksProxySettings + FunctionNaming:BridgeSettingsKt.kt$BridgeSettingsKt.ShadowsocksProxySettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.ShadowsocksProxySettings.Builder, ): Dsl + FunctionNaming:BridgeStateKt.kt$BridgeStateKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.BridgeState + FunctionNaming:BridgeStateKt.kt$BridgeStateKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.BridgeState.Builder, ): Dsl + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.Builder, ): Dsl + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.OpenvpnConfigKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.OpenvpnConfig + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.OpenvpnConfigKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.OpenvpnConfig.Builder, ): Dsl + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.Builder, ): Dsl + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.PeerConfigKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.PeerConfig + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.PeerConfigKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.PeerConfig.Builder, ): Dsl + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.TunnelConfigKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.TunnelConfig + FunctionNaming:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.TunnelConfigKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.TunnelConfig.Builder, ): Dsl + FunctionNaming:CustomDnsOptionsKt.kt$CustomDnsOptionsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.CustomDnsOptions + FunctionNaming:CustomDnsOptionsKt.kt$CustomDnsOptionsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.CustomDnsOptions.Builder, ): Dsl + FunctionNaming:CustomListKt.kt$CustomListKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.CustomList + FunctionNaming:CustomListKt.kt$CustomListKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.CustomList.Builder, ): Dsl + FunctionNaming:CustomListSettingsKt.kt$CustomListSettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.CustomListSettings + FunctionNaming:CustomListSettingsKt.kt$CustomListSettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.CustomListSettings.Builder, ): Dsl + FunctionNaming:CustomRelaySettingsKt.kt$CustomRelaySettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.CustomRelaySettings + FunctionNaming:CustomRelaySettingsKt.kt$CustomRelaySettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.CustomRelaySettings.Builder, ): Dsl + FunctionNaming:DaemonEventKt.kt$DaemonEventKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.DaemonEvent + FunctionNaming:DaemonEventKt.kt$DaemonEventKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.DaemonEvent.Builder, ): Dsl + FunctionNaming:DefaultDnsOptionsKt.kt$DefaultDnsOptionsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.DefaultDnsOptions + FunctionNaming:DefaultDnsOptionsKt.kt$DefaultDnsOptionsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.DefaultDnsOptions.Builder, ): Dsl + FunctionNaming:DeviceEventKt.kt$DeviceEventKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.DeviceEvent + FunctionNaming:DeviceEventKt.kt$DeviceEventKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.DeviceEvent.Builder, ): Dsl + FunctionNaming:DeviceKt.kt$DeviceKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.Device + FunctionNaming:DeviceKt.kt$DeviceKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.Device.Builder, ): Dsl + FunctionNaming:DeviceListKt.kt$DeviceListKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.DeviceList + FunctionNaming:DeviceListKt.kt$DeviceListKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.DeviceList.Builder, ): Dsl + FunctionNaming:DeviceRemovalKt.kt$DeviceRemovalKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.DeviceRemoval + FunctionNaming:DeviceRemovalKt.kt$DeviceRemovalKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.DeviceRemoval.Builder, ): Dsl + FunctionNaming:DeviceStateKt.kt$DeviceStateKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.DeviceState + FunctionNaming:DeviceStateKt.kt$DeviceStateKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.DeviceState.Builder, ): Dsl + FunctionNaming:DnsOptionsKt.kt$DnsOptionsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.DnsOptions + FunctionNaming:DnsOptionsKt.kt$DnsOptionsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.DnsOptions.Builder, ): Dsl + FunctionNaming:EndpointKt.kt$EndpointKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.Endpoint + FunctionNaming:EndpointKt.kt$EndpointKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.Endpoint.Builder, ): Dsl + FunctionNaming:ErrorStateKt.kt$ErrorStateKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ErrorState + FunctionNaming:ErrorStateKt.kt$ErrorStateKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ErrorState.Builder, ): Dsl + FunctionNaming:ErrorStateKt.kt$ErrorStateKt.FirewallPolicyErrorKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ErrorState.FirewallPolicyError + FunctionNaming:ErrorStateKt.kt$ErrorStateKt.FirewallPolicyErrorKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ErrorState.FirewallPolicyError.Builder, ): Dsl + FunctionNaming:ExcludedProcessKt.kt$ExcludedProcessKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ExcludedProcess + FunctionNaming:ExcludedProcessKt.kt$ExcludedProcessKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ExcludedProcess.Builder, ): Dsl + FunctionNaming:ExcludedProcessListKt.kt$ExcludedProcessListKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ExcludedProcessList + FunctionNaming:ExcludedProcessListKt.kt$ExcludedProcessListKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ExcludedProcessList.Builder, ): Dsl + FunctionNaming:GeoIpLocationKt.kt$GeoIpLocationKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.GeoIpLocation + FunctionNaming:GeoIpLocationKt.kt$GeoIpLocationKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.GeoIpLocation.Builder, ): Dsl + FunctionNaming:GeographicLocationConstraintKt.kt$GeographicLocationConstraintKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.GeographicLocationConstraint + FunctionNaming:GeographicLocationConstraintKt.kt$GeographicLocationConstraintKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.GeographicLocationConstraint.Builder, ): Dsl + FunctionNaming:LocationConstraintKt.kt$LocationConstraintKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.LocationConstraint + FunctionNaming:LocationConstraintKt.kt$LocationConstraintKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.LocationConstraint.Builder, ): Dsl + FunctionNaming:LocationKt.kt$LocationKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.Location + FunctionNaming:LocationKt.kt$LocationKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.Location.Builder, ): Dsl + FunctionNaming:NewAccessMethodSettingKt.kt$NewAccessMethodSettingKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.NewAccessMethodSetting + FunctionNaming:NewAccessMethodSettingKt.kt$NewAccessMethodSettingKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.NewAccessMethodSetting.Builder, ): Dsl + FunctionNaming:NormalRelaySettingsKt.kt$NormalRelaySettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.NormalRelaySettings + FunctionNaming:NormalRelaySettingsKt.kt$NormalRelaySettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.NormalRelaySettings.Builder, ): Dsl + FunctionNaming:ObfuscationEndpointKt.kt$ObfuscationEndpointKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ObfuscationEndpoint + FunctionNaming:ObfuscationEndpointKt.kt$ObfuscationEndpointKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ObfuscationEndpoint.Builder, ): Dsl + FunctionNaming:ObfuscationSettingsKt.kt$ObfuscationSettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ObfuscationSettings + FunctionNaming:ObfuscationSettingsKt.kt$ObfuscationSettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ObfuscationSettings.Builder, ): Dsl + FunctionNaming:OpenVpnEndpointDataKt.kt$OpenVpnEndpointDataKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.OpenVpnEndpointData + FunctionNaming:OpenVpnEndpointDataKt.kt$OpenVpnEndpointDataKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.OpenVpnEndpointData.Builder, ): Dsl + FunctionNaming:OpenVpnEndpointKt.kt$OpenVpnEndpointKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.OpenVpnEndpoint + FunctionNaming:OpenVpnEndpointKt.kt$OpenVpnEndpointKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.OpenVpnEndpoint.Builder, ): Dsl + FunctionNaming:OpenvpnConstraintsKt.kt$OpenvpnConstraintsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.OpenvpnConstraints + FunctionNaming:OpenvpnConstraintsKt.kt$OpenvpnConstraintsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.OpenvpnConstraints.Builder, ): Dsl + FunctionNaming:PortRangeKt.kt$PortRangeKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.PortRange + FunctionNaming:PortRangeKt.kt$PortRangeKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.PortRange.Builder, ): Dsl + FunctionNaming:ProxyEndpointKt.kt$ProxyEndpointKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ProxyEndpoint + FunctionNaming:ProxyEndpointKt.kt$ProxyEndpointKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ProxyEndpoint.Builder, ): Dsl + FunctionNaming:PublicKeyKt.kt$PublicKeyKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.PublicKey + FunctionNaming:PublicKeyKt.kt$PublicKeyKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.PublicKey.Builder, ): Dsl + FunctionNaming:QuantumResistantStateKt.kt$QuantumResistantStateKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.QuantumResistantState + FunctionNaming:QuantumResistantStateKt.kt$QuantumResistantStateKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.QuantumResistantState.Builder, ): Dsl + FunctionNaming:RelayKt.kt$RelayKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.Relay + FunctionNaming:RelayKt.kt$RelayKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.Relay.Builder, ): Dsl + FunctionNaming:RelayListCityKt.kt$RelayListCityKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.RelayListCity + FunctionNaming:RelayListCityKt.kt$RelayListCityKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.RelayListCity.Builder, ): Dsl + FunctionNaming:RelayListCountryKt.kt$RelayListCountryKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.RelayListCountry + FunctionNaming:RelayListCountryKt.kt$RelayListCountryKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.RelayListCountry.Builder, ): Dsl + FunctionNaming:RelayListKt.kt$RelayListKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.RelayList + FunctionNaming:RelayListKt.kt$RelayListKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.RelayList.Builder, ): Dsl + FunctionNaming:RelaySettingsKt.kt$RelaySettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.RelaySettings + FunctionNaming:RelaySettingsKt.kt$RelaySettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.RelaySettings.Builder, ): Dsl + FunctionNaming:RemoveDeviceEventKt.kt$RemoveDeviceEventKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.RemoveDeviceEvent + FunctionNaming:RemoveDeviceEventKt.kt$RemoveDeviceEventKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.RemoveDeviceEvent.Builder, ): Dsl + FunctionNaming:SettingsKt.kt$SettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.Settings + FunctionNaming:SettingsKt.kt$SettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.Settings.Builder, ): Dsl + FunctionNaming:ShadowsocksEndpointDataKt.kt$ShadowsocksEndpointDataKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.ShadowsocksEndpointData + FunctionNaming:ShadowsocksEndpointDataKt.kt$ShadowsocksEndpointDataKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.ShadowsocksEndpointData.Builder, ): Dsl + FunctionNaming:SplitTunnelSettingsKt.kt$SplitTunnelSettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.SplitTunnelSettings + FunctionNaming:SplitTunnelSettingsKt.kt$SplitTunnelSettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.SplitTunnelSettings.Builder, ): Dsl + FunctionNaming:TransportPortKt.kt$TransportPortKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TransportPort + FunctionNaming:TransportPortKt.kt$TransportPortKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TransportPort.Builder, ): Dsl + FunctionNaming:TunnelEndpointKt.kt$TunnelEndpointKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelEndpoint + FunctionNaming:TunnelEndpointKt.kt$TunnelEndpointKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelEndpoint.Builder, ): Dsl + FunctionNaming:TunnelMetadataKt.kt$TunnelMetadataKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelMetadata + FunctionNaming:TunnelMetadataKt.kt$TunnelMetadataKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelMetadata.Builder, ): Dsl + FunctionNaming:TunnelOptionsKt.kt$TunnelOptionsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelOptions + FunctionNaming:TunnelOptionsKt.kt$TunnelOptionsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.Builder, ): Dsl + FunctionNaming:TunnelOptionsKt.kt$TunnelOptionsKt.GenericOptionsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.GenericOptions + FunctionNaming:TunnelOptionsKt.kt$TunnelOptionsKt.GenericOptionsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.GenericOptions.Builder, ): Dsl + FunctionNaming:TunnelOptionsKt.kt$TunnelOptionsKt.OpenvpnOptionsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.OpenvpnOptions + FunctionNaming:TunnelOptionsKt.kt$TunnelOptionsKt.OpenvpnOptionsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.OpenvpnOptions.Builder, ): Dsl + FunctionNaming:TunnelOptionsKt.kt$TunnelOptionsKt.WireguardOptionsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.WireguardOptions + FunctionNaming:TunnelOptionsKt.kt$TunnelOptionsKt.WireguardOptionsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.WireguardOptions.Builder, ): Dsl + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.ConnectedKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelState.Connected + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.ConnectedKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Connected.Builder, ): Dsl + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.ConnectingKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelState.Connecting + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.ConnectingKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Connecting.Builder, ): Dsl + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.DisconnectedKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelState.Disconnected + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.DisconnectedKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Disconnected.Builder, ): Dsl + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.DisconnectingKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelState.Disconnecting + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.DisconnectingKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Disconnecting.Builder, ): Dsl + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelState + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Builder, ): Dsl + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.ErrorKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelState.Error + FunctionNaming:TunnelStateKt.kt$TunnelStateKt.ErrorKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Error.Builder, ): Dsl + FunctionNaming:TunnelStateRelayInfoKt.kt$TunnelStateRelayInfoKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.TunnelStateRelayInfo + FunctionNaming:TunnelStateRelayInfoKt.kt$TunnelStateRelayInfoKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.TunnelStateRelayInfo.Builder, ): Dsl + FunctionNaming:UUIDKt.kt$UUIDKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.UUID + FunctionNaming:UUIDKt.kt$UUIDKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.UUID.Builder, ): Dsl + FunctionNaming:Udp2TcpObfuscationSettingsKt.kt$Udp2TcpObfuscationSettingsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.Udp2TcpObfuscationSettings + FunctionNaming:Udp2TcpObfuscationSettingsKt.kt$Udp2TcpObfuscationSettingsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.Udp2TcpObfuscationSettings.Builder, ): Dsl + FunctionNaming:VoucherSubmissionKt.kt$VoucherSubmissionKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.VoucherSubmission + FunctionNaming:VoucherSubmissionKt.kt$VoucherSubmissionKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.VoucherSubmission.Builder, ): Dsl + FunctionNaming:WireguardConstraintsKt.kt$WireguardConstraintsKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.WireguardConstraints + FunctionNaming:WireguardConstraintsKt.kt$WireguardConstraintsKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.WireguardConstraints.Builder, ): Dsl + FunctionNaming:WireguardEndpointDataKt.kt$WireguardEndpointDataKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.WireguardEndpointData + FunctionNaming:WireguardEndpointDataKt.kt$WireguardEndpointDataKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.WireguardEndpointData.Builder, ): Dsl + FunctionNaming:WireguardRelayEndpointDataKt.kt$WireguardRelayEndpointDataKt.Dsl$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _build(): mullvad_daemon.management_interface.ManagementInterface.WireguardRelayEndpointData + FunctionNaming:WireguardRelayEndpointDataKt.kt$WireguardRelayEndpointDataKt.Dsl.Companion$@kotlin.jvm.JvmSynthetic @kotlin.PublishedApi internal fun _create( builder: mullvad_daemon.management_interface.ManagementInterface.WireguardRelayEndpointData.Builder, ): Dsl + LargeClass:ConnectScreenTest.kt$ConnectScreenTest + LargeClass:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt$ManagementServiceCoroutineImplBase : AbstractCoroutineServerImpl + LargeClass:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt$ManagementServiceCoroutineStub : AbstractCoroutineStub + LongMethod:ConnectScreen.kt$@Composable fun ConnectScreen( uiState: ConnectUiState, onDisconnectClick: () -> Unit = {}, onReconnectClick: () -> Unit = {}, onConnectClick: () -> Unit = {}, onCancelClick: () -> Unit = {}, onSwitchLocationClick: () -> Unit = {}, onUpdateVersionClick: () -> Unit = {}, onManageAccountClick: () -> Unit = {}, onSettingsClick: () -> Unit = {}, onAccountClick: () -> Unit = {}, onDismissNewDeviceClick: () -> Unit = {} ) + LongMethod:ConnectionButton.kt$@OptIn(ExperimentalMaterial3Api::class) @Composable private fun ConnectionButton( text: String, mainClick: () -> Unit, reconnectClick: () -> Unit, isReconnectButtonEnabled: Boolean, containerColor: Color, contentColor: Color, modifier: Modifier = Modifier, reconnectButtonTestTag: String = "" ) + LongMethod:FilterScreen.kt$@Composable fun FilterScreen( uiState: RelayFilterState, onBackClick: () -> Unit = {}, onApplyClick: () -> Unit = {}, onSelectedOwnership: (ownership: Ownership?) -> Unit = {}, onAllProviderCheckChange: (isChecked: Boolean) -> Unit = {}, onSelectedProvider: (checked: Boolean, provider: Provider) -> Unit = { _, _ -> } ) + LongMethod:LoginScreen.kt$@Composable @OptIn(ExperimentalComposeUiApi::class) private fun LoginContent( uiState: LoginUiState, onAccountNumberChange: (String) -> Unit, onLoginClick: (String) -> Unit, onDeleteHistoryClick: () -> Unit ) + LongMethod:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$final override fun bindService(): ServerServiceDefinition + LongMethod:NotificationBanner.kt$@Composable private fun Notification(notificationBannerData: NotificationData) + LongMethod:OutOfTimeScreen.kt$@Composable fun OutOfTimeScreen( uiState: OutOfTimeUiState, onDisconnectClick: () -> Unit = {}, onSitePaymentClick: () -> Unit = {}, onRedeemVoucherClick: () -> Unit = {}, onSettingsClick: () -> Unit = {}, onAccountClick: () -> Unit = {}, onPurchaseBillingProductClick: (ProductId) -> Unit = { _ -> }, navigateToVerificationPendingDialog: () -> Unit = {} ) + LongMethod:PrivacyDisclaimerScreen.kt$@Composable fun PrivacyDisclaimerScreen( uiState: PrivacyDisclaimerViewState, onPrivacyPolicyLinkClicked: () -> Unit, onAcceptClicked: () -> Unit, ) + LongMethod:RedeemVoucherDialog.kt$@Composable fun RedeemVoucherDialog( uiState: VoucherDialogUiState, onVoucherInputChange: (String) -> Unit = {}, onRedeem: (voucherCode: String) -> Unit, onDismiss: (isTimeAdded: Boolean) -> Unit ) + LongMethod:RelayLocationCell.kt$@Composable @Preview private fun PreviewRelayLocationCell() + LongMethod:RelayLocationCell.kt$@Composable fun RelayLocationCell( relay: RelayItem, modifier: Modifier = Modifier, activeColor: Color = MaterialTheme.colorScheme.selected, inactiveColor: Color = MaterialTheme.colorScheme.error, selectedItem: RelayItem? = null, onSelectRelay: (item: RelayItem) -> Unit = {} ) + LongMethod:SelectLocationScreen.kt$@Composable fun SelectLocationScreen( uiState: SelectLocationUiState, onSelectRelay: (item: RelayItem) -> Unit = {}, onSearchTermInput: (searchTerm: String) -> Unit = {}, onBackClick: () -> Unit = {}, onFilterClick: () -> Unit = {}, removeOwnershipFilter: () -> Unit = {}, removeProviderFilter: () -> Unit = {} ) + LongMethod:SettingsScreen.kt$@ExperimentalMaterial3Api @Composable fun SettingsScreen( uiState: SettingsUiState, onVpnSettingCellClick: () -> Unit = {}, onSplitTunnelingCellClick: () -> Unit = {}, onReportProblemCellClick: () -> Unit = {}, onBackClick: () -> Unit = {} ) + LongMethod:SplitTunnelingScreen.kt$@Composable @OptIn(ExperimentalFoundationApi::class) fun SplitTunnelingScreen( uiState: SplitTunnelingUiState = SplitTunnelingUiState.Loading, onShowSystemAppsClick: (show: Boolean) -> Unit = {}, onExcludeAppClick: (packageName: String) -> Unit = {}, onIncludeAppClick: (packageName: String) -> Unit = {}, onBackClick: () -> Unit = {}, onResolveIcon: (String) -> Bitmap? = { null }, ) + LongMethod:VpnSettingsScreen.kt$@Destination(style = SlideInFromRightTransition::class) @Composable fun VpnSettings( navigator: DestinationsNavigator, dnsDialogResult: ResultRecipient<DnsDialogDestination, Boolean>, customWgPortResult: ResultRecipient<WireguardCustomPortDialogDestination, Int?> ) + LongMethod:VpnSettingsScreen.kt$@OptIn(ExperimentalFoundationApi::class) @Composable fun VpnSettingsScreen( uiState: VpnSettingsUiState, snackbarHostState: SnackbarHostState = remember { SnackbarHostState() }, navigateToContentBlockersInfo: () -> Unit = {}, navigateToCustomDnsInfo: () -> Unit = {}, navigateToMalwareInfo: () -> Unit = {}, navigateToObfuscationInfo: () -> Unit = {}, navigateToQuantumResistanceInfo: () -> Unit = {}, navigateUdp2TcpInfo: () -> Unit = {}, navigateToWireguardPortInfo: (availablePortRanges: List<PortRange>) -> Unit = {}, navigateToLocalNetworkSharingInfo: () -> Unit = {}, navigateToWireguardPortDialog: () -> Unit = {}, onToggleBlockTrackers: (Boolean) -> Unit = {}, onToggleBlockAds: (Boolean) -> Unit = {}, onToggleBlockMalware: (Boolean) -> Unit = {}, onToggleAutoConnect: (Boolean) -> Unit = {}, onToggleLocalNetworkSharing: (Boolean) -> Unit = {}, onToggleBlockAdultContent: (Boolean) -> Unit = {}, onToggleBlockGambling: (Boolean) -> Unit = {}, onToggleBlockSocialMedia: (Boolean) -> Unit = {}, navigateToMtuDialog: (mtu: Int?) -> Unit = {}, navigateToDns: (index: Int?, address: String?) -> Unit = { _, _ -> }, onToggleDnsClick: (Boolean) -> Unit = {}, onBackClick: () -> Unit = {}, onSelectObfuscationSetting: (selectedObfuscation: SelectedObfuscation) -> Unit = {}, onSelectQuantumResistanceSetting: (quantumResistant: QuantumResistantState) -> Unit = {}, onWireguardPortSelected: (port: Constraint<Port>) -> Unit = {}, ) + MagicNumber:Chevron.kt$100 + MagicNumber:Chevron.kt$270f + MagicNumber:Chevron.kt$90f + MagicNumber:CustomTextField.kt$100 + MagicNumber:IntegerExtension.kt$1280 + MagicNumber:IntegerExtension.kt$1420 + MagicNumber:LoginScreen.kt$3f + MagicNumber:LoginViewModel.kt$LoginViewModel$1000 + MagicNumber:MullvadTileService.kt$MullvadTileService$300L + MagicNumber:NavigateBackIconButton.kt$90f + MagicNumber:RedeemVoucherDialog.kt$30 + MagicNumber:RedeemVoucherDialog.kt$59 + MagicNumber:ResourcesExtensions.kt$3 + MagicNumber:SelectLocationScreen.kt$270f + MagicNumber:TalpidVpnService.kt$TalpidVpnService$128 + MagicNumber:TalpidVpnService.kt$TalpidVpnService$32 + MatchingDeclarationName:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt + MatchingDeclarationName:SingleModuleExtensions.kt$NavGraph : NavGraphSpec + MaxLineLength:AccessMethodKt.kt$AccessMethodKt.Dsl$public + MaxLineLength:AccessMethodKt.kt$AccessMethodKt.ShadowsocksKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Shadowsocks.Builder + MaxLineLength:AccessMethodKt.kt$AccessMethodKt.Socks5LocalKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Socks5Local.Builder + MaxLineLength:AccessMethodKt.kt$AccessMethodKt.Socks5RemoteKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.Socks5Remote.Builder + MaxLineLength:AccessMethodKt.kt$AccessMethodKt.SocksAuthKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.AccessMethod.SocksAuth.Builder + MaxLineLength:AccessMethodKt.kt$public + MaxLineLength:AccessMethodSettingKt.kt$public + MaxLineLength:AccountAndDeviceKt.kt$public + MaxLineLength:AccountDataKt.kt$public + MaxLineLength:AccountHistoryKt.kt$public + MaxLineLength:ApiAccessMethodSettingsKt.kt$ApiAccessMethodSettingsKt.Dsl$public + MaxLineLength:ApiAccessMethodSettingsKt.kt$ApiAccessMethodSettingsKt.Dsl$values: kotlin.collections.Iterable<mullvad_daemon.management_interface.ManagementInterface.AccessMethodSetting> + MaxLineLength:ApiAddressesKt.kt$ApiAddressesKt.Dsl$public + MaxLineLength:BridgeEndpointDataKt.kt$BridgeEndpointDataKt.Dsl$public + MaxLineLength:BridgeEndpointDataKt.kt$BridgeEndpointDataKt.Dsl$values: kotlin.collections.Iterable<mullvad_daemon.management_interface.ManagementInterface.ShadowsocksEndpointData> + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt$mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.ShadowsocksProxySettings.newBuilder() + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.BridgeConstraintsKt.Dsl$@kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.BridgeConstraintsKt.Dsl$internal + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.BridgeConstraintsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.BridgeConstraints.Builder + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.BridgeConstraintsKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.BridgeConstraints.Builder + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.Dsl$public + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.LocalProxySettingsKt.Dsl$internal + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.LocalProxySettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.LocalProxySettings.Builder + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.LocalProxySettingsKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.LocalProxySettings.Builder + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxyAuthKt.Dsl$internal + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxyAuthKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxyAuth.Builder + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxyAuthKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxyAuth.Builder + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxySettingsKt.Dsl$internal + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxySettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxySettings.Builder + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.RemoteProxySettingsKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.RemoteProxySettings.Builder + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.ShadowsocksProxySettingsKt.Dsl$internal + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.ShadowsocksProxySettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.ShadowsocksProxySettings.Builder + MaxLineLength:BridgeSettingsKt.kt$BridgeSettingsKt.ShadowsocksProxySettingsKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.BridgeSettings.ShadowsocksProxySettings.Builder + MaxLineLength:BridgeSettingsKt.kt$public + MaxLineLength:ChangelogDestination.kt$ChangelogDestination$changeLog = changelogNavType.get(savedStateHandle, "changeLog") ?: throw RuntimeException("'changeLog' argument is mandatory, but was not present!") + MaxLineLength:ChangelogDestination.kt$ChangelogDestination$changeLog = changelogNavType.safeGet(bundle, "changeLog") ?: throw RuntimeException("'changeLog' argument is mandatory, but was not present!") + MaxLineLength:ChangelogNavType.kt$public val changelogNavType: ChangelogNavType = ChangelogNavType(DefaultParcelableNavTypeSerializer(Changelog::class.java)) + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.OpenvpnConfigKt.Dsl$internal + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.OpenvpnConfigKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.OpenvpnConfig.Builder + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.OpenvpnConfigKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.OpenvpnConfig.Builder + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt$block: mullvad_daemon.management_interface.ConnectionConfigKt.WireguardConfigKt.PeerConfigKt.Dsl.() -> kotlin.Unit + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt$block: mullvad_daemon.management_interface.ConnectionConfigKt.WireguardConfigKt.TunnelConfigKt.Dsl.() -> kotlin.Unit + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt$mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.PeerConfig.newBuilder() + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt$mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.TunnelConfig.newBuilder() + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.Dsl$internal + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.Builder + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.Dsl$public + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.Builder + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.PeerConfigKt.Dsl$@kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.PeerConfigKt.Dsl$internal + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.PeerConfigKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.PeerConfig.Builder + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.PeerConfigKt.Dsl$public + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.PeerConfigKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.PeerConfig.Builder + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.TunnelConfigKt.Dsl$@kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.TunnelConfigKt.Dsl$internal + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.TunnelConfigKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.TunnelConfig.Builder + MaxLineLength:ConnectionConfigKt.kt$ConnectionConfigKt.WireguardConfigKt.TunnelConfigKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.ConnectionConfig.WireguardConfig.TunnelConfig.Builder + MaxLineLength:ConnectionConfigKt.kt$block: mullvad_daemon.management_interface.ConnectionConfigKt.WireguardConfigKt.TunnelConfigKt.Dsl.() -> kotlin.Unit + MaxLineLength:ConnectionConfigKt.kt$public + MaxLineLength:ConnectionConfigKt.kt$public inline + MaxLineLength:CustomDnsOptionsKt.kt$CustomDnsOptionsKt.Dsl$@kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + MaxLineLength:CustomListKt.kt$CustomListKt.Dsl$public + MaxLineLength:CustomListKt.kt$CustomListKt.Dsl$values: kotlin.collections.Iterable<mullvad_daemon.management_interface.ManagementInterface.GeographicLocationConstraint> + MaxLineLength:CustomListSettingsKt.kt$CustomListSettingsKt.Dsl$public + MaxLineLength:CustomRelaySettingsKt.kt$public + MaxLineLength:DaemonEventKt.kt$public + MaxLineLength:DeviceEventKt.kt$public + MaxLineLength:DeviceKt.kt$public + MaxLineLength:DeviceListDestination.kt$DeviceListDestination$accountToken = DestinationsStringNavType.get(savedStateHandle, "accountToken") ?: throw RuntimeException("'accountToken' argument is mandatory, but was not present!") + MaxLineLength:DeviceListDestination.kt$DeviceListDestination$accountToken = DestinationsStringNavType.safeGet(bundle, "accountToken") ?: throw RuntimeException("'accountToken' argument is mandatory, but was not present!") + MaxLineLength:DeviceListKt.kt$DeviceListKt.Dsl$public + MaxLineLength:DeviceStateKt.kt$public + MaxLineLength:DnsOptionsKt.kt$public + MaxLineLength:ErrorStateKt.kt$ErrorStateKt.FirewallPolicyErrorKt.Dsl$internal + MaxLineLength:ErrorStateKt.kt$ErrorStateKt.FirewallPolicyErrorKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.ErrorState.FirewallPolicyError.Builder + MaxLineLength:ErrorStateKt.kt$ErrorStateKt.FirewallPolicyErrorKt.Dsl$public + MaxLineLength:ErrorStateKt.kt$ErrorStateKt.FirewallPolicyErrorKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.ErrorState.FirewallPolicyError.Builder + MaxLineLength:ErrorStateKt.kt$public + MaxLineLength:ExcludedProcessListKt.kt$ExcludedProcessListKt.Dsl$public + MaxLineLength:ExcludedProcessListKt.kt$ExcludedProcessListKt.Dsl$values: kotlin.collections.Iterable<mullvad_daemon.management_interface.ManagementInterface.ExcludedProcess> + MaxLineLength:GeographicLocationConstraintKt.kt$GeographicLocationConstraintKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.GeographicLocationConstraint.Builder + MaxLineLength:LocationConstraintKt.kt$public + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt$public + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.AddSplitTunnelProcess is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.ClearSplitTunnelProcesses is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.GetCurrentApiAccessMethod is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.GetExcludedProcesses is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.GetSplitTunnelProcesses is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.IsPerformingPostUpgrade is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.RemoveApiAccessMethod is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.RemoveSplitTunnelApp is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.RemoveSplitTunnelProcess is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.ResetWireguardRotationInterval is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.SetBlockWhenDisconnected is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.SetObfuscationSettings is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.SetQuantumResistantTunnel is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.SetWireguardRotationInterval is unimplemented" + MaxLineLength:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt.ManagementServiceCoroutineImplBase$"Method mullvad_daemon.management_interface.ManagementService.UpdateApiAccessMethod is unimplemented" + MaxLineLength:NavArgsGetters.kt$RemoveDeviceConfirmationDialogDestination.NavArgs::class.java -> RemoveDeviceConfirmationDialogDestination.argsFrom(argsContainer) as T + MaxLineLength:NavArgsGetters.kt$WireguardCustomPortDialogDestination.NavArgs::class.java -> WireguardCustomPortDialogDestination.argsFrom(argsContainer) as T + MaxLineLength:NavArgsGetters.kt$WireguardPortInfoDialogDestination.NavArgs::class.java -> WireguardPortInfoDialogDestination.argsFrom(argsContainer) as T + MaxLineLength:NewAccessMethodSettingKt.kt$public + MaxLineLength:NormalRelaySettingsKt.kt$NormalRelaySettingsKt.Dsl$@kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + MaxLineLength:NormalRelaySettingsKt.kt$public + MaxLineLength:ObfuscationSettingsKt.kt$ObfuscationSettingsKt.Dsl$public + MaxLineLength:ObfuscationSettingsKt.kt$public + MaxLineLength:OpenVpnEndpointDataKt.kt$OpenVpnEndpointDataKt.Dsl$public + MaxLineLength:OpenVpnEndpointDataKt.kt$OpenVpnEndpointDataKt.Dsl$values: kotlin.collections.Iterable<mullvad_daemon.management_interface.ManagementInterface.OpenVpnEndpoint> + MaxLineLength:OpenvpnConstraintsKt.kt$public + MaxLineLength:PaymentDestination.kt$PaymentDestination$productId = DestinationsStringNavType.get(savedStateHandle, "productId")?.let { ProductId(it) } ?: throw RuntimeException("'productId' argument is mandatory, but was not present!") + MaxLineLength:PaymentDestination.kt$PaymentDestination$productId = DestinationsStringNavType.safeGet(bundle, "productId")?.let { ProductId(it) } ?: throw RuntimeException("'productId' argument is mandatory, but was not present!") + MaxLineLength:PublicKeyKt.kt$public + MaxLineLength:RelayKt.kt$public + MaxLineLength:RelayListCityKt.kt$RelayListCityKt.Dsl$public + MaxLineLength:RelayListCountryKt.kt$RelayListCountryKt.Dsl$public + MaxLineLength:RelayListKt.kt$RelayListKt.Dsl$public + MaxLineLength:RelayListKt.kt$RelayListKt.Dsl$values: kotlin.collections.Iterable<mullvad_daemon.management_interface.ManagementInterface.RelayListCountry> + MaxLineLength:RelayListKt.kt$public + MaxLineLength:RelaySettingsKt.kt$public + MaxLineLength:RemoveDeviceConfirmationDialogDestination.kt$RemoveDeviceConfirmationDialogDestination$device = deviceNavType.get(savedStateHandle, "device") ?: throw RuntimeException("'device' argument is mandatory, but was not present!") + MaxLineLength:RemoveDeviceConfirmationDialogDestination.kt$RemoveDeviceConfirmationDialogDestination$device = deviceNavType.safeGet(bundle, "device") ?: throw RuntimeException("'device' argument is mandatory, but was not present!") + MaxLineLength:RemoveDeviceConfirmationDialogDestination.kt$RemoveDeviceConfirmationDialogDestination$public + MaxLineLength:RemoveDeviceEventKt.kt$RemoveDeviceEventKt.Dsl$public + MaxLineLength:SettingsKt.kt$public + MaxLineLength:SplitTunnelSettingsKt.kt$SplitTunnelSettingsKt.Dsl$@kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + MaxLineLength:TunnelEndpointKt.kt$public + MaxLineLength:TunnelOptionsKt.kt$TunnelOptionsKt.GenericOptionsKt.Dsl$internal + MaxLineLength:TunnelOptionsKt.kt$TunnelOptionsKt.GenericOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.GenericOptions.Builder + MaxLineLength:TunnelOptionsKt.kt$TunnelOptionsKt.GenericOptionsKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.GenericOptions.Builder + MaxLineLength:TunnelOptionsKt.kt$TunnelOptionsKt.OpenvpnOptionsKt.Dsl$internal + MaxLineLength:TunnelOptionsKt.kt$TunnelOptionsKt.OpenvpnOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.OpenvpnOptions.Builder + MaxLineLength:TunnelOptionsKt.kt$TunnelOptionsKt.OpenvpnOptionsKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.OpenvpnOptions.Builder + MaxLineLength:TunnelOptionsKt.kt$TunnelOptionsKt.WireguardOptionsKt.Dsl$internal + MaxLineLength:TunnelOptionsKt.kt$TunnelOptionsKt.WireguardOptionsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.WireguardOptions.Builder + MaxLineLength:TunnelOptionsKt.kt$TunnelOptionsKt.WireguardOptionsKt.Dsl.Companion$builder: mullvad_daemon.management_interface.ManagementInterface.TunnelOptions.WireguardOptions.Builder + MaxLineLength:TunnelOptionsKt.kt$public + MaxLineLength:TunnelStateKt.kt$TunnelStateKt.ConnectingKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Connecting.Builder + MaxLineLength:TunnelStateKt.kt$TunnelStateKt.DisconnectedKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Disconnected.Builder + MaxLineLength:TunnelStateKt.kt$TunnelStateKt.DisconnectingKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.TunnelState.Disconnecting.Builder + MaxLineLength:TunnelStateKt.kt$public + MaxLineLength:TunnelStateRelayInfoKt.kt$public + MaxLineLength:Udp2TcpObfuscationSettingsKt.kt$Udp2TcpObfuscationSettingsKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.Udp2TcpObfuscationSettings.Builder + MaxLineLength:VoucherSubmissionKt.kt$public + MaxLineLength:WireguardConstraintsKt.kt$public + MaxLineLength:WireguardCustomPortDialogDestination.kt$WireguardCustomPortDialogDestination$navArg = wireguardCustomPortNavArgsNavType.get(savedStateHandle, "navArg") ?: throw RuntimeException("'navArg' argument is mandatory, but was not present!") + MaxLineLength:WireguardCustomPortDialogDestination.kt$WireguardCustomPortDialogDestination$navArg = wireguardCustomPortNavArgsNavType.safeGet(bundle, "navArg") ?: throw RuntimeException("'navArg' argument is mandatory, but was not present!") + MaxLineLength:WireguardCustomPortNavArgsNavType.kt$public val wireguardCustomPortNavArgsNavType: WireguardCustomPortNavArgsNavType = WireguardCustomPortNavArgsNavType(DefaultParcelableNavTypeSerializer(WireguardCustomPortNavArgs::class.java)) + MaxLineLength:WireguardEndpointDataKt.kt$WireguardEndpointDataKt.Dsl$public + MaxLineLength:WireguardPortInfoDialogArgumentNavType.kt$public val wireguardPortInfoDialogArgumentNavType: WireguardPortInfoDialogArgumentNavType = WireguardPortInfoDialogArgumentNavType(DefaultParcelableNavTypeSerializer(WireguardPortInfoDialogArgument::class.java)) + MaxLineLength:WireguardPortInfoDialogDestination.kt$WireguardPortInfoDialogDestination$argument = wireguardPortInfoDialogArgumentNavType.get(savedStateHandle, "argument") ?: throw RuntimeException("'argument' argument is mandatory, but was not present!") + MaxLineLength:WireguardPortInfoDialogDestination.kt$WireguardPortInfoDialogDestination$argument = wireguardPortInfoDialogArgumentNavType.safeGet(bundle, "argument") ?: throw RuntimeException("'argument' argument is mandatory, but was not present!") + MaxLineLength:WireguardRelayEndpointDataKt.kt$WireguardRelayEndpointDataKt.Dsl$private val _builder: mullvad_daemon.management_interface.ManagementInterface.WireguardRelayEndpointData.Builder + MemberNameEqualsClassName:Message.kt$Message$val message: RawMessage get() = RawMessage.obtain().also { message -> message.what = messageId message.data = Bundle() message.data.putParcelable(messageKey, this) } + NestedBlockDepth:MockApiDispatcher.kt$MockApiDispatcher$override fun dispatch(request: RecordedRequest): MockResponse + NestedBlockDepth:RelayListExtensions.kt$fun List<RelayCountry>.filterOnSearchTerm( searchTerm: String, selectedItem: RelayItem? ): List<RelayCountry> + NewLineAtEndOfFile:AccountDestination.kt$net.mullvad.mullvadvpn.compose.destinations.AccountDestination.kt + NewLineAtEndOfFile:ChangelogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.ChangelogDestination.kt + NewLineAtEndOfFile:ChangelogNavType.kt$net.mullvad.mullvadvpn.compose.navtype.ChangelogNavType.kt + NewLineAtEndOfFile:ConnectDestination.kt$net.mullvad.mullvadvpn.compose.destinations.ConnectDestination.kt + NewLineAtEndOfFile:ContentBlockersInfoDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.ContentBlockersInfoDialogDestination.kt + NewLineAtEndOfFile:CustomDnsInfoDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.CustomDnsInfoDialogDestination.kt + NewLineAtEndOfFile:DeviceListDestination.kt$net.mullvad.mullvadvpn.compose.destinations.DeviceListDestination.kt + NewLineAtEndOfFile:DeviceNameInfoDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.DeviceNameInfoDialogDestination.kt + NewLineAtEndOfFile:DeviceNavType.kt$net.mullvad.mullvadvpn.compose.navtype.DeviceNavType.kt + NewLineAtEndOfFile:DeviceRevokedDestination.kt$net.mullvad.mullvadvpn.compose.destinations.DeviceRevokedDestination.kt + NewLineAtEndOfFile:DnsDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.DnsDialogDestination.kt + NewLineAtEndOfFile:FilterScreenDestination.kt$net.mullvad.mullvadvpn.compose.destinations.FilterScreenDestination.kt + NewLineAtEndOfFile:LocalNetworkSharingInfoDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.LocalNetworkSharingInfoDialogDestination.kt + NewLineAtEndOfFile:LoginDestination.kt$net.mullvad.mullvadvpn.compose.destinations.LoginDestination.kt + NewLineAtEndOfFile:MalwareInfoDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.MalwareInfoDialogDestination.kt + NewLineAtEndOfFile:MtuDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.MtuDialogDestination.kt + NewLineAtEndOfFile:NavGraphs.kt$net.mullvad.mullvadvpn.compose.NavGraphs.kt + NewLineAtEndOfFile:NoDaemonScreenDestination.kt$net.mullvad.mullvadvpn.compose.destinations.NoDaemonScreenDestination.kt + NewLineAtEndOfFile:ObfuscationInfoDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.ObfuscationInfoDialogDestination.kt + NewLineAtEndOfFile:OutOfTimeDestination.kt$net.mullvad.mullvadvpn.compose.destinations.OutOfTimeDestination.kt + NewLineAtEndOfFile:PaymentDestination.kt$net.mullvad.mullvadvpn.compose.destinations.PaymentDestination.kt + NewLineAtEndOfFile:PrivacyDisclaimerDestination.kt$net.mullvad.mullvadvpn.compose.destinations.PrivacyDisclaimerDestination.kt + NewLineAtEndOfFile:QuantumResistanceInfoDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.QuantumResistanceInfoDialogDestination.kt + NewLineAtEndOfFile:RedeemVoucherDestination.kt$net.mullvad.mullvadvpn.compose.destinations.RedeemVoucherDestination.kt + NewLineAtEndOfFile:RemoveDeviceConfirmationDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.RemoveDeviceConfirmationDialogDestination.kt + NewLineAtEndOfFile:ReportProblemDestination.kt$net.mullvad.mullvadvpn.compose.destinations.ReportProblemDestination.kt + NewLineAtEndOfFile:ReportProblemNoEmailDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.ReportProblemNoEmailDialogDestination.kt + NewLineAtEndOfFile:SelectLocationDestination.kt$net.mullvad.mullvadvpn.compose.destinations.SelectLocationDestination.kt + NewLineAtEndOfFile:SettingsDestination.kt$net.mullvad.mullvadvpn.compose.destinations.SettingsDestination.kt + NewLineAtEndOfFile:SplashDestination.kt$net.mullvad.mullvadvpn.compose.destinations.SplashDestination.kt + NewLineAtEndOfFile:SplitTunnelingDestination.kt$net.mullvad.mullvadvpn.compose.destinations.SplitTunnelingDestination.kt + NewLineAtEndOfFile:UdpOverTcpPortInfoDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.UdpOverTcpPortInfoDialogDestination.kt + NewLineAtEndOfFile:VerificationPendingDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.VerificationPendingDialogDestination.kt + NewLineAtEndOfFile:ViewLogsDestination.kt$net.mullvad.mullvadvpn.compose.destinations.ViewLogsDestination.kt + NewLineAtEndOfFile:VpnSettingsDestination.kt$net.mullvad.mullvadvpn.compose.destinations.VpnSettingsDestination.kt + NewLineAtEndOfFile:WelcomeDestination.kt$net.mullvad.mullvadvpn.compose.destinations.WelcomeDestination.kt + NewLineAtEndOfFile:WireguardCustomPortDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.WireguardCustomPortDialogDestination.kt + NewLineAtEndOfFile:WireguardCustomPortNavArgsNavType.kt$net.mullvad.mullvadvpn.compose.navtype.WireguardCustomPortNavArgsNavType.kt + NewLineAtEndOfFile:WireguardPortInfoDialogArgumentNavType.kt$net.mullvad.mullvadvpn.compose.navtype.WireguardPortInfoDialogArgumentNavType.kt + NewLineAtEndOfFile:WireguardPortInfoDialogDestination.kt$net.mullvad.mullvadvpn.compose.destinations.WireguardPortInfoDialogDestination.kt + PackageNaming:AccessMethodKt.kt$package mullvad_daemon.management_interface + PackageNaming:AccessMethodSettingKt.kt$package mullvad_daemon.management_interface + PackageNaming:AccountAndDeviceKt.kt$package mullvad_daemon.management_interface + PackageNaming:AccountDataKt.kt$package mullvad_daemon.management_interface + PackageNaming:AccountHistoryKt.kt$package mullvad_daemon.management_interface + PackageNaming:ApiAccessMethodSettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:ApiAddressesKt.kt$package mullvad_daemon.management_interface + PackageNaming:AppVersionInfoKt.kt$package mullvad_daemon.management_interface + PackageNaming:BridgeEndpointDataKt.kt$package mullvad_daemon.management_interface + PackageNaming:BridgeSettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:BridgeStateKt.kt$package mullvad_daemon.management_interface + PackageNaming:ConnectionConfigKt.kt$package mullvad_daemon.management_interface + PackageNaming:CustomDnsOptionsKt.kt$package mullvad_daemon.management_interface + PackageNaming:CustomListKt.kt$package mullvad_daemon.management_interface + PackageNaming:CustomListSettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:CustomRelaySettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:DaemonEventKt.kt$package mullvad_daemon.management_interface + PackageNaming:DefaultDnsOptionsKt.kt$package mullvad_daemon.management_interface + PackageNaming:DeviceEventKt.kt$package mullvad_daemon.management_interface + PackageNaming:DeviceKt.kt$package mullvad_daemon.management_interface + PackageNaming:DeviceListKt.kt$package mullvad_daemon.management_interface + PackageNaming:DeviceRemovalKt.kt$package mullvad_daemon.management_interface + PackageNaming:DeviceStateKt.kt$package mullvad_daemon.management_interface + PackageNaming:DnsOptionsKt.kt$package mullvad_daemon.management_interface + PackageNaming:EndpointKt.kt$package mullvad_daemon.management_interface + PackageNaming:ErrorStateKt.kt$package mullvad_daemon.management_interface + PackageNaming:ExcludedProcessKt.kt$package mullvad_daemon.management_interface + PackageNaming:ExcludedProcessListKt.kt$package mullvad_daemon.management_interface + PackageNaming:GeoIpLocationKt.kt$package mullvad_daemon.management_interface + PackageNaming:GeographicLocationConstraintKt.kt$package mullvad_daemon.management_interface + PackageNaming:InetNetwork.kt$package net.mullvad.talpid.tun_provider + PackageNaming:LocationConstraintKt.kt$package mullvad_daemon.management_interface + PackageNaming:LocationKt.kt$package mullvad_daemon.management_interface + PackageNaming:ManagementInterfaceGrpcKt.kt$package mullvad_daemon.management_interface + PackageNaming:ManagementInterfaceKt.kt$package mullvad_daemon.management_interface + PackageNaming:NewAccessMethodSettingKt.kt$package mullvad_daemon.management_interface + PackageNaming:NormalRelaySettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:ObfuscationEndpointKt.kt$package mullvad_daemon.management_interface + PackageNaming:ObfuscationSettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:OpenVpnEndpointDataKt.kt$package mullvad_daemon.management_interface + PackageNaming:OpenVpnEndpointKt.kt$package mullvad_daemon.management_interface + PackageNaming:OpenvpnConstraintsKt.kt$package mullvad_daemon.management_interface + PackageNaming:PortRangeKt.kt$package mullvad_daemon.management_interface + PackageNaming:ProxyEndpointKt.kt$package mullvad_daemon.management_interface + PackageNaming:PublicKeyKt.kt$package mullvad_daemon.management_interface + PackageNaming:QuantumResistantStateKt.kt$package mullvad_daemon.management_interface + PackageNaming:RelayKt.kt$package mullvad_daemon.management_interface + PackageNaming:RelayListCityKt.kt$package mullvad_daemon.management_interface + PackageNaming:RelayListCountryKt.kt$package mullvad_daemon.management_interface + PackageNaming:RelayListKt.kt$package mullvad_daemon.management_interface + PackageNaming:RelaySettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:RemoveDeviceEventKt.kt$package mullvad_daemon.management_interface + PackageNaming:SettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:ShadowsocksEndpointDataKt.kt$package mullvad_daemon.management_interface + PackageNaming:SplitTunnelSettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:TransportPortKt.kt$package mullvad_daemon.management_interface + PackageNaming:TunConfig.kt$package net.mullvad.talpid.tun_provider + PackageNaming:TunnelEndpointKt.kt$package mullvad_daemon.management_interface + PackageNaming:TunnelMetadataKt.kt$package mullvad_daemon.management_interface + PackageNaming:TunnelOptionsKt.kt$package mullvad_daemon.management_interface + PackageNaming:TunnelStateKt.kt$package mullvad_daemon.management_interface + PackageNaming:TunnelStateRelayInfoKt.kt$package mullvad_daemon.management_interface + PackageNaming:UUIDKt.kt$package mullvad_daemon.management_interface + PackageNaming:Udp2TcpObfuscationSettingsKt.kt$package mullvad_daemon.management_interface + PackageNaming:VoucherSubmissionKt.kt$package mullvad_daemon.management_interface + PackageNaming:WireguardConstraintsKt.kt$package mullvad_daemon.management_interface + PackageNaming:WireguardEndpointDataKt.kt$package mullvad_daemon.management_interface + PackageNaming:WireguardRelayEndpointDataKt.kt$package mullvad_daemon.management_interface + PrintStackTrace:Extensions.kt$ex + ProtectedMemberInFinalClass:MullvadDaemon.kt$MullvadDaemon$protected var daemonInterfaceAddress = 0L + ReturnCount:AccountExpiryNotification.kt$AccountExpiryNotification$private fun format(expiry: DateTime, remainingTime: Duration): String + ReturnCount:RelayNameComparator.kt$RelayNameComparator$private infix fun List<String>.compareWith(other: List<String>): Int + ReturnCount:TalpidVpnService.kt$TalpidVpnService$private fun createTun(config: TunConfig): CreateTunResult + TooGenericExceptionThrown:ChangelogDestination.kt$ChangelogDestination$throw RuntimeException("'changeLog' argument is mandatory, but was not present!") + TooGenericExceptionThrown:DeviceListDestination.kt$DeviceListDestination$throw RuntimeException("'accountToken' argument is mandatory, but was not present!") + TooGenericExceptionThrown:PaymentDestination.kt$PaymentDestination$throw RuntimeException("'productId' argument is mandatory, but was not present!") + TooGenericExceptionThrown:RemoveDeviceConfirmationDialogDestination.kt$RemoveDeviceConfirmationDialogDestination$throw RuntimeException("'device' argument is mandatory, but was not present!") + TooGenericExceptionThrown:WireguardCustomPortDialogDestination.kt$WireguardCustomPortDialogDestination$throw RuntimeException("'navArg' argument is mandatory, but was not present!") + TooGenericExceptionThrown:WireguardPortInfoDialogDestination.kt$WireguardPortInfoDialogDestination$throw RuntimeException("'argument' argument is mandatory, but was not present!") + TooManyFunctions:DaemonEventKt.kt$DaemonEventKt$Dsl + TooManyFunctions:GeoIpLocationKt.kt$GeoIpLocationKt$Dsl + TooManyFunctions:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt$ManagementServiceCoroutineImplBase : AbstractCoroutineServerImpl + TooManyFunctions:ManagementInterfaceGrpcKt.kt$ManagementServiceGrpcKt$ManagementServiceCoroutineStub : AbstractCoroutineStub + TooManyFunctions:MullvadDaemon.kt$MullvadDaemon + TooManyFunctions:MullvadVpnService.kt$MullvadVpnService : TalpidVpnService + TooManyFunctions:NormalRelaySettingsKt.kt$NormalRelaySettingsKt$Dsl + TooManyFunctions:RelayKt.kt$RelayKt$Dsl + TooManyFunctions:SettingsKt.kt$SettingsKt$Dsl + TooManyFunctions:VpnSettingsViewModel.kt$VpnSettingsViewModel : ViewModel + TooManyFunctions:WireguardEndpointDataKt.kt$WireguardEndpointDataKt$Dsl + TopLevelPropertyNaming:OutOfTimeUseCase.kt$const val accountRefreshIntervalMillis = 60L * 1000L // 1 minute + TopLevelPropertyNaming:OutOfTimeUseCase.kt$const val bufferTimeMillis = 60L * 1000L // 1 minute + UnusedParameter:MullvadFileProvider.kt$shareTitle: String + UnusedParameter:SimpleMullvadHttpClient.kt$SimpleMullvadHttpClient$body: JSONArray? = null + UnusedParameter:VpnSettingsScreen.kt$navigateUdp2TcpInfo: () -> Unit = {} + UnusedPrivateMember:ConnectivityListener.kt$ConnectivityListener$private fun finalize() + WildcardImport:Destination.kt$import com.ramcosta.composedestinations.spec.* + WildcardImport:NavGraphs.kt$import com.ramcosta.composedestinations.spec.* + WildcardImport:NavGraphs.kt$import net.mullvad.mullvadvpn.compose.destinations.* + WildcardImport:SingleModuleExtensions.kt$import com.ramcosta.composedestinations.spec.* + WildcardImport:SingleModuleExtensions.kt$import net.mullvad.mullvadvpn.compose.destinations.* + + From d57601060d4496a5eeaf4e6481f210d9c2350da0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Wed, 24 Jan 2024 09:08:42 +0100 Subject: [PATCH 13/14] Add detekt CI step --- .github/workflows/android-app.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/android-app.yml b/.github/workflows/android-app.yml index a24e6993ee86..c6572ddbc770 100644 --- a/.github/workflows/android-app.yml +++ b/.github/workflows/android-app.yml @@ -243,6 +243,15 @@ jobs: build-root-directory: android execution-only-caches: true + - name: Run detekt + uses: burrunan/gradle-cache-action@v1 + with: + job-id: jdk17 + arguments: detekt + gradle-version: wrapper + build-root-directory: android + execution-only-caches: true + # Running the AGP lint here rather than in the separate lint workflow # (android-kotlin-format-check.yml) since it's easier to make use of the running container, # cache and previously ran tasks. From f7cb264dbfbc0356bc4426d17ce6eb045c122d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Fri, 2 Feb 2024 16:26:50 +0100 Subject: [PATCH 14/14] Update gradle verification file --- android/gradle/verification-metadata.xml | 280 +++++++++++++++++++++++ 1 file changed, 280 insertions(+) diff --git a/android/gradle/verification-metadata.xml b/android/gradle/verification-metadata.xml index 05ce1e2cc124..bd2f25605964 100644 --- a/android/gradle/verification-metadata.xml +++ b/android/gradle/verification-metadata.xml @@ -1915,6 +1915,14 @@ + + + + + + + + @@ -2666,6 +2674,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -2700,6 +2729,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3354,6 +3575,11 @@ + + + + + @@ -3389,6 +3615,11 @@ + + + + + @@ -3561,6 +3792,11 @@ + + + + + @@ -3589,6 +3825,11 @@ + + + + + @@ -4045,6 +4286,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4276,6 +4551,11 @@ + + + + +