mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-25 15:16:01 +00:00
Add detekt to github workflow
This commit is contained in:
parent
f480de06f7
commit
35a15299b2
13 changed files with 134 additions and 58 deletions
32
.github/workflows/android.yml
vendored
32
.github/workflows/android.yml
vendored
|
|
@ -37,7 +37,7 @@ jobs:
|
|||
source: "Habitica/google-services.json.example"
|
||||
target: "Habitica/google-services.json"
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build
|
||||
run: ./gradlew assembleDebug -PdisablePreDex
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
|
|
@ -68,3 +68,33 @@ jobs:
|
|||
run: chmod +x gradlew
|
||||
- name: Run Ktlint
|
||||
run: ./gradlew ktlint
|
||||
detekt:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
cache: gradle
|
||||
- name: copy properties file
|
||||
uses: canastro/copy-file-action@master
|
||||
with:
|
||||
source: "habitica.properties.example"
|
||||
target: "habitica.properties"
|
||||
- name: copy resources file
|
||||
uses: canastro/copy-file-action@master
|
||||
with:
|
||||
source: "habitica.resources.example"
|
||||
target: "habitica.resources"
|
||||
- name: copy google services file
|
||||
uses: canastro/copy-file-action@master
|
||||
with:
|
||||
source: "Habitica/google-services.json.example"
|
||||
target: "Habitica/google-services.json"
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
- name: Run detekt
|
||||
run: ./gradlew detekt
|
||||
|
|
|
|||
|
|
@ -27,12 +27,19 @@
|
|||
<com.habitrpg.android.habitica.ui.views.social.UsernameLabel
|
||||
android:id="@+id/display_name_textview"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginBottom="@dimen/spacing_small" />
|
||||
<androidx.legacy.widget.Space
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content" />
|
||||
<TextView
|
||||
android:id="@+id/you_pill"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Pill"
|
||||
android:text="@string/you"/>
|
||||
<ImageButton
|
||||
android:id="@+id/more_button"
|
||||
android:src="@drawable/ic_more_horiz_black_18dp"
|
||||
|
|
@ -41,12 +48,6 @@
|
|||
android:layout_width="30dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_gravity="end"/>
|
||||
<TextView
|
||||
android:id="@+id/you_pill"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Pill"
|
||||
android:text="@string/you"/>
|
||||
</LinearLayout>
|
||||
<TableLayout
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ class PurchaseHandler(activity: Activity, val analyticsManager: AnalyticsManager
|
|||
onSuccess()
|
||||
}
|
||||
|
||||
override fun onError(response: Int, e: java.lang.Exception) {}
|
||||
override fun onError(response: Int, e: java.lang.Exception) { analyticsManager.logException(e) }
|
||||
})
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,13 +45,10 @@ class SignInWebViewClient(
|
|||
val userID = url.getQueryParameter("userID")
|
||||
val apiKey = url.getQueryParameter("key")
|
||||
|
||||
when {
|
||||
userID == null || apiKey == null -> {
|
||||
callback(SignInWithAppleResult.Failure(IllegalArgumentException("data not returned")))
|
||||
}
|
||||
else -> {
|
||||
callback(SignInWithAppleResult.Success(userID, apiKey, url.getQueryParameter("newUser") == "true"))
|
||||
}
|
||||
if (userID == null || apiKey == null) {
|
||||
callback(SignInWithAppleResult.Failure(IllegalArgumentException("data not returned")))
|
||||
} else {
|
||||
callback(SignInWithAppleResult.Success(userID, apiKey, url.getQueryParameter("newUser") == "true"))
|
||||
}
|
||||
|
||||
true
|
||||
|
|
|
|||
|
|
@ -70,13 +70,10 @@ class AdventureGuideActivity : BaseActivity() {
|
|||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
android.R.id.home -> {
|
||||
NavUtils.navigateUpFromSameTask(this)
|
||||
true
|
||||
}
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
return if (item.itemId == android.R.id.home) {
|
||||
NavUtils.navigateUpFromSameTask(this)
|
||||
true
|
||||
} else super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
|
|
|
|||
|
|
@ -42,12 +42,9 @@ class GuidelinesActivity : BaseActivity() {
|
|||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
android.R.id.home -> {
|
||||
onBackPressed()
|
||||
true
|
||||
}
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
return if (item.itemId == android.R.id.home) {
|
||||
onBackPressed()
|
||||
true
|
||||
} else super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -361,11 +361,9 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
MainNavigationController.setup(navigationController)
|
||||
navigationController.addOnDestinationChangedListener { _, destination, arguments -> updateToolbarTitle(destination, arguments) }
|
||||
|
||||
when (launchScreen) {
|
||||
"/party" -> {
|
||||
if (user == null || user?.party?.id != null) {
|
||||
MainNavigationController.navigate(R.id.partyFragment)
|
||||
}
|
||||
if (launchScreen == "/party") {
|
||||
if (user == null || user?.party?.id != null) {
|
||||
MainNavigationController.navigate(R.id.partyFragment)
|
||||
}
|
||||
}
|
||||
launchScreen = null
|
||||
|
|
@ -583,10 +581,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
)
|
||||
}
|
||||
|
||||
val showItemsFound = when (userQuestStatus) {
|
||||
UserQuestStatus.QUEST_COLLECT -> true
|
||||
else -> false
|
||||
}
|
||||
val showItemsFound = userQuestStatus == UserQuestStatus.QUEST_COLLECT
|
||||
compositeSubscription.add(
|
||||
displayItemDropUseCase.observable(DisplayItemDropUseCase.RequestValues(data, this, snackbarContainer, showItemsFound))
|
||||
.subscribe({ }, RxErrorHandler.handleEmptyError())
|
||||
|
|
|
|||
|
|
@ -110,12 +110,9 @@ class SkillTasksActivity : BaseActivity() {
|
|||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
android.R.id.home -> {
|
||||
onBackPressed()
|
||||
true
|
||||
}
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
return if (item.itemId == android.R.id.home) {
|
||||
onBackPressed()
|
||||
true
|
||||
} else super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,7 +131,6 @@ class ChallengesOverviewFragment : BaseMainFragment<FragmentViewpagerBinding>()
|
|||
tab.text = when (position) {
|
||||
0 -> getString(R.string.my_challenges)
|
||||
1 -> getString(R.string.discover)
|
||||
1 -> getString(R.string.discover)
|
||||
else -> ""
|
||||
}
|
||||
}.attach()
|
||||
|
|
|
|||
|
|
@ -96,23 +96,24 @@ class BugFixFragment : BaseMainFragment<FragmentSupportBugFixBinding>() {
|
|||
val version = Build.VERSION.SDK_INT
|
||||
val deviceName = deviceInfo?.name ?: DeviceName.deviceName
|
||||
val manufacturer = deviceInfo?.manufacturer ?: Build.MANUFACTURER
|
||||
val newLine = "%0D%0A"
|
||||
var bodyOfEmail = Uri.encode("Device: $manufacturer $deviceName") +
|
||||
"%0D%0A" + Uri.encode("Android Version: $version") +
|
||||
"%0D%0A" + Uri.encode("AppVersion: " + getString(R.string.version_info, versionName, versionCode))
|
||||
newLine + Uri.encode("Android Version: $version") +
|
||||
newLine + Uri.encode("AppVersion: " + getString(R.string.version_info, versionName, versionCode))
|
||||
|
||||
if (appConfigManager.testingLevel().name != AppTestingLevel.PRODUCTION.name) {
|
||||
bodyOfEmail += "%0D%0A" + Uri.encode(appConfigManager.testingLevel().name)
|
||||
bodyOfEmail += newLine + Uri.encode(appConfigManager.testingLevel().name)
|
||||
}
|
||||
bodyOfEmail += "%0D%0A" + Uri.encode("User ID: $userId")
|
||||
bodyOfEmail += newLine + Uri.encode("User ID: $userId")
|
||||
|
||||
val user = this.user
|
||||
if (user != null) {
|
||||
bodyOfEmail += "%0D%0A" + Uri.encode("Level: " + (user.stats?.lvl ?: 0)) +
|
||||
"%0D%0A" + Uri.encode("Class: " + (if (user.preferences?.disableClasses == true) "Disabled" else (user.stats?.habitClass ?: "None"))) +
|
||||
"%0D%0A" + Uri.encode("Is in Inn: " + (user.preferences?.sleep ?: false)) +
|
||||
"%0D%0A" + Uri.encode("Uses Costume: " + (user.preferences?.costume ?: false)) +
|
||||
"%0D%0A" + Uri.encode("Custom Day Start: " + (user.preferences?.dayStart ?: 0)) +
|
||||
"%0D%0A" + Uri.encode("Timezone Offset: " + (user.preferences?.timezoneOffset ?: 0))
|
||||
bodyOfEmail += newLine + Uri.encode("Level: " + (user.stats?.lvl ?: 0)) +
|
||||
newLine + Uri.encode("Class: " + (if (user.preferences?.disableClasses == true) "Disabled" else (user.stats?.habitClass ?: "None"))) +
|
||||
newLine + Uri.encode("Is in Inn: " + (user.preferences?.sleep ?: false)) +
|
||||
newLine + Uri.encode("Uses Costume: " + (user.preferences?.costume ?: false)) +
|
||||
newLine + Uri.encode("Custom Day Start: " + (user.preferences?.dayStart ?: 0)) +
|
||||
newLine + Uri.encode("Timezone Offset: " + (user.preferences?.timezoneOffset ?: 0))
|
||||
}
|
||||
|
||||
bodyOfEmail += "%0D%0ADetails:%0D%0A%0D%0A"
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ allprojects {
|
|||
detekt {
|
||||
input = files("Habitica/src/main/java")
|
||||
config = files("detekt.yml")
|
||||
baseline = file("${rootProject.projectDir}/detekt_baseline.xml")
|
||||
reports {
|
||||
xml {
|
||||
enabled = true // Enable/Disable XML report (default: true)
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ complexity:
|
|||
active: false
|
||||
StringLiteralDuplication:
|
||||
active: true
|
||||
threshold: 4
|
||||
threshold: 6
|
||||
ignoreAnnotation: true
|
||||
excludeStringsWithLessThan5Characters: true
|
||||
ignoreStringsRegex: '$^'
|
||||
|
|
|
|||
61
detekt_baseline.xml
Normal file
61
detekt_baseline.xml
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" ?>
|
||||
<SmellBaseline>
|
||||
<Blacklist></Blacklist>
|
||||
<Whitelist>
|
||||
<ID>DuplicateCaseInWhenExpression:Notification.kt$Notification$when (type) { Type.LOGIN_INCENTIVE.type -> LoginIncentiveData::class.java Type.NEW_STUFF.type -> NewStuffData::class.java Type.NEW_CHAT_MESSAGE.type -> NewChatMessageData::class.java Type.GROUP_TASK_NEEDS_WORK.type -> GroupTaskNeedsWorkData::class.java Type.GROUP_TASK_APPROVED.type -> GroupTaskApprovedData::class.java Type.GROUP_TASK_REQUIRES_APPROVAL.type -> GroupTaskRequiresApprovalData::class.java Type.UNALLOCATED_STATS_POINTS.type -> UnallocatedPointsData::class.java Type.GUILD_INVITATION.type -> GuildInvitationData::class.java Type.PARTY_INVITATION.type -> PartyInvitationData::class.java Type.QUEST_INVITATION.type -> QuestInvitationData::class.java Type.FIRST_DROP.type -> FirstDropData::class.java Type.ACHIEVEMENT_GENERIC.type -> AchievementData::class.java Type.WON_CHALLENGE.type -> ChallengeWonData::class.java Type.ACHIEVEMENT_ALL_YOUR_BASE.type -> AchievementData::class.java Type.ACHIEVEMENT_BACK_TO_BASICS.type -> AchievementData::class.java Type.ACHIEVEMENT_JUST_ADD_WATER.type -> AchievementData::class.java Type.ACHIEVEMENT_LOST_MASTERCLASSER.type -> AchievementData::class.java Type.ACHIEVEMENT_MIND_OVER_MATTER.type -> AchievementData::class.java Type.ACHIEVEMENT_DUST_DEVIL.type -> AchievementData::class.java Type.ACHIEVEMENT_ARID_AUTHORITY.type -> AchievementData::class.java Type.ACHIEVEMENT_MONSTER_MAGUS.type -> AchievementData::class.java Type.ACHIEVEMENT_UNDEAD_UNDERTAKER.type -> AchievementData::class.java Type.ACHIEVEMENT_PRIMED_FOR_PAINTING.type -> AchievementData::class.java Type.ACHIEVEMENT_PEARLY_PRO.type -> AchievementData::class.java Type.ACHIEVEMENT_TICKLED_PINK.type -> AchievementData::class.java Type.ACHIEVEMENT_ROSY_OUTLOOK.type -> AchievementData::class.java Type.ACHIEVEMENT_BUG_BONANZA.type -> AchievementData::class.java Type.ACHIEVEMENT_BARE_NECESSITIES.type -> AchievementData::class.java Type.ACHIEVEMENT_FRESHWATER_FRIENDS.type -> AchievementData::class.java Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> AchievementData::class.java Type.ACHIEVEMENT_ALL_THAT_GLITTERS.type -> AchievementData::class.java Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> AchievementData::class.java Type.ACHIEVEMENT_BONE_COLLECTOR.type -> AchievementData::class.java Type.ACHIEVEMENT_SKELETON_CREW.type -> AchievementData::class.java Type.ACHIEVEMENT_SEEING_RED.type -> AchievementData::class.java Type.ACHIEVEMENT_RED_LETTER_DAY.type -> AchievementData::class.java else -> null }</ID>
|
||||
<ID>DuplicateCaseInWhenExpression:NotificationsManager.kt$NotificationsManager$when (it.type) { Notification.Type.LOGIN_INCENTIVE.type -> displayLoginIncentiveNotification(it) Notification.Type.ACHIEVEMENT_PARTY_UP.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_PARTY_ON.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_BEAST_MASTER.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_MOUNT_MASTER.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_TRIAD_BINGO.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_GUILD_JOINED.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_CHALLENGE_JOINED.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_INVITED_FRIEND.type -> displayAchievementNotification(it) Notification.Type.WON_CHALLENGE.type -> displayWonChallengeNotificaiton(it) Notification.Type.ACHIEVEMENT_ALL_YOUR_BASE.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_BACK_TO_BASICS.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_JUST_ADD_WATER.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_LOST_MASTERCLASSER.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_MIND_OVER_MATTER.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_DUST_DEVIL.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_ARID_AUTHORITY.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_MONSTER_MAGUS.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_UNDEAD_UNDERTAKER.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_PRIMED_FOR_PAINTING.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_PEARLY_PRO.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_TICKLED_PINK.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_ROSY_OUTLOOK.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_BUG_BONANZA.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_BARE_NECESSITIES.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_FRESHWATER_FRIENDS.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_ALL_THAT_GLITTERS.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_GOOD_AS_GOLD.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_BONE_COLLECTOR.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_SKELETON_CREW.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_SEEING_RED.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_RED_LETTER_DAY.type -> displayAchievementNotification(it) Notification.Type.ACHIEVEMENT_GENERIC.type -> displayAchievementNotification( it, notifications.find { notif -> notif.type == Notification.Type.ACHIEVEMENT_ONBOARDING_COMPLETE.type } != null ) Notification.Type.ACHIEVEMENT_ONBOARDING_COMPLETE.type -> displayAchievementNotification(it) Notification.Type.FIRST_DROP.type -> displayFirstDropNotification(it) else -> false }</ID>
|
||||
<ID>EmptyCatchBlock:AmplitudeManager.kt$AmplitudeManager${ }</ID>
|
||||
<ID>EmptyCatchBlock:WorldStateSerialization.kt$WorldStateSerialization${ }</ID>
|
||||
<ID>EmptyDefaultConstructor:CustomizationRecyclerViewAdapter.kt$CustomizationRecyclerViewAdapter$()</ID>
|
||||
<ID>EmptyFunctionBlock:FallExtraGemsHabiticaPromotion.kt$FallExtraGemsHabiticaPromotion${ }</ID>
|
||||
<ID>EmptyFunctionBlock:GiftOneGetOneHabiticaPromotion.kt$GiftOneGetOneHabiticaPromotion${ }</ID>
|
||||
<ID>EmptyFunctionBlock:MainActivity.kt$MainActivity.<no name provided>${ }</ID>
|
||||
<ID>EmptyFunctionBlock:PurchaseHandler.kt$PurchaseHandler.<no name provided>${ }</ID>
|
||||
<ID>EmptyFunctionBlock:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository${ }</ID>
|
||||
<ID>EmptyFunctionBlock:ScoreTaskLocallyInteractor.kt$ScoreTaskLocallyInteractor.Companion${ }</ID>
|
||||
<ID>EmptyFunctionBlock:SpookyExtraGemsHabiticaPromotion.kt$SpookyExtraGemsHabiticaPromotion${ }</ID>
|
||||
<ID>EmptyFunctionBlock:Survey2021Promotion.kt$Survey2021Promotion${ }</ID>
|
||||
<ID>EmptySecondaryConstructor:Server.kt$Server${}</ID>
|
||||
<ID>ReturnCount:BaseTaskViewHolder.kt$BaseTaskViewHolder$override fun onTouch(view: View?, motionEvent: MotionEvent?): Boolean</ID>
|
||||
<ID>ReturnCount:Customization.kt$Customization$fun getImageName(userSize: String?, hairColor: String?): String</ID>
|
||||
<ID>ReturnCount:DeviceName.kt$DeviceName$ @WorkerThread fun getDeviceInfo(context: Context, codename: String?, model: String?): DeviceInfo</ID>
|
||||
<ID>ReturnCount:DeviceName.kt$DeviceName$ fun getDeviceName(codename: String?, model: String?, fallback: String?): String?</ID>
|
||||
<ID>ReturnCount:DragLinearLayout.kt$DragLinearLayout$override fun onInterceptTouchEvent(event: MotionEvent): Boolean</ID>
|
||||
<ID>ReturnCount:DragLinearLayout.kt$DragLinearLayout$override fun onTouchEvent(event: MotionEvent): Boolean</ID>
|
||||
<ID>ReturnCount:HabiticaAlertDialog.kt$HabiticaAlertDialog.Companion$private fun checkIfQueueAvailable(): Boolean</ID>
|
||||
<ID>ReturnCount:PetDetailRecyclerAdapter.kt$PetDetailRecyclerAdapter$private fun canRaiseToMount(pet: Pet): Boolean</ID>
|
||||
<ID>ReturnCount:PreferencesFragment.kt$PreferencesFragment$override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String)</ID>
|
||||
<ID>ReturnCount:RealmBaseLocalRepository.kt$RealmBaseLocalRepository$override fun <T : BaseObject> getLiveObject(obj: T): T?</ID>
|
||||
<ID>ReturnCount:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository$override fun feedPet(foodKey: String, petKey: String, feedValue: Int, userID: String)</ID>
|
||||
<ID>ReturnCount:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository$override fun getLiveObject(obj: OwnedItem): OwnedItem?</ID>
|
||||
<ID>ReturnCount:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository$override fun hatchPet(eggKey: String, potionKey: String, userID: String)</ID>
|
||||
<ID>ReturnCount:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository$override fun unhatchPet(eggKey: String, potionKey: String, userID: String)</ID>
|
||||
<ID>ReturnCount:StableRecyclerAdapter.kt$StableRecyclerAdapter$private fun canRaiseToMount(pet: Pet): Boolean</ID>
|
||||
<ID>StringLiteralDuplication:GuildInviteLocalNotification.kt$GuildInviteLocalNotification$"groupID"</ID>
|
||||
<ID>StringLiteralDuplication:RealmInventoryLocalRepository.kt$RealmInventoryLocalRepository$"animal"</ID>
|
||||
<ID>StringLiteralDuplication:RealmSocialLocalRepository.kt$RealmSocialLocalRepository$"userID"</ID>
|
||||
<ID>StringLiteralDuplication:RealmTaskLocalRepository.kt$RealmTaskLocalRepository$"position"</ID>
|
||||
<ID>StringLiteralDuplication:RealmTaskLocalRepository.kt$RealmTaskLocalRepository$"userId"</ID>
|
||||
<ID>StringLiteralDuplication:SafeDefaultItemAnimator.kt$SafeDefaultItemAnimator$"$toX, $fromX, $deltaX"</ID>
|
||||
<ID>TooGenericExceptionCaught:CustomizationDeserializer.kt$CustomizationDeserializer$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:DeviceName.kt$DeviceName$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:DeviceName.kt$DeviceName.Request.GetDeviceRunnable$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:HabiticaPurchaseVerifier.kt$HabiticaPurchaseVerifier$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:KeyHelper.kt$KeyHelper$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:LoginActivity.kt$LoginActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:MainActivity.kt$MainActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:MainNavigationController.kt$MainNavigationController$error: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:PurchaseHandler.kt$PurchaseHandler$e: NullPointerException</ID>
|
||||
<ID>TooGenericExceptionCaught:SectionViewHolder.kt$SectionViewHolder$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:SetupCustomizationRepositoryImpl.kt$SetupCustomizationRepositoryImpl$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:SoundFile.kt$SoundFile$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:TaskListDeserializer.kt$TaskListDeserializer$e: RuntimeException</ID>
|
||||
<ID>TooGenericExceptionCaught:TaskTagDeserializer.kt$TaskTagDeserializer$e: RuntimeException</ID>
|
||||
<ID>TooGenericExceptionCaught:WorldStateSerialization.kt$WorldStateSerialization$e: Exception</ID>
|
||||
<ID>UseIfInsteadOfWhen:MainActivity.kt$MainActivity$when (userQuestStatus) { UserQuestStatus.QUEST_BOSS -> data.questDamage else -> 0.0 }</ID>
|
||||
<ID>UseIfInsteadOfWhen:MountDetailRecyclerAdapter.kt$MountDetailRecyclerAdapter$when (viewType) { 1 -> SectionViewHolder(parent) else -> MountViewHolder(parent, equipEvents) }</ID>
|
||||
<ID>UseIfInsteadOfWhen:PetDetailRecyclerAdapter.kt$PetDetailRecyclerAdapter$when (viewType) { 1 -> SectionViewHolder(parent) else -> PetViewHolder(parent, equipEvents, animalIngredientsRetriever) }</ID>
|
||||
<ID>UseIfInsteadOfWhen:RecyclerViewEmptySupport.kt$RecyclerViewEmptySupport$when (field) { RecyclerViewState.DISPLAYING_DATA -> updateAdapter(actualAdapter) else -> { updateAdapter(emptyAdapter) emptyAdapter.notifyDataSetChanged() } }</ID>
|
||||
<ID>UseIfInsteadOfWhen:ShopItem.kt$ShopItem$when (currency) { "gold" -> (value * quantity) <= (user?.stats?.gp ?: 0.0) else -> true }</ID>
|
||||
</Whitelist>
|
||||
</SmellBaseline>
|
||||
Loading…
Reference in a new issue