From 5c57dd8b1e9f5dfea230a242ebb317565cf36311 Mon Sep 17 00:00:00 2001 From: Sparsh Agrawal <55937724+Sparsh1212@users.noreply.github.com> Date: Fri, 30 Jul 2021 16:10:33 +0530 Subject: [PATCH] Fix #3304: Add check to ensure KDoc presence for non-private members (#3499) * Fix #3290: Add support for generic regex pattern matching * Apply review suggestions for proto location * Delete main directory * Implment script logic and tests * CI setup part 1 * syntax fix in yaml file * import nits in dummy file * Use regex patterns from script in script test * Make PR suggestions into effect * Make PR suggestions into effect * Make PR suggestions into effect * Improve naming of script_assets variables * Make PR suggestions into effect * Make PR suggestions * Make PR suggestions * Revamp testing approach * Fix #3291: Add check for XML syntax correctness * nit fixes * Introduce XML syntax check in static checks workflow * Fix #3292: Add check for test files presence for prod files * Make nit suggestions * Make nit suggestions * Make nit suggestions * Fix #3300: Add check for accessibility labels for activities * Add CI check for label presence for activities * Add ScriptConstants file to exemptions test list * Test if: always() * Revert "Test if: always()" This reverts commit b72e419b * Add if: always() * Add if: always() * Add if: always() * Apply review suggestions on PR * Make review suggestions from regex pattern checks * Implement review suggestions based on #3340 * Refactor PR as per feedback recieved * Implement feedback suggestions * Implement review suggestions * Implement review suggestions * Implement review suggestions * Implement review suggestions * nits * Nit fixes * Nit fixes * Nit fixes * Implement feedback suggestions as per #3340 * nit fix * nit fix * nit fix * nit fix * Review suggestions part 1 * Implement review suggestions part 2 * nit fixes * update static_checks * add test to repository file * nit fix * nit fix * nit fix * Do review suggestions * Implement review suggestions * Implement review suggestions * nit fix * Implement review suggestions * Add Ben as a codeowner for the ScriptExemptions file * bazel files nit fix * Introduce a library for the regex assets * Make directory structure same as that of #3374 * Make directory structure similar to #3374 * add new files to test file script exemptions and nit fixes * diable ktlint max-line-length * disable ktlint-max-line * disable ktlint max-length * remove testonly attribute from tests * add new files to script exemptions * nit fix * nit fix * nit fix * Apply review suggestions * ktlint fix * nit fix * Apply nit fixes * Apply nit fixes * Remove script constants * nit fix * add todo * add todo * nit fixes * add test * add testOnly * nit fixes * nit fix * nit fixes * nit fixes * nit fixes * nit fixes * fix textproto file * add exemptions to textproto * sort failures lexicographically * add new files to exemption list * nit fixes * nit fixes * add kdocs * nit fix * nit fix * Trigger CI failure exclusively * Revert CI check failure * Fix #3340: Create a script to ensure KDoc presence * Add initial tests * Add more tests and add documentation * nit fix * nit fix * nit fix * nit fix * Add more files to kdoc exemptions * nit fixes * nit fixes * nit fixes * Add redundant exemptions check * rectify static_checks * Remove duplicate proto libraries * nit fixes * nit fixes and add redundant exemptions check to script * nit fixes * add activity to exemption * nit fixes * nit fixes * nit fixes * nit fixes * nit fixes * update branch * nit fixes --- .github/workflows/static_checks.yml | 5 + scripts/BUILD.bazel | 16 + .../assets/kdoc_validity_exemptions.textproto | 626 +++++++++++++ scripts/script_assets.bzl | 24 + .../oppia/android/scripts/docs/BUILD.bazel | 17 + .../android/scripts/docs/KdocValidityCheck.kt | 347 +++++++ .../scripts/proto/script_exemptions.proto | 16 + .../oppia/android/scripts/docs/BUILD.bazel | 16 + .../scripts/docs/KdocValidityCheckTest.kt | 876 ++++++++++++++++++ third_party/maven_install.json | 580 +++++++----- third_party/versions.bzl | 1 + 11 files changed, 2308 insertions(+), 216 deletions(-) create mode 100644 scripts/assets/kdoc_validity_exemptions.textproto create mode 100644 scripts/src/java/org/oppia/android/scripts/docs/BUILD.bazel create mode 100644 scripts/src/java/org/oppia/android/scripts/docs/KdocValidityCheck.kt create mode 100644 scripts/src/javatests/org/oppia/android/scripts/docs/BUILD.bazel create mode 100644 scripts/src/javatests/org/oppia/android/scripts/docs/KdocValidityCheckTest.kt diff --git a/.github/workflows/static_checks.yml b/.github/workflows/static_checks.yml index 6de4b869073..9eed69934c6 100644 --- a/.github/workflows/static_checks.yml +++ b/.github/workflows/static_checks.yml @@ -123,3 +123,8 @@ jobs: if: always() run: | bazel run //scripts:accessibility_label_check -- $(pwd) scripts/assets/accessibility_label_exemptions.pb app/src/main/AndroidManifest.xml + + - name: KDoc Validation Check + if: always() + run: | + bazel run //scripts:kdoc_validity_check -- $(pwd) scripts/assets/kdoc_validity_exemptions.pb diff --git a/scripts/BUILD.bazel b/scripts/BUILD.bazel index 157659e7ea7..9b069b17686 100644 --- a/scripts/BUILD.bazel +++ b/scripts/BUILD.bazel @@ -6,6 +6,7 @@ load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_binary", "kt_jvm_libra load( "//scripts:script_assets.bzl", "generate_accessibility_label_assets_list_from_text_protos", + "generate_kdoc_validity_assets_list_from_text_protos", "generate_maven_assets_list_from_text_protos", "generate_regex_assets_list_from_text_protos", "generate_test_file_assets_list_from_text_protos", @@ -131,3 +132,18 @@ kt_jvm_binary( "//scripts/src/java/org/oppia/android/scripts/label:accessibility_label_check_lib", ], ) + +KDOC_VALIDITY_EXEMPTION_ASSETS = generate_kdoc_validity_assets_list_from_text_protos( + name = "kdoc_validity_exemption_assets", + kdoc_validity_exemptions_name = ["kdoc_validity_exemptions"], +) + +kt_jvm_binary( + name = "kdoc_validity_check", + testonly = True, + data = KDOC_VALIDITY_EXEMPTION_ASSETS, + main_class = "org.oppia.android.scripts.docs.KdocValidityCheckKt", + runtime_deps = [ + "//scripts/src/java/org/oppia/android/scripts/docs:kdoc_validity_check_lib", + ], +) diff --git a/scripts/assets/kdoc_validity_exemptions.textproto b/scripts/assets/kdoc_validity_exemptions.textproto new file mode 100644 index 00000000000..1d324cefbba --- /dev/null +++ b/scripts/assets/kdoc_validity_exemptions.textproto @@ -0,0 +1,626 @@ +exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableAppCompatActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadAppVersionListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadProfileListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LogoutDialogFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/RouteToAppVersionListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/RouteToProfileListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsAccountActionsViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsAppInformationViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsDownloadPermissionsViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsItemViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsProfileViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ActivityComponentFactory.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationInjectorProvider.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationStartupListenerModule.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryItemViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/LessonThumbnailImageView.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/SegmentedCircularProgressView.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/deprecation/AutomaticAppDeprecationNoticeDialogFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsModule.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsStarter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsStarterModule.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsItemViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/testing/MarkChaptersCompletedTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/testing/MarkStoriesCompletedTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/testing/MarkTopicsCompletedTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/testing/DeveloperOptionsTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/ExitProfileDialogFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/ExitProfileDialogInterface.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFooterViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerHeaderViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerItem.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/RouteToProfileProgressListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponent.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpItemViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpItems.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpListViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/RouteToFAQListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/RouteToFAQSingleListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqItemViewModel/FAQContentViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqsingle/FAQSingleActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqsingle/FAQSingleActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsDividerViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/SolutionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToExplorationListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToRecentlyPlayedListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToTopicListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToTopicPlayStoryListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/ComingSoonTopicsViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/OngoingListAdapter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/OngoingStoryClickListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/OngoingStoryViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/topiclist/TopicSummaryClickListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/home/topiclist/TopicSummaryViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/DownloadsTabFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsTab.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/UpdatesTabFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboadingSlideViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingSlideFinalViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/RouteToProfileListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/ViewPagerSlide.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicItemViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LanguageItemViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LanguageRadioButtonListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LanguageSelectionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LoadAppLanguageListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LoadAudioLanguageListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LoadReadingTextSizeListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionControlsViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsAppLanguageViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsAudioLanguageViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsItemViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsReadingTextSizeViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeSelectionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/RouteToAppLanguageListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/RouteToAudioLanguageListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/RouteToReadingTextSizeListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/TextSizeItemViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/options/TextSizeRadioButtonListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/parser/StringToFractionParser.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/parser/StringToRatioParser.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/DefaultFontSizeStateListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationManagerFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/HintsAndSolutionExplorationManagerFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/HintsAndSolutionExplorationManagerListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/ConfettiConfig.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/DragDropSortInteractionView.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/ImageRegionSelectionInteractionView.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/SelectionInteractionView.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StateFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StateFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StatePlayerRecyclerViewAssembler.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StateViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/answerhandling/InteractionAnswerHandler.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ContinueInteractionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/DragAndDropSortInteractionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/DragDropInteractionContentViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FractionInteractionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ImageRegionSelectionInteractionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/InteractionViewModelModule.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/RatioExpressionInputInteractionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SelectionInteractionContentViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SelectionInteractionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/StateItemViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SubmittedAnswerViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/TextInputViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ContinueNavigationButtonListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/NextNavigationButtonListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/PreviousNavigationButtonListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ReplayButtonListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ReturnToTopicNavigationButtonListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/RouteToHintsAndSolutionListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/StateKeyboardButtonListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/SubmitNavigationButtonListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/RestartPlayingSessionListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/StopStatePlayingSessionListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AddProfileActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AddProfileActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AddProfileViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthEnum.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminPinActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminPinViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ResetPinDialogFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ResetPinDialogFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ResetPinViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/RouteToAdminPinListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivityViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureClickListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureDialogInterface.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressHeaderViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/RecentlyPlayedStorySummaryViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/RouteToCompletedStoryListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/RouteToOngoingTopicListListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/BindableAdapter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/DividerItemDecorator.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditDeletionDialogFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditDialogInterface.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/IntentFactoryShimModule.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewBindingShimModule.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewComponentFactory.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/splash/SplashActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryFragmentScroller.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryChapterSummaryViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AudioFragmentTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AudioFragmentTestActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestDataModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ConceptCardFragmentTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ConceptCardFragmentTestActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/DragDropTestActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ExplorationTestActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HomeFragmentTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HomeTestActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/InputInteractionViewTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/NavigationDrawerTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ProfileChooserFragmentTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SplashTestActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SplashTestActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TopicRevisionTestActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToConceptCardListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToQuestionPlayerListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToRevisionCardListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToStoryListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicTab.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/info/TopicInfoFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/info/TopicInfoViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/ChapterSummarySelector.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/ChapterSummaryViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/ExpandedChapterListIndexListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/StorySummarySelector.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/StorySummaryViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/HintsAndSolutionQuestionManagerFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/HintsAndSolutionQuestionManagerListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/RevisionSubtopicSelector.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/ReturnToTopicClickListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragment.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponent.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivity.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivityPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughFragmentChangeListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughPages.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughEndPageChanger.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalListener.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicListFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/topiclistviewmodel/WalkthroughTopicSummaryViewModel.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeFragmentPresenter.kt" +exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeViewModel.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/parser/CustomBulletSpanTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/recyclerview/RecyclerViewMatcher.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/DragViewAction.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/DrawableMatcher.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/EspressoTestsMatchers.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/EspressoTestsMatchers.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/OrientationChangeAction.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/TabMatcher.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt" +exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/parser/StringToFractionParserTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCount.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTesting.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt" +exempted_file_path: "app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt" +exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/NetworkSettings.kt" +exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/api/ClassroomService.kt" +exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/api/ConceptCardService.kt" +exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/api/ExplorationService.kt" +exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/api/FeedbackReportingService.kt" +exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/api/QuestionPlayerService.kt" +exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/api/StoryService.kt" +exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/api/SubtopicService.kt" +exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/api/TopicService.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/JsonPrefixNetworkInterceptorTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/RemoteAuthNetworkInterceptorTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/api/ClassroomServiceTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/api/ConceptCardServiceTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/api/ExplorationServiceTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/api/FeedbackReportingServiceTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/api/QuestionPlayerServiceTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/api/StoryServiceTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/api/SubtopicServiceTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/backends/gae/api/TopicServiceTest.kt" +exempted_file_path: "data/src/test/java/org/oppia/android/data/persistence/PersistentCacheStoreTest.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/audio/AudioPlayerController.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/audio/CellularAudioDialogController.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/ClassificationResult.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/GenericRuleClassifier.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/InteractionObjectTypeExtractorRepository.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/continueinteraction/ContinueModule.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgress.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressController.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointController.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationStorageModule.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/ExpirationMetaDataRetrieverModule.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/testing/ExpirationMetaDataRetrieverTestModule.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/exceptions/UncaughtExceptionLoggerModule.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerModule.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/profile/ProfileManagementController.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionAssessmentProgress.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionAssessmentProgressController.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionConstantsProvider.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionTrainingConstantsProvider.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/state/StateDeck.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/StoryProgressController.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/TopicController.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/TopicListController.kt" +exempted_file_path: "domain/src/main/java/org/oppia/android/domain/util/JsonAssetRetriever.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/audio/CellularAudioDialogControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/AnswerClassificationControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/InteractionObjectTestBuilder.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXAtPositionYRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXBeforeElementYRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasDenominatorEqualToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasFractionalPartExactlyEqualToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasIntegerPartEqualToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNoFractionalPartRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNumeratorEqualToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsExactlyEqualToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsGreaterThanRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsLessThanRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputIsInRegionRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputContainsAtLeastOneOfRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputEqualsRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputIsProperSubsetOfRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEqualToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEquivalentToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputEqualsRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanOrEqualToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsInclusivelyBetweenRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanOrEqualToRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsWithinToleranceRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputEqualsRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasNumberOfTermsEqualToClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputIsEquivalentRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputContainsRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputEqualsRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputFuzzyEqualsRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/rules/textinput/TextInputStartsWithRuleClassifierProviderTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/devoptions/ModifyLessonProgressControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationStorageModuleTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/feedbackreporting/ReportSchemaVersionTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/onboarding/AppStartupStateControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/oppialogger/OppiaLoggerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/AnalyticsControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/oppialogger/exceptions/ExceptionsControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/oppialogger/exceptions/UncaughtExceptionLoggerStartupListenerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkManagerInitializerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/platformparameter/PlatformParameterControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/platformparameter/PlatformParameterModuleTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/platformparameter/PlatformParameterSingletonTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/profile/ProfileManagementControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/question/QuestionAssessmentProgressControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/question/QuestionTrainingControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/topic/StoryProgressControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/topic/TopicControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/topic/TopicListControllerTest.kt" +exempted_file_path: "domain/src/test/java/org/oppia/android/domain/util/StateRetrieverTest.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/RichTextViewMatcher.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/TestImageLoaderModule.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/espresso/ImageViewMatcher.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/lightweightcheckpointing/ExplorationCheckpointTestHelper.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatcherRobolectricImpl.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatchersEspressoImpl.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatchersRobolectricImpl.kt" +exempted_file_path: "testing/src/main/java/org/oppia/android/testing/time/FakeOppiaClockModule.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/FakeEventLoggerTest.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/FakeExceptionLoggerTest.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/lightweightcheckpointing/ExplorationCheckpointTestHelperTest.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/profile/ProfileTestHelperTest.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/story/StoryProgressTestHelperTest.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/threading/CoroutineExecutorServiceTest.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/threading/TestCoroutineDispatcherEspressoImplTest.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/threading/TestCoroutineDispatcherRobolectricImplTest.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/threading/TestCoroutineDispatcherTest.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/threading/TestCoroutineDispatcherTestBase.kt" +exempted_file_path: "testing/src/test/java/org/oppia/android/testing/time/FakeOppiaClockTest.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityProdModule.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityTestModule.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/datetime/DateTimeUtil.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/LogLevel.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploaderModule.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtil.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/html/ConceptCardTagHandler.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/html/CustomBulletSpan.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/html/MathTagHandler.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/GlideImageLoaderModule.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/UrlImageParser.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/ScalableVectorGraphic.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterConstants.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterValue.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClockModule.kt" +exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaDateTimeFormatter.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/data/AsyncResultTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/data/DataProvidersTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/data/InMemoryBlockingCacheTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/datetime/DateTimeUtilTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/logging/EventBundleCreatorTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/networking/NetworkConnectionUtilTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/parser/html/ConceptCardTagHandlerTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/parser/html/CustomHtmlContentHandlerTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/parser/html/ImageTagHandlerTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/parser/html/MathTagHandlerTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/parser/image/UrlImageParserTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/profile/DirectoryManagementUtilTest.kt" +exempted_file_path: "utility/src/test/java/org/oppia/android/util/system/OppiaDateTimeFormatterTest.kt" diff --git a/scripts/script_assets.bzl b/scripts/script_assets.bzl index ba53566b084..59d8655a91c 100644 --- a/scripts/script_assets.bzl +++ b/scripts/script_assets.bzl @@ -112,3 +112,27 @@ def generate_accessibility_label_assets_list_from_text_protos( proto_dep_bazel_target_prefix = "//scripts/src/java/org/oppia/android/scripts/proto", proto_package = "proto", ) + +def generate_kdoc_validity_assets_list_from_text_protos( + name, + kdoc_validity_exemptions_name): + """ + Converts a single list of text proto assets to binary. + + Args: + name: str. The name of this generation instance. This will be a prefix for derived targets. + kdoc_validity_exemptions_name: list of str. The list of kdoc validity exemptions file name. + + Returns: + list of str. The list of new proto binary asset files that were generated. + """ + return generate_proto_binary_assets( + name = name, + names = kdoc_validity_exemptions_name, + proto_dep_name = "script_exemptions", + proto_type_name = "KdocValidityExemptions", + name_prefix = name, + asset_dir = "assets", + proto_dep_bazel_target_prefix = "//scripts/src/java/org/oppia/android/scripts/proto", + proto_package = "proto", + ) diff --git a/scripts/src/java/org/oppia/android/scripts/docs/BUILD.bazel b/scripts/src/java/org/oppia/android/scripts/docs/BUILD.bazel new file mode 100644 index 00000000000..f342da5ec2b --- /dev/null +++ b/scripts/src/java/org/oppia/android/scripts/docs/BUILD.bazel @@ -0,0 +1,17 @@ +""" +Libraries corresponding to documentation-related scripts. +""" + +load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_library") + +kt_jvm_library( + name = "kdoc_validity_check_lib", + testonly = True, + srcs = ["KdocValidityCheck.kt"], + visibility = ["//scripts:oppia_script_binary_visibility"], + deps = [ + "//scripts/src/java/org/oppia/android/scripts/common:repository_file", + "//scripts/src/java/org/oppia/android/scripts/proto:script_exemptions_java_proto_lite", + "//third_party:org_jetbrains_kotlin_kotlin-compiler-embeddable", + ], +) diff --git a/scripts/src/java/org/oppia/android/scripts/docs/KdocValidityCheck.kt b/scripts/src/java/org/oppia/android/scripts/docs/KdocValidityCheck.kt new file mode 100644 index 00000000000..155cca50d5b --- /dev/null +++ b/scripts/src/java/org/oppia/android/scripts/docs/KdocValidityCheck.kt @@ -0,0 +1,347 @@ +package org.oppia.android.scripts.docs + +import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys +import org.jetbrains.kotlin.cli.common.messages.MessageCollector +import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment +import org.jetbrains.kotlin.com.intellij.openapi.util.Disposer +import org.jetbrains.kotlin.com.intellij.psi.PsiManager +import org.jetbrains.kotlin.com.intellij.testFramework.LightVirtualFile +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.idea.KotlinFileType +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.psi.KtClass +import org.jetbrains.kotlin.psi.KtConstructorDelegationReferenceExpression +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtNamedFunction +import org.jetbrains.kotlin.psi.KtObjectDeclaration +import org.jetbrains.kotlin.psi.KtSecondaryConstructor +import org.jetbrains.kotlin.psi.KtVariableDeclaration +import org.oppia.android.scripts.common.RepositoryFile +import org.oppia.android.scripts.proto.KdocValidityExemptions +import java.io.File +import java.io.FileInputStream + +/** + * Script for ensuring the KDocs validity on all non-private: + * - Classes + * - Functions + * - Values/fields + * - Explicit constructors + * - Companion objects + * - Nested classes + * - Enums + * - Annotations + * - Interfaces + * + * Note: If any of the above member has an override modifier present, then it is automatically + * exempted for the KDoc check. + * + * Usage: + * bazel run //scripts:kdoc_validity_check -- + * + * Arguments: + * - path_to_directory_root: directory path to the root of the Oppia Android repository. + * - path_to_proto_binary: relative path to the exemption .pb file. + * + * Example: + * bazel run //scripts:kdoc_validity_check -- $(pwd) scripts/assets/kdoc_validity_exemptions.pb + */ +fun main(vararg args: String) { + // Path of the repo to be analyzed. + val repoPath = "${args[0]}/" + + val pathToProtoBinary = args[1] + + val kdocExemptionTextProtoFilePath = "scripts/assets/kdoc_validity_exemptions" + + // List of annotation entries which when present on an element, the element does not needs to be + // checked for a KDoc. + val kDocNotRequiredAnnotationEntryList = listOf( + "Rule", + "Mock", + "Test", + "Before", + "Captor", + "BeforeClass", + "After", + "AfterClass", + "Inject", + "Provides" + ) + + // A list of all the files to be exempted for this check. + val kdocExemptionList = + loadKdocExemptionsProto(pathToProtoBinary).getExemptedFilePathList() + + // A list of all kotlin files in the repo to be analyzed. + val searchFiles = RepositoryFile.collectSearchFiles( + repoPath = repoPath, + expectedExtension = ".kt" + ) + + // A list of all kdoc presence failures. + val kdocPresenceFailures = searchFiles.flatMap { file -> + hasKdocFailure(file, kDocNotRequiredAnnotationEntryList) + } + + val matchedFilesRelativePaths = kdocPresenceFailures.map { + RepositoryFile.retrieveRelativeFilePath(it.first, repoPath) + } + + val redundantExemptions = kdocExemptionList.filter { exemption -> + exemption !in matchedFilesRelativePaths + } + + val kdocPresenceFailuresAfterExemption = kdocPresenceFailures.filter { + RepositoryFile.retrieveRelativeFilePath(it.first, repoPath) !in kdocExemptionList + } + + logRedundantExemptions(redundantExemptions, kdocExemptionTextProtoFilePath) + + logKdocPresenceFailures(kdocPresenceFailuresAfterExemption) + + if (kdocPresenceFailuresAfterExemption.isNotEmpty() || redundantExemptions.isNotEmpty()) { + throw Exception("KDOC VALIDITY CHECK FAILED") + } else { + println("KDOC VALIDITY CHECK PASSED") + } +} + +/** IntelliJ Project object, which is required to generate a [KtFile] from a Kotlin file. */ +private val project by lazy { + val config = CompilerConfiguration() + config.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE) + KotlinCoreEnvironment.createForProduction( + Disposer.newDisposable(), + config, + EnvironmentConfigFiles.JVM_CONFIG_FILES + ).project +} + +/** + * Generates a [KtFile] from a Kotlin file. + * + * @param codeString the string equivalent of the Kotlin file + * @param fileName name of the file + * @return the generated [KtFile] for the given file + */ +private fun createKtFile(codeString: String, fileName: String): KtFile { + return PsiManager.getInstance(project) + .findFile(LightVirtualFile(fileName, KotlinFileType.INSTANCE, codeString)) as KtFile +} + +/** + * Checks whether a file has a KDoc presence failure. + * + * @param file the file to be checked + * @param kDocNotRequiredAnnotationEntryList the list of annotation entries which when present + * on an element, the element does not needs to be checked for a KDoc. + * @return a list of elements in the file which are missing KDocs + */ +private fun hasKdocFailure( + file: File, + kDocNotRequiredAnnotationEntryList: List +): List> { + val ktFile = createKtFile( + file.readLines().joinToString(separator = System.lineSeparator()), + file.name + ) + return ktFile.children.flatMap { elem -> + if (elem is KtElement) { + recursiveKdocPresenceChecker( + elem, + file, + kDocNotRequiredAnnotationEntryList + ) + } else { + emptyList() + } + } +} + +/** + * Recursively iterates over an element and checks for a KDoc presence. + * + * @param elem the element over which we have to iterate + * @param file the file to be checked for the KDoc presence + * @param kDocNotRequiredAnnotationEntryList the list of annotation entries which when present + * on an element, the element does not needs to be checked for a KDoc. + * @return a list of elements which are missing KDocs + */ +private fun recursiveKdocPresenceChecker( + elem: KtElement, + file: File, + kDocNotRequiredAnnotationEntryList: List +): List> { + when { + elem is KtObjectDeclaration && elem.isCompanion() -> { + val memberMissingKdoc = elem.declarations.flatMap { childElem -> + recursiveKdocPresenceChecker( + childElem, + file, + kDocNotRequiredAnnotationEntryList + ) + } + return memberMissingKdoc + } + elem is KtClass -> { + val classKdocMissing = checkIfKDocIsMissing(elem, file, kDocNotRequiredAnnotationEntryList) + val memberMissingKdoc = elem.declarations.flatMap { childElem -> + recursiveKdocPresenceChecker( + childElem, + file, + kDocNotRequiredAnnotationEntryList + ) + } + return (memberMissingKdoc + classKdocMissing).filterNotNull() + } + elem is KtObjectDeclaration -> { + val objectKdocMissing = checkIfKDocIsMissing(elem, file, kDocNotRequiredAnnotationEntryList) + val memberMissingKdoc = elem.declarations.flatMap { childElem -> + recursiveKdocPresenceChecker( + childElem, + file, + kDocNotRequiredAnnotationEntryList + ) + } + return (memberMissingKdoc + objectKdocMissing).filterNotNull() + } + elem is KtNamedFunction || elem is KtVariableDeclaration || elem is KtSecondaryConstructor -> + return listOf( + checkIfKDocIsMissing(elem as KtDeclaration, file, kDocNotRequiredAnnotationEntryList) + ).filterNotNull() + else -> return emptyList() + } +} + +/** + * Checks if an element is missing a KDoc. + * + * @param elem the element to be checked + * @param file the file to be checked for KDoc presence + * @param kDocNotRequiredAnnotationEntryList the list of annotation entries which when present + * on an element, the element does not needs to be checked for a KDoc. + * @return Returns the pair of file and line number if KDoc is missing, else returns null + */ +private fun checkIfKDocIsMissing( + elem: KtDeclaration, + file: File, + kDocNotRequiredAnnotationEntryList: List +): Pair? { + if (!isKdocRequired(elem, kDocNotRequiredAnnotationEntryList)) { + return null + } + if (elem.docComment == null) { + return Pair(file, retrieveLineNumberForElement(elem, false)) + } + return null +} + +/** + * Returns whether an element is required to be checked for a KDoc presence. + * + * @param elem the element to be checked + * @param kDocNotRequiredAnnotationEntryList the list of annotation entries which when present + * on an element, the element does not needs to be checked for a KDoc. + * @return whether a KDoc is required for this element + */ +private fun isKdocRequired( + elem: KtDeclaration, + kDocNotRequiredAnnotationEntryList: List +): Boolean { + if (elem.hasModifier(KtTokens.PRIVATE_KEYWORD)) { + return false + } + if (elem.hasModifier(KtTokens.OVERRIDE_KEYWORD)) { + return false + } + elem.getModifierList()?.getAnnotationEntries()?.forEach { it -> + if (it.getShortName().toString() in kDocNotRequiredAnnotationEntryList) { + return false + } + } + return true +} + +/** + * Retrieves the line number for a particular [KtElement]. + * + * @param statement the [KtElement] for which we want to get the line number + * @param markEndOffset Whether to mark the end offset for the given element. For example: + * when set to true, the function will return the line number where the statement ends. + * Similarly, when this is set to false, the function returns the line number where the + * statement starts. + * @return the line number + */ +private fun retrieveLineNumberForElement(statement: KtElement, markEndOffset: Boolean): Int? { + val file = statement.containingFile + if (statement is KtConstructorDelegationReferenceExpression && statement.textLength == 0) { + // PsiElement for constructor delegation reference is always generated, so we shouldn't mark + // it's line number if it's empty + return null + } + val document = file.viewProvider.document + return document?.getLineNumber( + if (markEndOffset) statement.textRange.endOffset else statement.textOffset + )?.plus(1) +} + +/** + * Logs the failures for KDoc validity check. + * + * @param kdocPresenceFailuresAfterExemption list of KDoc presence failures + */ +private fun logKdocPresenceFailures(kdocPresenceFailuresAfterExemption: List>) { + if (kdocPresenceFailuresAfterExemption.isNotEmpty()) { + println("KDoc missing for files:") + kdocPresenceFailuresAfterExemption.sortedWith(compareBy({ it.first }, { it.second })).forEach { + println("- ${it.first}:${it.second}") + } + println() + } +} + +/** + * Logs the redundant exemptions. + * + * @param redundantExemptions list of redundant exemptions + * @param kdocExemptionTextProtoFilePath the location of the kdoc validity exemption textproto file + */ +private fun logRedundantExemptions( + redundantExemptions: List, + kdocExemptionTextProtoFilePath: String +) { + if (redundantExemptions.isNotEmpty()) { + println("Redundant exemptions:") + redundantExemptions.sorted().forEach { exemption -> + println("- $exemption") + } + println( + "Please remove them from $kdocExemptionTextProtoFilePath.textproto" + ) + println() + } +} + +/** + * Loads the KDoc validity exemptions list from a text proto file. + * + * @param kdocExemptionTextProtoFilePath the location of the kdoc validity exemption textproto file + * @return proto class from the parsed textproto file + */ +private fun loadKdocExemptionsProto(pathToProtoBinary: String): KdocValidityExemptions { + val protoBinaryFile = File(pathToProtoBinary) + val builder = KdocValidityExemptions.getDefaultInstance().newBuilderForType() + + // This cast is type-safe since proto guarantees type consistency from mergeFrom(), + // and this method is bounded by the generic type T. + @Suppress("UNCHECKED_CAST") + val protoObj: KdocValidityExemptions = + FileInputStream(protoBinaryFile).use { + builder.mergeFrom(it) + }.build() as KdocValidityExemptions + return protoObj +} diff --git a/scripts/src/java/org/oppia/android/scripts/proto/script_exemptions.proto b/scripts/src/java/org/oppia/android/scripts/proto/script_exemptions.proto index f524bf272b9..93ad5f68509 100644 --- a/scripts/src/java/org/oppia/android/scripts/proto/script_exemptions.proto +++ b/scripts/src/java/org/oppia/android/scripts/proto/script_exemptions.proto @@ -35,3 +35,19 @@ message AccessibilityLabelExemptions { // at the correct lexicographical position in the textproto file. repeated string exempted_activity = 1; } + +// Exemptions for the KDoc validity check. Exemptions indicate files for which we should +// not check for the presence of KDocs. +message KdocValidityExemptions { + // List of all the files which should be exempted for the KDoc check. + // For exempting any file, provide its relative path to root in + // 'script/assets/kdoc_validity_exemptions.textproto'. + // Also, note that the exemptions in the text proto file are maintained in lexicographical order. + // While adding any new file, please add it only at the correct lexicographical position, + // so that the list remains sorted. + // + // For example if we want to add the 'ActivityComponent.kt' file to the exemption list, add: + // 'exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt"' + // at the correct lexicographical position in the text proto file. + repeated string exempted_file_path = 1; +} diff --git a/scripts/src/javatests/org/oppia/android/scripts/docs/BUILD.bazel b/scripts/src/javatests/org/oppia/android/scripts/docs/BUILD.bazel new file mode 100644 index 00000000000..aacc8424486 --- /dev/null +++ b/scripts/src/javatests/org/oppia/android/scripts/docs/BUILD.bazel @@ -0,0 +1,16 @@ +""" +Tests corresponding to documentation-related scripts. +""" + +load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_test") + +kt_jvm_test( + name = "KdocValidityCheckTest", + srcs = ["KdocValidityCheckTest.kt"], + deps = [ + "//scripts/src/java/org/oppia/android/scripts/docs:kdoc_validity_check_lib", + "//testing:assertion_helpers", + "//third_party:com_google_truth_truth", + "//third_party:org_jetbrains_kotlin_kotlin-test-junit", + ], +) diff --git a/scripts/src/javatests/org/oppia/android/scripts/docs/KdocValidityCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/docs/KdocValidityCheckTest.kt new file mode 100644 index 00000000000..f8e16a4ecc8 --- /dev/null +++ b/scripts/src/javatests/org/oppia/android/scripts/docs/KdocValidityCheckTest.kt @@ -0,0 +1,876 @@ +package org.oppia.android.scripts.docs + +import com.google.common.truth.Truth.assertThat +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder +import org.oppia.android.scripts.proto.KdocValidityExemptions +import org.oppia.android.testing.assertThrows +import java.io.ByteArrayOutputStream +import java.io.File +import java.io.PrintStream + +private const val KDOC_CHECK_PASSED_OUTPUT_INDICATOR = "KDOC VALIDITY CHECK PASSED" +private const val KDOC_CHECK_FAILED_OUTPUT_INDICATOR = "KDOC VALIDITY CHECK FAILED" + +/** Tests for [KdocValidityCheck]. */ +class KdocValidityCheckTest { + private val outContent: ByteArrayOutputStream = ByteArrayOutputStream() + private val originalOut: PrintStream = System.out + private val pathToProtoBinary = "scripts/assets/kdoc_validity_exemptions.pb" + + @Rule + @JvmField + var tempFolder = TemporaryFolder() + + @Before + fun setUp() { + tempFolder.newFolder("testfiles") + tempFolder.newFolder("scripts", "assets") + tempFolder.newFile(pathToProtoBinary) + System.setOut(PrintStream(outContent)) + } + + @After + fun restoreStreams() { + System.setOut(originalOut) + } + + @Test + fun testKdoc_function_withKdoc_checkShouldPass() { + val testContent = + """ + /** + * Returns the string corresponding to this error's string resources, or null if there + * is none. + */ + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_privateMember_withoutKdoc_checkShouldPass() { + val testContent = + """ + private fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_memberWithOverrideModifier_withoutKdoc_checkShouldPass() { + val testContent = + """ + override fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_functionWithTestAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @Test + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_functionWithBeforeAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @Before + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_functionWithBeforeClassAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @BeforeClass + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_functionWithAfterAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @After + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_functionWithAfterClassAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @AfterClass + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_fieldWithRuleAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @Rule + @JvmField + val mockitoRule: MockitoRule = MockitoJUnit.rule() + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_fieldWithMockAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @Mock + lateinit var mockCellularDataObserver: Observer> + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_fieldWithCaptorAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @Captor + lateinit var regionClickedEvent: ArgumentCaptor + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_functionWithProvidesAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @Provides + @ExplorationStorageDatabaseSize + fun provideExplorationStorageDatabaseSize(): Int = 150 + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_classWithQualifier_withoutKdoc_checkShouldFail() { + val testContent = + """ + @Qualifier("TestClass") + class Sample1: Sample {} + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_fieldWithInjectAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + @Inject + lateinit var administratorControlsViewModel: AdministratorControlsViewModel + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_constructorWithInjectAnnotation_withoutKdoc_checkShouldPass() { + val testContent = + """ + /** Test Class. */ + class SelectionFragmentModel { + + @Inject + constructor(channelInfosRepository: ChannelInfosRepository) : super() { + this.channelInfosRepository = channelInfosRepository + } + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_injectPrimaryConstructor_withKdoc_noSpecialBehaviour_checkShouldPass() { + val testContent = + """ + /** Test Class. */ + class SelectionFragmentModel @Inject constructor() { + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_class_withoutKdoc_checkShouldFail() { + val testContent = + """ + class TestClass {} + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_nestedClass_withoutKdoc_checkShouldFail() { + val testContent = + """ + /** Test KDoc 1. */ + class TestClass { + /** Test KDoc 2. */ + class NestedClass { + class NestedLevel2Class {} + } + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:5 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_classMembers_withoutKdoc_checkShouldFail() { + val testContent = + """ + /** Test KDoc 1. */ + class TestClass { + val testVal = "test" + + fun testFunc(){} + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:5 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_fields_withoutKdoc_checkShouldFail() { + val testContent = + """ + val testVal = "dddd" + var testVar = true + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_lineCommentInsteadOfKdoc_checkShouldFail() { + val testContent = + """ + // Test line comment. + val testVal = "test content" + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_blockCommentInsteadOfKdoc_checkShouldFail() { + val testContent = + """ + /* This is a test block comment + * to ensure that only kdocs are tested. + */ + val testVal = "test content" + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:4 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_object_withoutKdoc_checkShouldFail() { + val testContent = + """ + object TestObject { + const val answer1 = 42 + const val answer2 = 43 + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_constants_withoutKdoc_checkShouldFail() { + val testContent = + """ + const val TABLE_USER_ATTRIBUTE_EMPID = "_id" + + const val TABLE_USER_ATTRIBUTE_DATA = "data" + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_function_withoutKdoc_checkShouldFail() { + val testContent = + """ + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_constructor_withoutKdoc_checkShouldFail() { + val testContent = + """ + /** Test KDoc. */ + class TestClass { + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_enum_withoutKdoc_checkShouldFail() { + val testContent = + """ + enum class WalkthroughPages(val value: Int) { + WELCOME(0), + TOPIC_LIST(1), + FINAL(2) + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:2 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:4 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_nestedInterface_withoutKdoc_checkShouldFail() { + val testContent = + """ + interface ChapterSelector { + + fun chapterSelected(chapterIndex: Int, nextStoryIndex: Int, explorationId: String) + + fun chapterUnselected(chapterIndex: Int, nextStoryIndex: Int) + + interface ChildInterface { + fun testFunction() + } + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:1 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:3 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:5 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:7 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:8 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_companionObject_withValuesAndFunctions_withoutKdoc_checkShouldFail() { + val testContent = + """ + /** Test KDoc. */ + class TestClass { + companion object { + val pos = 1 + + fun incrementedPosition(position: Int): Int { + return position+1 + } + + fun decrementedPosition(position: Int): Int { + return position-1 + } + } + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:4 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:6 + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:10 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_emptyCompanionObject_withoutKdoc_checkShouldPass() { + val testContent = + """ + /** Test Kdoc. */ + class Test { + companion object {} + } + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_annotation_withoutKdoc_checkShouldFail() { + val testContent = + """ + import javax.inject.Qualifier + + @Qualifier + annotation class DelayShowAdditionalHintsFromWrongAnswerMillis + """.trimIndent() + val tempFile = tempFolder.newFile("testfiles/TempFile.kt") + tempFile.writeText(testContent) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile.kt:4 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_multipleFiles_withoutKdoc_multipleFailures_logsShouldBeLexicographicallySorted() { + val testContent1 = + """ + import javax.inject.Qualifier + + @Qualifier + annotation class DelayShowAdditionalHintsFromWrongAnswerMillis + """.trimIndent() + val testContent2 = + """ + class TestClass { + fun testFunc(){} + + private val testVal = "test" + + val testVal2 = "test2" + } + """.trimIndent() + val testContent3 = + """ + val testVal = "abc" + """.trimIndent() + val tempFile1 = tempFolder.newFile("testfiles/TempFile1.kt") + val tempFile2 = tempFolder.newFile("testfiles/TempFile2.kt") + val tempFile3 = tempFolder.newFile("testfiles/TempFile3.kt") + tempFile1.writeText(testContent1) + tempFile2.writeText(testContent2) + tempFile3.writeText(testContent3) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/TempFile1.kt:4 + - ${retrieveTestFilesDirectoryPath()}/TempFile2.kt:1 + - ${retrieveTestFilesDirectoryPath()}/TempFile2.kt:2 + - ${retrieveTestFilesDirectoryPath()}/TempFile2.kt:6 + - ${retrieveTestFilesDirectoryPath()}/TempFile3.kt:1 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_exemptedFile_fileWithMissingExpectedKdocs_checkShouldPass() { + val testContent = + """ + /** test kdoc. */ + val testVal1 = "test content" + + val testVal2 = "test content" + + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + tempFolder.newFolder( + "testfiles", "app", "src", "main", "java", "org", "oppia", "android", "app", "home" + ) + val exemptedFile = tempFolder.newFile( + "testfiles/app/src/main/java/org/oppia/android/app/home/HomeActivity.kt" + ) + exemptedFile.writeText(testContent) + val exemptionFile = File("${tempFolder.root}/$pathToProtoBinary") + val exemptions = KdocValidityExemptions.newBuilder().apply { + this.addAllExemptedFilePath( + listOf("app/src/main/java/org/oppia/android/app/home/HomeActivity.kt") + ) + }.build() + exemptions.writeTo(exemptionFile.outputStream()) + + runScript() + + assertThat(outContent.toString().trim()).isEqualTo(KDOC_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testKdoc_fileWithAllExpectedKdocs_redundantExemption_checkShouldFail() { + val testContent = + """ + /** test Kdoc1. */ + val testVal = "test content" + + /** test Kdoc2. */ + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + tempFolder.newFolder( + "testfiles", "app", "src", "main", "java", "org", "oppia", "android", "app", "home" + ) + val exemptedFile = tempFolder.newFile( + "testfiles/app/src/main/java/org/oppia/android/app/home/HomeActivity.kt" + ) + exemptedFile.writeText(testContent) + val exemptionFile = File("${tempFolder.root}/$pathToProtoBinary") + val exemptions = KdocValidityExemptions.newBuilder().apply { + this.addAllExemptedFilePath( + listOf("app/src/main/java/org/oppia/android/app/home/HomeActivity.kt") + ) + }.build() + exemptions.writeTo(exemptionFile.outputStream()) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + Redundant exemptions: + - app/src/main/java/org/oppia/android/app/home/HomeActivity.kt + Please remove them from scripts/assets/kdoc_validity_exemptions.textproto + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + @Test + fun testKdoc_addRedundantExemption_missingKdoc_allFailuresShouldLog() { + val testContent = + """ + fun getErrorMessageFromStringRes(context: Context): String? { + return error?.let(context::getString) + } + """.trimIndent() + val exemptedFile = tempFolder.newFile( + "testfiles/HomeActivity.kt" + ) + exemptedFile.writeText(testContent) + val exemptionFile = File("${tempFolder.root}/$pathToProtoBinary") + val exemptions = KdocValidityExemptions.newBuilder().apply { + this.addAllExemptedFilePath( + listOf("app/src/main/java/org/oppia/android/app/splash/SplashActivity.kt") + ) + }.build() + exemptions.writeTo(exemptionFile.outputStream()) + + val exception = assertThrows(Exception::class) { + runScript() + } + + assertThat(exception).hasMessageThat().contains(KDOC_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + Redundant exemptions: + - app/src/main/java/org/oppia/android/app/splash/SplashActivity.kt + Please remove them from scripts/assets/kdoc_validity_exemptions.textproto + + KDoc missing for files: + - ${retrieveTestFilesDirectoryPath()}/HomeActivity.kt:1 + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) + } + + /** Retrieves the absolute path of testfiles directory. */ + private fun retrieveTestFilesDirectoryPath(): String { + return "${tempFolder.root}/testfiles" + } + + /** Runs the kdoc_validity_check. */ + private fun runScript() { + main(retrieveTestFilesDirectoryPath(), "${tempFolder.root}/$pathToProtoBinary") + } +} diff --git a/third_party/maven_install.json b/third_party/maven_install.json index 3d6cf35c655..6dceaf6429a 100644 --- a/third_party/maven_install.json +++ b/third_party/maven_install.json @@ -1,14 +1,14 @@ { "dependency_tree": { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 400706612, - "__RESOLVED_ARTIFACTS_HASH": -1263051889, + "__INPUT_ARTIFACTS_HASH": -690670428, + "__RESOLVED_ARTIFACTS_HASH": 764689860, "conflict_resolution": { "androidx.appcompat:appcompat:1.0.2": "androidx.appcompat:appcompat:1.2.0", "androidx.core:core:1.0.1": "androidx.core:core:1.3.0", "androidx.recyclerview:recyclerview:1.0.0": "androidx.recyclerview:recyclerview:1.1.0", "androidx.test:core:1.0.0": "androidx.test:core:1.2.0", - "org.jetbrains.kotlin:kotlin-reflect:1.3.41": "org.jetbrains.kotlin:kotlin-reflect:1.4.10", + "org.jetbrains.kotlin:kotlin-reflect:1.3.41": "org.jetbrains.kotlin:kotlin-reflect:1.5.0", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72": "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2": "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.1": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4", @@ -675,13 +675,13 @@ "coord": "androidx.core:core-ktx:1.0.1", "dependencies": [ "androidx.annotation:annotation:1.1.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", - "androidx.core:core:aar:1.3.0" + "androidx.core:core:aar:1.3.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "androidx.annotation:annotation:1.1.0", "androidx.core:core:aar:1.3.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/maven.google.com/androidx/core/core-ktx/1.0.1/core-ktx-1.0.1.aar", "mirror_urls": [ @@ -697,14 +697,14 @@ { "coord": "androidx.core:core-ktx:jar:sources:1.0.1", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "androidx.annotation:annotation:jar:sources:1.1.0", "androidx.core:core:aar:sources:1.3.0" ], "directDependencies": [ "androidx.annotation:annotation:jar:sources:1.1.0", "androidx.core:core:aar:sources:1.3.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/maven.google.com/androidx/core/core-ktx/1.0.1/core-ktx-1.0.1-sources.jar", "mirror_urls": [ @@ -945,7 +945,7 @@ "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10", "com.squareup:javapoet:1.11.1", "com.google.code.gson:gson:2.8.5", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "com.google.guava:guava:28.1-android", @@ -974,10 +974,10 @@ { "coord": "androidx.databinding:databinding-compiler-common:jar:sources:3.4.2", "dependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "com.android.tools:annotations:jar:sources:26.4.2", "com.android.tools.build.jetifier:jetifier-core:jar:sources:1.0.0-beta04", "com.android.databinding:baseLibrary:jar:sources:3.4.2", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", "org.antlr:antlr4:jar:sources:4.5.3", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", "androidx.databinding:databinding-common:jar:sources:3.4.2", @@ -1027,7 +1027,7 @@ "com.squareup:javapoet:1.11.1", "com.google.code.gson:gson:2.8.5", "commons-codec:commons-codec:1.10", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "androidx.databinding:databinding-common:3.4.2", @@ -1052,12 +1052,12 @@ { "coord": "androidx.databinding:databinding-compiler:jar:sources:3.4.2", "dependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "commons-codec:commons-codec:jar:sources:1.10", "com.android.tools:annotations:jar:sources:26.4.2", "com.android.tools.build.jetifier:jetifier-core:jar:sources:1.0.0-beta04", "com.android.databinding:baseLibrary:jar:sources:3.4.2", "androidx.databinding:databinding-compiler-common:jar:sources:3.4.2", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", "org.antlr:antlr4:jar:sources:4.5.3", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", "androidx.databinding:databinding-common:jar:sources:3.4.2", @@ -1580,12 +1580,12 @@ "androidx.annotation:annotation:1.1.0", "androidx.lifecycle:lifecycle-livedata-core:aar:2.2.0", "androidx.arch.core:core-common:2.1.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "androidx.arch.core:core-runtime:aar:2.1.0" ], "directDependencies": [ "androidx.lifecycle:lifecycle-livedata-core:aar:2.2.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/maven.google.com/androidx/lifecycle/lifecycle-livedata-core-ktx/2.2.0/lifecycle-livedata-core-ktx-2.2.0.aar", "mirror_urls": [ @@ -1602,7 +1602,7 @@ "coord": "androidx.lifecycle:lifecycle-livedata-core-ktx:aar:sources:2.2.0", "dependencies": [ "androidx.arch.core:core-runtime:aar:sources:2.1.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "androidx.lifecycle:lifecycle-livedata-core:aar:sources:2.2.0", "androidx.annotation:annotation:jar:sources:1.1.0", "androidx.arch.core:core-common:jar:sources:2.1.0", @@ -1610,7 +1610,7 @@ ], "directDependencies": [ "androidx.lifecycle:lifecycle-livedata-core:aar:sources:2.2.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/maven.google.com/androidx/lifecycle/lifecycle-livedata-core-ktx/2.2.0/lifecycle-livedata-core-ktx-2.2.0-sources.jar", "mirror_urls": [ @@ -1681,13 +1681,13 @@ "androidx.lifecycle:lifecycle-livedata-core:aar:2.2.0", "androidx.lifecycle:lifecycle-livedata-core-ktx:aar:2.2.0", "androidx.arch.core:core-common:2.1.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "androidx.arch.core:core-runtime:aar:2.1.0" ], "directDependencies": [ "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.lifecycle:lifecycle-livedata-core-ktx:aar:2.2.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4" ], "file": "v1/https/maven.google.com/androidx/lifecycle/lifecycle-livedata-ktx/2.2.0/lifecycle-livedata-ktx-2.2.0.aar", @@ -1705,8 +1705,8 @@ "coord": "androidx.lifecycle:lifecycle-livedata-ktx:jar:sources:2.2.0", "dependencies": [ "androidx.arch.core:core-runtime:aar:sources:2.1.0", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.3.4", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", "androidx.lifecycle:lifecycle-livedata-core:aar:sources:2.2.0", "androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0", "androidx.lifecycle:lifecycle-livedata-core-ktx:aar:sources:2.2.0", @@ -1717,7 +1717,7 @@ "directDependencies": [ "androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0", "androidx.lifecycle:lifecycle-livedata-core-ktx:aar:sources:2.2.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.3.4" ], "file": "v1/https/maven.google.com/androidx/lifecycle/lifecycle-livedata-ktx/2.2.0/lifecycle-livedata-ktx-2.2.0-sources.jar", @@ -1918,14 +1918,14 @@ { "coord": "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", - "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.annotation:annotation:1.1.0", - "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4" + "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", + "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4" ], "file": "v1/https/maven.google.com/androidx/lifecycle/lifecycle-viewmodel-ktx/2.2.0/lifecycle-viewmodel-ktx-2.2.0.aar", @@ -1942,14 +1942,14 @@ { "coord": "androidx.lifecycle:lifecycle-viewmodel-ktx:jar:sources:2.2.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", "org.jetbrains.kotlinx:kotlinx-coroutines-android:jar:sources:1.3.4", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", "androidx.annotation:annotation:jar:sources:1.1.0" ], "directDependencies": [ "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-android:jar:sources:1.3.4" ], "file": "v1/https/maven.google.com/androidx/lifecycle/lifecycle-viewmodel-ktx/2.2.0/lifecycle-viewmodel-ktx-2.2.0-sources.jar", @@ -2197,15 +2197,15 @@ { "coord": "androidx.navigation:navigation-common-ktx:aar:2.0.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", "androidx.navigation:navigation-common:aar:2.0.0", "androidx.collection:collection:1.1.0", - "androidx.core:core:aar:1.3.0" + "androidx.core:core:aar:1.3.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "androidx.collection:collection:1.1.0", "androidx.navigation:navigation-common:aar:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/maven.google.com/androidx/navigation/navigation-common-ktx/2.0.0/navigation-common-ktx-2.0.0.aar", "mirror_urls": [ @@ -2222,14 +2222,14 @@ "coord": "androidx.navigation:navigation-common-ktx:aar:sources:2.0.0", "dependencies": [ "androidx.navigation:navigation-common:aar:sources:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "androidx.collection:collection:jar:sources:1.1.0", "androidx.core:core:aar:sources:1.3.0" ], "directDependencies": [ "androidx.collection:collection:jar:sources:1.1.0", "androidx.navigation:navigation-common:aar:sources:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/maven.google.com/androidx/navigation/navigation-common-ktx/2.0.0/navigation-common-ktx-2.0.0-sources.jar", "mirror_urls": [ @@ -2301,14 +2301,14 @@ "androidx.print:print:aar:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "androidx.navigation:navigation-runtime:aar:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", "androidx.loader:loader:aar:1.0.0" ], "directDependencies": [ "androidx.navigation:navigation-fragment:aar:2.0.0", "androidx.navigation:navigation-runtime-ktx:aar:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/maven.google.com/androidx/navigation/navigation-fragment-ktx/2.0.0/navigation-fragment-ktx-2.0.0.aar", "mirror_urls": [ @@ -2325,6 +2325,7 @@ "coord": "androidx.navigation:navigation-fragment-ktx:jar:sources:2.0.0", "dependencies": [ "androidx.documentfile:documentfile:aar:sources:1.0.0", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "androidx.navigation:navigation-common-ktx:aar:sources:2.0.0", "androidx.print:print:aar:sources:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", @@ -2332,7 +2333,6 @@ "androidx.navigation:navigation-runtime:aar:sources:2.0.0", "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", "androidx.fragment:fragment:aar:sources:1.2.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", "androidx.collection:collection:jar:sources:1.1.0", "androidx.core:core:aar:sources:1.3.0", "androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0", @@ -2345,7 +2345,7 @@ "directDependencies": [ "androidx.navigation:navigation-fragment:aar:sources:2.0.0", "androidx.navigation:navigation-runtime-ktx:aar:sources:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/maven.google.com/androidx/navigation/navigation-fragment-ktx/2.0.0/navigation-fragment-ktx-2.0.0-sources.jar", "mirror_urls": [ @@ -2436,14 +2436,14 @@ "androidx.print:print:aar:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "androidx.navigation:navigation-runtime:aar:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", "androidx.loader:loader:aar:1.0.0" ], "directDependencies": [ "androidx.navigation:navigation-common-ktx:aar:2.0.0", "androidx.navigation:navigation-runtime:aar:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/maven.google.com/androidx/navigation/navigation-runtime-ktx/2.0.0/navigation-runtime-ktx-2.0.0.aar", "mirror_urls": [ @@ -2460,13 +2460,13 @@ "coord": "androidx.navigation:navigation-runtime-ktx:aar:sources:2.0.0", "dependencies": [ "androidx.documentfile:documentfile:aar:sources:1.0.0", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "androidx.navigation:navigation-common-ktx:aar:sources:2.0.0", "androidx.print:print:aar:sources:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0", "androidx.navigation:navigation-runtime:aar:sources:2.0.0", "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", "androidx.collection:collection:jar:sources:1.1.0", "androidx.core:core:aar:sources:1.3.0", "androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0", @@ -2477,7 +2477,7 @@ "directDependencies": [ "androidx.navigation:navigation-common-ktx:aar:sources:2.0.0", "androidx.navigation:navigation-runtime:aar:sources:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/maven.google.com/androidx/navigation/navigation-runtime-ktx/2.0.0/navigation-runtime-ktx-2.0.0-sources.jar", "mirror_urls": [ @@ -2567,14 +2567,14 @@ "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", "com.google.android.material:material:1.2.0-alpha02", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "androidx.navigation:navigation-runtime:aar:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", "androidx.loader:loader:aar:1.0.0" ], "directDependencies": [ "androidx.navigation:navigation-runtime-ktx:aar:2.0.0", "androidx.navigation:navigation-ui:aar:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/maven.google.com/androidx/navigation/navigation-ui-ktx/2.0.0/navigation-ui-ktx-2.0.0.aar", "mirror_urls": [ @@ -2591,13 +2591,13 @@ "coord": "androidx.navigation:navigation-ui-ktx:jar:sources:2.0.0", "dependencies": [ "androidx.documentfile:documentfile:aar:sources:1.0.0", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "androidx.navigation:navigation-common-ktx:aar:sources:2.0.0", "androidx.print:print:aar:sources:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0", "androidx.navigation:navigation-runtime:aar:sources:2.0.0", "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", "androidx.collection:collection:jar:sources:1.1.0", "com.google.android.material:material:jar:sources:1.2.0-alpha02", "androidx.navigation:navigation-ui:aar:sources:2.0.0", @@ -2611,7 +2611,7 @@ "directDependencies": [ "androidx.navigation:navigation-runtime-ktx:aar:sources:2.0.0", "androidx.navigation:navigation-ui:aar:sources:2.0.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/maven.google.com/androidx/navigation/navigation-ui-ktx/2.0.0/navigation-ui-ktx-2.0.0-sources.jar", "mirror_urls": [ @@ -3805,14 +3805,14 @@ "coord": "androidx.work:work-runtime-ktx:2.4.0", "dependencies": [ "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", "androidx.work:work-runtime:aar:2.4.0" ], "directDependencies": [ "androidx.work:work-runtime:aar:2.4.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4" ], "file": "v1/https/maven.google.com/androidx/work/work-runtime-ktx/2.4.0/work-runtime-ktx-2.4.0.aar", @@ -3829,15 +3829,15 @@ { "coord": "androidx.work:work-runtime-ktx:aar:sources:2.4.0", "dependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.3.4", - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0", "androidx.work:work-runtime:aar:sources:2.4.0", "org.jetbrains.kotlinx:kotlinx-coroutines-android:jar:sources:1.3.4" ], "directDependencies": [ "androidx.work:work-runtime:aar:sources:2.4.0", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-android:jar:sources:1.3.4" ], "file": "v1/https/maven.google.com/androidx/work/work-runtime-ktx/2.4.0/work-runtime-ktx-2.4.0-sources.jar", @@ -4053,12 +4053,12 @@ { "coord": "com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", - "com.google.code.gson:gson:2.8.5" + "com.google.code.gson:gson:2.8.5", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "com.google.code.gson:gson:2.8.5", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04.jar", "mirror_urls": [ @@ -4074,12 +4074,12 @@ { "coord": "com.android.tools.build.jetifier:jetifier-core:jar:sources:1.0.0-beta04", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "com.google.code.gson:gson:jar:sources:2.8.5" ], "directDependencies": [ "com.google.code.gson:gson:jar:sources:2.8.5", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04-sources.jar", "mirror_urls": [ @@ -4656,12 +4656,10 @@ { "coord": "com.google.android.flexbox:flexbox:3.0.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", - "org.jetbrains:annotations:13.0" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/maven.google.com/com/google/android/flexbox/flexbox/3.0.0/flexbox-3.0.0.aar", "mirror_urls": [ @@ -4677,12 +4675,10 @@ { "coord": "com.google.android.flexbox:flexbox:jar:sources:3.0.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", - "org.jetbrains:annotations:jar:sources:13.0" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/maven.google.com/com/google/android/flexbox/flexbox/3.0.0/flexbox-3.0.0-sources.jar", "mirror_urls": [ @@ -5303,9 +5299,9 @@ "com.squareup:javapoet:1.11.1", "com.google.dagger:dagger-producers:2.28.1", "com.google.guava:failureaccess:1.0.1", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "javax.inject:javax.inject:1", "com.google.dagger:dagger:2.28.1", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", "javax.annotation:jsr250-api:1.0", "com.google.googlejavaformat:google-java-format:1.5", "org.checkerframework:checker-compat-qual:2.5.5" @@ -5319,9 +5315,9 @@ "com.squareup:javapoet:1.11.1", "com.google.dagger:dagger-producers:2.28.1", "com.google.guava:failureaccess:1.0.1", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "javax.inject:javax.inject:1", "com.google.dagger:dagger:2.28.1", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", "javax.annotation:jsr250-api:1.0", "com.google.googlejavaformat:google-java-format:1.5", "org.checkerframework:checker-compat-qual:2.5.5" @@ -5340,11 +5336,11 @@ { "coord": "com.google.dagger:dagger-compiler:jar:sources:2.28.1", "dependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-metadata-jvm:jar:sources:0.1.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.errorprone:javac-shaded:jar:sources:9-dev-r4023-3", "com.google.googlejavaformat:google-java-format:jar:sources:1.5", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", "com.google.dagger:dagger:jar:sources:2.28.1", "javax.inject:javax.inject:jar:sources:1", "com.squareup:javapoet:jar:sources:1.11.1", @@ -5357,10 +5353,10 @@ "javax.annotation:jsr250-api:jar:sources:1.0" ], "directDependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-metadata-jvm:jar:sources:0.1.0", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.googlejavaformat:google-java-format:jar:sources:1.5", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", "com.google.dagger:dagger:jar:sources:2.28.1", "javax.inject:javax.inject:jar:sources:1", "com.squareup:javapoet:jar:sources:1.11.1", @@ -6424,9 +6420,9 @@ "com.google.auto.service:auto-service-annotations:1.0-rc7", "net.ltgt.gradle.incap:incap:0.3", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10", - "org.jetbrains.kotlin:kotlin-reflect:1.4.10", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", + "org.jetbrains.kotlin:kotlin-reflect:1.5.0" ], "directDependencies": [ "org.ow2.asm:asm:7.2", @@ -6435,7 +6431,7 @@ "com.google.auto.service:auto-service-annotations:1.0-rc7", "net.ltgt.gradle.incap:incap:0.3", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10", - "org.jetbrains.kotlin:kotlin-reflect:1.4.10" + "org.jetbrains.kotlin:kotlin-reflect:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/com/squareup/moshi/moshi-kotlin-codegen/1.11.0/moshi-kotlin-codegen-1.11.0.jar", "mirror_urls": [ @@ -6452,8 +6448,8 @@ "coord": "com.squareup.moshi:moshi-kotlin-codegen:jar:sources:1.11.0", "dependencies": [ "com.google.auto.service:auto-service-annotations:jar:sources:1.0-rc7", - "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.4.10", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.5.0", "org.ow2.asm:asm:jar:sources:7.2", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10", @@ -6464,7 +6460,7 @@ ], "directDependencies": [ "com.google.auto.service:auto-service-annotations:jar:sources:1.0-rc7", - "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.4.10", + "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.5.0", "org.ow2.asm:asm:jar:sources:7.2", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", "com.squareup:kotlinpoet:jar:sources:1.6.0", @@ -6485,15 +6481,15 @@ { "coord": "com.squareup.moshi:moshi-kotlin:1.11.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", "com.squareup.moshi:moshi:1.11.0", "com.squareup.okio:okio:2.2.2", - "org.jetbrains.kotlin:kotlin-reflect:1.4.10" + "org.jetbrains.kotlin:kotlin-reflect:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "com.squareup.moshi:moshi:1.11.0", - "org.jetbrains.kotlin:kotlin-reflect:1.4.10", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-reflect:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/com/squareup/moshi/moshi-kotlin/1.11.0/moshi-kotlin-1.11.0.jar", "mirror_urls": [ @@ -6510,14 +6506,14 @@ "coord": "com.squareup.moshi:moshi-kotlin:jar:sources:1.11.0", "dependencies": [ "com.squareup.okio:okio:jar:sources:2.2.2", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "com.squareup.moshi:moshi:jar:sources:1.11.0", - "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.4.10" + "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.5.0" ], "directDependencies": [ "com.squareup.moshi:moshi:jar:sources:1.11.0", - "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.4.10", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/com/squareup/moshi/moshi-kotlin/1.11.0/moshi-kotlin-1.11.0-sources.jar", "mirror_urls": [ @@ -6575,7 +6571,7 @@ "com.squareup.okhttp3:okhttp:4.1.0", "junit:junit:4.12", "org.hamcrest:hamcrest-core:1.3", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "com.squareup.okhttp3:okhttp:4.1.0", @@ -6595,7 +6591,7 @@ { "coord": "com.squareup.okhttp3:mockwebserver:jar:sources:4.1.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "com.squareup.okio:okio:jar:sources:2.2.2", "org.hamcrest:hamcrest-core:jar:sources:1.3", "junit:junit:jar:sources:4.12", @@ -6619,12 +6615,12 @@ { "coord": "com.squareup.okhttp3:okhttp:4.1.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", - "com.squareup.okio:okio:2.2.2" + "com.squareup.okio:okio:2.2.2", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "com.squareup.okio:okio:2.2.2", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/4.1.0/okhttp-4.1.0.jar", "mirror_urls": [ @@ -6641,11 +6637,11 @@ "coord": "com.squareup.okhttp3:okhttp:jar:sources:4.1.0", "dependencies": [ "com.squareup.okio:okio:jar:sources:2.2.2", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "directDependencies": [ "com.squareup.okio:okio:jar:sources:2.2.2", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/4.1.0/okhttp-4.1.0-sources.jar", "mirror_urls": [ @@ -6661,12 +6657,12 @@ { "coord": "com.squareup.okio:okio:2.2.2", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", - "com.squareup.okio:okio:2.2.2" + "com.squareup.okio:okio:2.2.2", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "com.squareup.okio:okio:2.2.2", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/com/squareup/okio/okio/2.2.2/okio-2.2.2.jar", "mirror_urls": [ @@ -6683,11 +6679,11 @@ "coord": "com.squareup.okio:okio:jar:sources:2.2.2", "dependencies": [ "com.squareup.okio:okio:jar:sources:2.2.2", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "directDependencies": [ "com.squareup.okio:okio:jar:sources:2.2.2", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/com/squareup/okio/okio/2.2.2/okio-2.2.2-sources.jar", "mirror_urls": [ @@ -6882,10 +6878,10 @@ "coord": "com.squareup:kotlinpoet:1.6.0", "dependencies": [ "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10", - "org.jetbrains.kotlin:kotlin-reflect:1.4.10" + "org.jetbrains.kotlin:kotlin-reflect:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-reflect:1.4.10", + "org.jetbrains.kotlin:kotlin-reflect:1.5.0", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10" ], "file": "v1/https/repo1.maven.org/maven2/com/squareup/kotlinpoet/1.6.0/kotlinpoet-1.6.0.jar", @@ -6903,10 +6899,10 @@ "coord": "com.squareup:kotlinpoet:jar:sources:1.6.0", "dependencies": [ "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", - "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.4.10" + "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.4.10", + "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.5.0", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10" ], "file": "v1/https/repo1.maven.org/maven2/com/squareup/kotlinpoet/1.6.0/kotlinpoet-1.6.0-sources.jar", @@ -7338,10 +7334,10 @@ { "coord": "nl.dionsegijn:konfetti:1.2.5", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/nl/dionsegijn/konfetti/1.2.5/konfetti-1.2.5.aar", "mirror_urls": [ @@ -7357,10 +7353,10 @@ { "coord": "nl.dionsegijn:konfetti:jar:sources:1.2.5", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/nl/dionsegijn/konfetti/1.2.5/konfetti-1.2.5-sources.jar", "mirror_urls": [ @@ -7602,80 +7598,232 @@ "url": "https://repo1.maven.org/maven2/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3-sources.jar" }, { - "coord": "org.jetbrains.kotlin:kotlin-reflect:1.4.10", + "coord": "org.jetbrains.intellij.deps:trove4j:1.0.20181211", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar", + "mirror_urls": [ + "https://maven.google.com/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar", + "https://repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar", + "https://maven.fabric.io/public/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar", + "https://maven.google.com/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar", + "https://repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar" + ], + "sha256": "affb7c85a3c87bdcf69ff1dbb84de11f63dc931293934bc08cd7ab18de083601", + "url": "https://repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.jar" + }, + { + "coord": "org.jetbrains.intellij.deps:trove4j:jar:sources:1.0.20181211", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211-sources.jar", + "mirror_urls": [ + "https://maven.google.com/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211-sources.jar", + "https://maven.fabric.io/public/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211-sources.jar", + "https://maven.google.com/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211-sources.jar" + ], + "sha256": "6a37f965621293e9f23eb2053040d31e5231596a068ee581410d6047e958a695", + "url": "https://repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211-sources.jar" + }, + { + "coord": "org.jetbrains.kotlin:kotlin-compiler-embeddable:1.5.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-script-runtime:1.5.0", + "org.jetbrains.kotlin:kotlin-daemon-embeddable:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", + "org.jetbrains.intellij.deps:trove4j:1.0.20181211", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", + "org.jetbrains:annotations:13.0", + "org.jetbrains.kotlin:kotlin-reflect:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-script-runtime:1.5.0", + "org.jetbrains.kotlin:kotlin-daemon-embeddable:1.5.0", + "org.jetbrains.intellij.deps:trove4j:1.0.20181211", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", + "org.jetbrains.kotlin:kotlin-reflect:1.5.0" ], - "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10.jar", + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0.jar", "mirror_urls": [ - "https://maven.google.com/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10.jar", - "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10.jar", - "https://maven.google.com/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10.jar" + "https://maven.google.com/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0.jar" ], - "sha256": "3ab3413ec945f801448360ad97bc6e14fec6d606889ede3c707cc277b4467f45", - "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10.jar" + "sha256": "d7b85448039e468daf3b9462a172244477fa3eb890f199ec77703992f36ade44", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0.jar" }, { - "coord": "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.4.10", + "coord": "org.jetbrains.kotlin:kotlin-compiler-embeddable:jar:sources:1.5.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-daemon-embeddable:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains:annotations:jar:sources:13.0", + "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0", + "org.jetbrains.intellij.deps:trove4j:jar:sources:1.0.20181211", + "org.jetbrains.kotlin:kotlin-script-runtime:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-daemon-embeddable:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.5.0", + "org.jetbrains.intellij.deps:trove4j:jar:sources:1.0.20181211", + "org.jetbrains.kotlin:kotlin-script-runtime:jar:sources:1.5.0" ], - "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10-sources.jar", + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0-sources.jar", "mirror_urls": [ - "https://maven.google.com/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10-sources.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10-sources.jar", - "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10-sources.jar", - "https://maven.google.com/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10-sources.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10-sources.jar" + "https://maven.google.com/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0-sources.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0-sources.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0-sources.jar" ], - "sha256": "471ef0d04b1b97fa146a28d5af6a956c13571d869f5f1f2f4983de88022ca170", - "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.10/kotlin-reflect-1.4.10-sources.jar" + "sha256": "69e1a62e5752ca3f43fb1607f161379bbe88b64af89c1a543c126160adf7cc53", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.5.0/kotlin-compiler-embeddable-1.5.0-sources.jar" }, { - "coord": "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32", + "coord": "org.jetbrains.kotlin:kotlin-daemon-embeddable:1.5.0", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar", + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0.jar", "mirror_urls": [ - "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar", - "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar", - "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar" + "https://maven.google.com/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0.jar" ], - "sha256": "e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145", - "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32.jar" + "sha256": "bf32071706cf3c20580516b04d25a733c7a21db9cd9d04fc7060c00720bc91bc", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0.jar" }, { - "coord": "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32", + "coord": "org.jetbrains.kotlin:kotlin-daemon-embeddable:jar:sources:1.5.0", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32-sources.jar", + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0-sources.jar", + "mirror_urls": [ + "https://maven.google.com/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0-sources.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0-sources.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0-sources.jar" + ], + "sha256": "f431a1129d6ea1cadb1a69885c3935e6e03deee4b12d924ff8e3cd068ae1cebb", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.5.0/kotlin-daemon-embeddable-1.5.0-sources.jar" + }, + { + "coord": "org.jetbrains.kotlin:kotlin-reflect:1.5.0", + "dependencies": [ + "org.jetbrains:annotations:13.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" + ], + "directDependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" + ], + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0.jar", "mirror_urls": [ - "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32-sources.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32-sources.jar", - "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32-sources.jar", - "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32-sources.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32-sources.jar" + "https://maven.google.com/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0.jar" ], - "sha256": "fb5a5efc62755bae303d9d39e1c1ca36c6f0c2b05aa5f83bd8baa4efc4c41c79", - "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.32/kotlin-stdlib-common-1.4.32-sources.jar" + "sha256": "e30acc4ff74534177d1657feafb57327ede838ae17763aeaae182a9109d26157", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0.jar" + }, + { + "coord": "org.jetbrains.kotlin:kotlin-reflect:jar:sources:1.5.0", + "dependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains:annotations:jar:sources:13.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" + ], + "directDependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" + ], + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0-sources.jar", + "mirror_urls": [ + "https://maven.google.com/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0-sources.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0-sources.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0-sources.jar" + ], + "sha256": "7c0d0b477b2d077d785d3c5439346622731d903c7f9e21f87c709e9f7a9a9e65", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.0/kotlin-reflect-1.5.0-sources.jar" + }, + { + "coord": "org.jetbrains.kotlin:kotlin-script-runtime:1.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0.jar", + "mirror_urls": [ + "https://maven.google.com/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0.jar" + ], + "sha256": "f2d45a350628bdfea25570c4c3f29198087e0f8cf53d87d928fb0da8a30c8fb7", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0.jar" + }, + { + "coord": "org.jetbrains.kotlin:kotlin-script-runtime:jar:sources:1.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0-sources.jar", + "mirror_urls": [ + "https://maven.google.com/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0-sources.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0-sources.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0-sources.jar" + ], + "sha256": "13db4d1b3123ae2fefccbc07ae0d8de07406f604fd518eb03195208531345a0c", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.5.0/kotlin-script-runtime-1.5.0-sources.jar" + }, + { + "coord": "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0.jar", + "mirror_urls": [ + "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0.jar" + ], + "sha256": "c14ce6720a487b5e238f1b0c30ac3ad73e45b90a40731ca0b1cfddec1a37682f", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0.jar" + }, + { + "coord": "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0-sources.jar", + "mirror_urls": [ + "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0-sources.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0-sources.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0-sources.jar" + ], + "sha256": "7a79a086fe7ae85675f9f81a9d12645fbcfd7abf03e1b36873253634a193477a", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.0/kotlin-stdlib-common-1.5.0-sources.jar" }, { "coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.10/kotlin-stdlib-jdk7-1.4.10.jar", "mirror_urls": [ @@ -7691,10 +7839,10 @@ { "coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.10/kotlin-stdlib-jdk7-1.4.10-sources.jar", "mirror_urls": [ @@ -7710,11 +7858,11 @@ { "coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10" + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.10/kotlin-stdlib-jdk8-1.4.10.jar", @@ -7731,11 +7879,11 @@ { "coord": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.10/kotlin-stdlib-jdk8-1.4.10-sources.jar", @@ -7750,54 +7898,54 @@ "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.10/kotlin-stdlib-jdk8-1.4.10-sources.jar" }, { - "coord": "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "coord": "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32", - "org.jetbrains:annotations:13.0" + "org.jetbrains:annotations:13.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0" ], "directDependencies": [ "org.jetbrains:annotations:13.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0" ], - "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar", + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0.jar", "mirror_urls": [ - "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar", - "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar", - "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar" + "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0.jar" ], - "sha256": "13e9fd3e69dc7230ce0fc873a92a4e5d521d179bcf1bef75a6705baac3bfecba", - "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32.jar" + "sha256": "52283996fe4067cd7330288b96ae67ecd463614dc741172c54d9d349ab6a9cd7", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0.jar" }, { - "coord": "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "coord": "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32", - "org.jetbrains:annotations:jar:sources:13.0" + "org.jetbrains:annotations:jar:sources:13.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "directDependencies": [ "org.jetbrains:annotations:jar:sources:13.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], - "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32-sources.jar", + "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0-sources.jar", "mirror_urls": [ - "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32-sources.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32-sources.jar", - "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32-sources.jar", - "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32-sources.jar", - "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32-sources.jar" + "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0-sources.jar", + "https://maven.fabric.io/public/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0-sources.jar", + "https://maven.google.com/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0-sources.jar", + "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0-sources.jar" ], - "sha256": "367a8d04dabbb7bf596ccf4e264ea0c44ffc15ba1552bad0fddcda7589048a76", - "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.32/kotlin-stdlib-1.4.32-sources.jar" + "sha256": "b163dff413167ec95d0c620b985f6b59965ebbd947ac5878904dd18ab8915166", + "url": "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.0/kotlin-stdlib-1.5.0-sources.jar" }, { "coord": "org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.72", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-test-annotations-common/1.3.72/kotlin-test-annotations-common-1.3.72.jar", "mirror_urls": [ @@ -7813,10 +7961,10 @@ { "coord": "org.jetbrains.kotlin:kotlin-test-annotations-common:jar:sources:1.3.72", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-test-annotations-common/1.3.72/kotlin-test-annotations-common-1.3.72-sources.jar", "mirror_urls": [ @@ -7832,10 +7980,10 @@ { "coord": "org.jetbrains.kotlin:kotlin-test-common:1.3.72", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-test-common/1.3.72/kotlin-test-common-1.3.72.jar", "mirror_urls": [ @@ -7851,10 +7999,10 @@ { "coord": "org.jetbrains.kotlin:kotlin-test-common:jar:sources:1.3.72", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-test-common/1.3.72/kotlin-test-common-1.3.72-sources.jar", "mirror_urls": [ @@ -7873,10 +8021,10 @@ "junit:junit:4.12", "org.jetbrains.kotlin:kotlin-test:1.3.72", "org.hamcrest:hamcrest-core:1.3", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", "org.jetbrains.kotlin:kotlin-test-common:1.3.72", "org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.72", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ "junit:junit:4.12", @@ -7897,8 +8045,8 @@ { "coord": "org.jetbrains.kotlin:kotlin-test-junit:jar:sources:1.3.72", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0", "org.hamcrest:hamcrest-core:jar:sources:1.3", "org.jetbrains.kotlin:kotlin-test:jar:sources:1.3.72", "org.jetbrains.kotlin:kotlin-test-common:jar:sources:1.3.72", @@ -7924,12 +8072,12 @@ { "coord": "org.jetbrains.kotlin:kotlin-test:1.3.72", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "org.jetbrains.kotlin:kotlin-test-common:1.3.72" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "org.jetbrains.kotlin:kotlin-test-common:1.3.72" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-test/1.3.72/kotlin-test-1.3.72.jar", @@ -7946,12 +8094,12 @@ { "coord": "org.jetbrains.kotlin:kotlin-test:jar:sources:1.3.72", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", - "org.jetbrains.kotlin:kotlin-test-common:jar:sources:1.3.72" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-test-common:jar:sources:1.3.72", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlin:kotlin-test-common:jar:sources:1.3.72" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-test/1.3.72/kotlin-test-1.3.72-sources.jar", @@ -7968,12 +8116,12 @@ { "coord": "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", - "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4" + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", + "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-android/1.3.4/kotlinx-coroutines-android-1.3.4.jar", @@ -7990,12 +8138,12 @@ { "coord": "org.jetbrains.kotlinx:kotlinx-coroutines-android:jar:sources:1.3.4", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32", "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.3.4", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.3.4" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-android/1.3.4/kotlinx-coroutines-android-1.3.4-sources.jar", @@ -8012,12 +8160,12 @@ { "coord": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.3.4/kotlinx-coroutines-core-1.3.4.jar", "mirror_urls": [ @@ -8033,12 +8181,12 @@ { "coord": "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.3.4", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.3.4/kotlinx-coroutines-core-1.3.4-sources.jar", "mirror_urls": [ @@ -8084,12 +8232,12 @@ { "coord": "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.2.2", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4", - "org.jetbrains.kotlinx:kotlinx-coroutines-debug:1.2.2" + "org.jetbrains.kotlinx:kotlinx-coroutines-debug:1.2.2", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4", "org.jetbrains.kotlinx:kotlinx-coroutines-debug:1.2.2" ], @@ -8108,11 +8256,11 @@ "coord": "org.jetbrains.kotlinx:kotlinx-coroutines-test:jar:sources:1.2.2", "dependencies": [ "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.3.4", - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-debug:jar:sources:1.2.2" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", "org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:sources:1.3.4", "org.jetbrains.kotlinx:kotlinx-coroutines-debug:jar:sources:1.2.2" ], @@ -8130,10 +8278,10 @@ { "coord": "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.1.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-metadata-jvm/0.1.0/kotlinx-metadata-jvm-0.1.0.jar", "mirror_urls": [ @@ -8149,10 +8297,10 @@ { "coord": "org.jetbrains.kotlinx:kotlinx-metadata-jvm:jar:sources:0.1.0", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.4.32" + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-metadata-jvm/0.1.0/kotlinx-metadata-jvm-0.1.0-sources.jar", "mirror_urls": [ diff --git a/third_party/versions.bzl b/third_party/versions.bzl index d073faf16c4..f35c4b8be6c 100644 --- a/third_party/versions.bzl +++ b/third_party/versions.bzl @@ -94,6 +94,7 @@ MAVEN_TEST_DEPENDENCY_VERSIONS = { "com.squareup.okhttp3:mockwebserver": "4.1.0", "com.squareup.retrofit2:retrofit-mock": "2.5.0", "junit:junit": "4.12", + "org.jetbrains.kotlin:kotlin-compiler-embeddable": "1.5.0", "org.jetbrains.kotlin:kotlin-reflect": "1.3.41", "org.jetbrains.kotlin:kotlin-test-junit": "1.3.72", "org.jetbrains.kotlinx:kotlinx-coroutines-test": "1.2.2",