oppia-android
oppia-android copied to clipboard
[Feature Request]: Introduce support for code coverage & enforcement (GSoC'24 4.1)
Is your feature request related to a problem? Please describe.
The team cannot currently monitor and enforce minimum code coverage (as a proxy for functional behavioral coverage) in automated tests.
Describe the solution you'd like
Suggested milestones
-
Milestone 1: Introduce a new script to compute a per-unit code coverage percentage for a single file.
- Deliverable 1: Introduce a new scripting utility that can run code coverage for a specific Bazel test target, interpret the results, and return a proto for data processing.
- Deliverable 2: Introduce a new utility which can, given the proto from the deliverable 1 utility, generate a rich-text code coverage report in one of two formats:
- Markdown (for easy copying to GitHub)
- HTML (for easy local viewing)
- Deliverable 3: Update the test exemption check script & its exemption format such that each file now has two possible states:
- Exempt from having a test file (the current exemption behavior).
- An override of the code coverage to meet a specific minimum (which can be 0%).
-
Milestone 2: Integrate code coverage checking.
- Deliverable 1: Introduce a new script that uses the utility from deliverable 1 to perform code coverage analysis for a single target and the utility from deliverable 2 to optionally generate and output a rich-text report file for the test run. This script should always output the computed code coverage for a given file, and have a configuration option to fail if it's below a specified threshold.
- Deliverable 2: Introduce a new CI workflow which, similarly to the existing unit test workflow, runs a series of buckets for code coverage analysis using the new script from milestone 1. Report generation should be enabled & reports uploaded as artifacts. Code coverage should only run after tests are passing (on a per-bucket basis if possible).
- Deliverable 3: Fix/replace the cancellation workflow to ensure re-runs of CI correctly and quickly terminate all existing workflows that are running.
- Deliverable 4: Introduce a wiki page explaining how to use the code coverage tool, provide advice on how to write tests with good behavioral coverage, and explain the limitations of the code coverage tool (i.e. all the cases it does not correctly count coverage for a specific line).
- Deliverable 5: File issues for all cases where the code coverage tool misses or incorrectly counts code coverage for future work.
Technical hints / guidance
Top-level components needed for code-coverage support
-
coverage.proto
: Describes the new scripting data structures needed for code coverage. -
CoverageRunner.kt
: A new scripting utility for running code coverage for a selected target. -
CoverageReporter.kt
: A new scripting utility for generating an HTML report of code coverage. -
RunCoverage.kt
: A new script for running code coverage locally. -
scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt
: Existing utility that needs to be updated to include support for code coverage enforcement. -
scripts/src/java/org/oppia/android/scripts/proto/script_exemptions.proto
: Existing exemptions definition that needs to be updated per theTestFileCheck
changes. -
.github/workflows/unit_tests.yml
: Existing CI workflow that needs to be updated in order to support code coverage. -
.github/workflows/workflow_canceller.yml
: Existing CI workflow that needs to be fixed. - (Other files for wiki changes).
Some key technical notes
- This spec overview does not include details for the Yaml or wiki changes.
- The test file exemptions textproto file will need to be rebuilt. The simplest way to do this would be to update TestFileCheck to include a text proto regenerate argument (as used in other scripts).
- workflow_canceller.yml changes may required manually introducing support for workflow cancellation, or finding an available open source utility that works correctly for dynamic matrix jobs.
- unit_tests.yml will probably be extended to introduce a new job that blocks on the test run (in the same way as check_tests) except it (note that this may require a new script not spec'ed out in this overview):
-
- Intreprets the same matrix data as the main test run but omits the failing tests using the outputs from the test runs themselves.
-
- Starts a new test matrix that runs the
RunCoverage.kt
script for each affected file corresponding to each affected test. For example, if StateFragmentTest.kt is one of the affected tests, then RunCoverage would be run for StateFragment.kt (which would then correspond to StateFragmentTest per its behavior).
- Starts a new test matrix that runs the
- Note that the min enforced coverage for now should be something very modest, like 10%. This number will be increased in future changes outside the scope of this project (as the number may not be believable until we understand the limitations of what can be covered by JaCoCo).
-
-
BazelClient.kt
may need to be updated to include a function for running coverage on a specific target & output the standard output lines from that (which can then be parsed to get the report to generate the CoverageReport proto object). - All new components require new corresponding test files. All updated components will need their tests updated based on the changes to those components.
Suggested files to add/change
coverage.proto:
message CoverageReport {
string bazel_test_target = 1; // The Bazel test target that was run.
repeated CoveredFile covered_file = 2; // Files with some coverage in this report.
}
message CoveredFile {
string file_path = 1; // Relative to the project root.
string file_sha1_hash = 2; // SHA-1 hash of the file content at the time of report (to guard against changes).
repeated CoveredLine covered_line = 3; // Lines of code covered in the report.
}
message CoveredLine {
int32 line_number = 1; // 0-starting line number of the covered line.
Coverage coverage = 2; // Detected coverage.
enum Coverage {
FULL, // This line was fully covered by the test.
PARTIAL, // This line was partially covered by the test, indicating some branches not being covered.
NONE // This line was not executed during the test.
}
}
CoverageReporter.kt:
class CoverageReporter {
fun generateRichTextReport(report: CoverageReport, format: ReportFormat): String
fun computeCoverageRatio(file: String, report: CoverageReport): Float // Returns in [0, 1].
enum class ReportFormat {
MARKDOWN,
HTML
}
}
CoverageRunner.kt:
class CoverageRunner {
// Uses bazel coverage to run code coverage on the specified test target & interprets the results to generate and return a CoverageReport.
fun runWithCoverageAsync(bazelTestTarget: String): Deferred<CoverageReport>
}
RunCoverage.kt:
// Usage:
// bazel run //scripts:run_coverage -- <repo_root> <relative_test_file> <report_output_dir> [min_coverage=<int_perc>] [format=markdown,html]
//
// Examples:
// bazel run //scripts:run_coverage -- $(pwd) utility/src/main/java/org/oppia/android/util/math/MathTokenizer.kt $(pwd)/reports
// bazel run //scripts:run_coverage -- $(pwd) utility/src/main/java/org/oppia/android/util/math/MathTokenizer.kt $(pwd)/reports min_coverage=20
// bazel run //scripts:run_coverage -- $(pwd) utility/src/main/java/org/oppia/android/util/math/MathTokenizer.kt $(pwd)/reports format=markdown
// bazel run //scripts:run_coverage -- $(pwd) utility/src/main/java/org/oppia/android/util/math/MathTokenizer.kt $(pwd)/reports format=html
// bazel run //scripts:run_coverage -- $(pwd) utility/src/main/java/org/oppia/android/util/math/MathTokenizer.kt $(pwd)/reports min_coverage=20 format=markdown,html
//
// The script:
// 1. Finds the corresponding test file specific to the file to be checked.
// a. If the file has no test & isn't exempted, the script should fail.
// b. If the file has no test & is exempted, the script should output as such.
// 2. Uses CoverageRunner to run the corresponding test file to generate a report.
// 3. Outputs code coverage percentage based on the report.
// a. If the file has a code coverage percentage exemption, it's also outputted at this point.
// 4. If formats are specified, CoverageReporter should be used to generate reports for each specified format in the destination report_output_dir directory.
// 5. If min_coverage is specified, compares the computed code coverage with the minimum specified. The script should fail iff the file has less than the minimum specified coverage.
fun main(vararg args: String)
class RunCoverage {
fun runCoverage(targetFile: String, outputFormats: List<CoverageReporter.ReportFormat>)
}
script_exemptions.proto:
// The old TestFileExemptions proto (for reference).
message TestFileExemptionsOld {
repeated string exempted_file_path = 1;
}
message TestFileExemptions {
repeated TestFileExemption test_file_exemption = 1;
message TestFileExemption {
string exempted_file_path = 1;
oneof exemption_type {
bool test_file_not_required = 2;
int32 override_min_coverage_percent_required = 3;
}
}
}
Describe alternatives you've considered
No response
Additional context
This is the high-level tracking issue corresponding to https://github.com/oppia/oppia/wiki/Google-Summer-of-Code-2024#41-code-coverage-support-and-enforcement.
Note that this project includes work that relate to the following issues: #1497, #1726, #1727, and #1728.
NB: This issue is locked to ensure that it only contains updates for requirements. If you have questions regarding this project, please use its corresponding discussion category: https://github.com/oppia/oppia-android/discussions/categories/gsoc-q-a-4-1-code-coverage-support.
NB: The main issue comment has been updated to include the technical details directly rather than a link to a Gist (so that we can easily change this if needed). None of the technical requirements have actually changed.
Milestone 1
✅ PR 1.1 - #5423
Introduce RunCoverage and CoverageRunner utilities to run code coverage for a specific bazel test target.
Starting Date | Creation Date | Merge Date |
---|---|---|
27-05-2024 | 01-06-2024 | 03-06-2024 |
Tasks
Task | Due Date |
---|---|
✅ Setup the workspace with bazel 6.5.0. | 27-05-2024 |
✅ Introduce RunCoverage script. | 27-05-2024 |
✅ Introduce CoverageRunner utility to call Bazel command. | 28-05-2024 |
✅ Add implementation in BazelClient to execute Bazel coverage command. | 29-05-2024 |
✅ Add tests for execution of Bazel coverage command through RunCoverage script. | 01-06-2024 |
As per Schedule Slip
✅ PR 1.2 - #5426
Updating the test exemption script.
Starting Date | Creation Date | Merge Date |
---|---|---|
01-06-2024 | 03-06-2024 | 05-06-2024 |
Revised Dates
Starting Date | Creation Date | Merge Date |
---|---|---|
17-06-2024 | 18-06-2024 | 20-06-2024 |
Tasks
Task | Original Due Date | Revised Due Date |
---|---|---|
✅ Update the test exemption check script proto. | 01-06-2024 | 17-06-2024 |
✅ Update the exemption_type data. | 02-06-2024 | 17-06-2024 |
✅ Add / Update tests for TestFileCheckTest scripts as required. | 03-06-2024 | 18-06-2024 |
✅ PR 1.3 - #5433
Update / Implement script to run code coverage for a specific file replacing test target argument.
Starting Date | Creation Date | Merge Date |
---|---|---|
03-06-2024 | 08-06-2024 | 10-06-2024 |
Revised Dates
Starting Date | Creation Date | Merge Date |
---|---|---|
19-06-2024 | 20-06-2024 | 22-06-2024 |
Tasks
Task | Original Due Date | Revised Due Date |
---|---|---|
✅ Update the script to take in a file as argument instead of target. | 03-06-2024 | 19-06-2024 |
✅ Check with the exempted test file list to log the coverage ratio to 0%. | 03-06-2024 | 19-06-2024 |
✅ Add functionality to map the file name to related test targets. | 04-06-2024 | 19-06-2024 |
✅ Include execution for related Test and LocalTest Targets. | 06-06-2024 | 20-06-2024 |
✅ Add tests for execution of Bazel coverage command with filename. | 08-06-2024 | 20-06-2024 |
✅ PR 1.4 - #5439
Interpreting the results and building proto for data processing.
Starting Date | Creation Date | Merge Date |
---|---|---|
08-06-2024 | 13-06-2024 | 15-06-2024 |
Revised Dates
Starting Date | Creation Date | Merge Date |
---|---|---|
21-06-2024 | 23-06-2024 | 25-06-2024 |
Tasks
Task | Original Due Date | Revised Due Date |
---|---|---|
✅ Extract the coverage data path from the results. | 08-06-2024 | 21-06-2024 |
✅ Introduce coverage.proto to store the produced coverage data. | 08-06-2024 | 21-06-2024 |
✅ Parse the coverage data and store them to the proto. | 10-06-2024 | 21-06-2024 |
✅ Isolate the coverage data to only contain the target coverage data. | 11-06-2024 | 22-06-2024 |
✅ Include coverage data to proto for any related tests - 'LocalTest'. | 12-06-2024 | 22-06-2024 |
✅ Add tests to validate acquired coverage data stored in the proto. | 13-06-2024 | 23-06-2024 |
✅ PR 1.5 - #5443
Introduce CoverageReporter utility and generate the code coverage report.
Starting Date | Creation Date | Merge Date |
---|---|---|
13-06-2024 | 20-06-2024 | 22-06-2024 |
Revised Dates
Starting Date | Creation Date | Merge Date |
---|---|---|
24-06-2024 | 28-06-2024 | 30-06-2024 |
Tasks
Task | Original Due Date | Revised Due Date |
---|---|---|
✅ Introduce CoverageReporter utility to generate the code coverage report. | 13-06-2024 | 24-06-2024 |
✅ Compute the coverage Ratio. | 13-06-2024 | 24-06-2024 |
✅ Generate Markdown report with proto. | 15-06-2024 | 25-06-2024 |
✅ Generate HTML report with proto. | 18-06-2024 | 27-06-2024 |
✅ Add tests to validate the Markdown and HTML report generation and coverage ratios. | 20-06-2024 | 28-06-2024 |
Buffer Time
To work on reviews and code changes.
Starting Date | Creation Date | Merge Date |
---|---|---|
22-06-2024 | 26-06-2024 | 28-06-2024 |
Midpoint Evaluation
Code Reviews and Evaluations
Starting Date | Creation Date | Merge Date |
---|---|---|
28-06-2024 | 08-07-2024 | 12-07-2024 |
Milestone 2
✅ PR 2.1 - #5459
Implement Aggregate Coverage Analysis for many:1 relationship files
Starting Date | Creation Date | Merge Date |
---|---|---|
12-07-2024 | 15-07-2024 | 19-07-2024 |
Tasks
Task | Due Date |
---|---|
✅ Aggregate by calculating multiple resultant coverage reports into one single report | 12-07-2024 |
✅ Generate Markdown reports with the aggregated coverage report. | 13-07-2024 |
✅ Generate Markdown reports with the aggregated coverage report. | 14-07-2024 |
✅ Update test cases to validate many to one relationship coverage analysis | 15-07-2024 |
✅ PR 2.2 - #5461
Enable Coverage Generation for a list of files
Starting Date | Creation Date | Merge Date |
---|---|---|
16-07-2024 | 23-07-2024 | 27-07-2024 |
Tasks
Task | Due Date |
---|---|
✅ Let the command-line args take in a list of string (files). | 16-07-2024 |
✅ Update the implementation to handle mapping of multiple files to appropriate targets. | 17-07-2024 |
✅ Update the implementation to generate proto with multiple file inputs. | 19-07-2024 |
✅ Update the implementation to generate markdown with multiple file inputs. | 21-07-2024 |
✅ Update the implementation to generate html with multiple file inputs. | 22-07-2024 |
✅ Update the test cases to handle multiple file inputs and outputs. | 23-07-2024 |
✅ PR 2.3 - #5465
Introduce new CI workflow for code coverage
Starting Date | Creation Date | Merge Date |
---|---|---|
24-07-2024 | 30-07-2024 | 03-08-2024 |
Tasks
Task | Due Date |
---|---|
✅ Introduce a new CI workflow that utilizes the coverage script. | 24-07-2024 |
✅ Configure it to run it with and without cache. | 25-07-2024 |
✅ Configure it to run as a series of buckets. | 27-07-2024 |
✅ Configure it to fail if it's below the threshold. | 28-07-2024 |
✅ Configure it to generate markdown reports. | 29-07-2024 |
✅ (Updated) Run Coverage Check only after Unit Test Pass. | 30-07-2024 |
✅ Analyze the new runs. | 30-07-2024 |
✅ PR 2.4 - #5469
Upload generated markdown report as comment
Starting Date | Creation Date | Merge Date |
---|---|---|
31-07-2024 | 02-08-2024 | 06-08-2024 |
Tasks
Task | Due Date |
---|---|
✅ Modify the workflow to upload markdown report as a comment. | 01-08-2024 |
✅ (Updated) Combine generated reports from each run into one final report. | 01-08-2024 |
✅ Review and refine markdown upload implementation. | 02-08-2024 |
✅ PR 2.5 - #5466
Fix/replace cancellation workflow
Starting Date | Creation Date | Merge Date |
---|---|---|
03-08-2024 | 07-08-2024 | 10-08-2024 |
Tasks
Task | Due Date |
---|---|
✅ Identify issues with the current cancellation workflow. | 03-08-2024 |
✅ Execute and analyze cancellation with styfle - PR #2890. | 05-08-2024 |
✅ Develop replacement or fix for the cancellation workflow. | 06-08-2024 |
✅ Validate the new cancellation workflow. | 07-08-2024 |
PR 2.6 - #5483
Create wiki page explaining code coverage usage, limitations, file issues for coverage gaps, and test writing tips
Starting Date | Creation Date | Merge Date |
---|---|---|
08-08-2024 | 10-08-2024 | 12-08-2024 |
Tasks
Task | Due Date |
---|---|
✅ Introduce new wiki page for "how to use the code coverage tool". | 08-08-2024 |
✅ Introduce new wiki page for "how to write tests with good behavioral coverage". | 09-08-2024 |
✅ Introduce new wiki page for "Limitations of the code coverage tool". | 10-08-2024 |
✅ File issues for missing / incorrect code coverages. | 10-08-2024 |
Old Milestone 2 Timeline
# Milestone 2PR 2.1
Introduce new CI workflow for code coverage
Starting Date | Creation Date | Merge Date |
---|---|---|
12-07-2024 | 22-07-2024 | 24-07-2024 |
Tasks
Task | Due Date |
---|---|
⬜ Introduce a new CI workflow that utilizes the coverage script. | 13-07-2024 |
⬜ Configure it to run it with and without cache. | 15-07-2024 |
⬜ Configure it to run as a series of buckets. | 18-07-2024 |
⬜ Configure it to fail if it's below the threshold. | 20-07-2024 |
⬜ Configure it to generate markdown reports. | 22-07-2024 |
⬜ Analyze the new runs. | 22-07-2024 |
PR 2.2
Upload generated markdown report as comment
Starting Date | Creation Date | Merge Date |
---|---|---|
22-07-2024 | 26-07-2024 | 28-07-2024 |
Tasks
Task | Due Date |
---|---|
⬜ Modify the workflow to upload markdown report as a comment. | 24-07-2024 |
⬜ Test markdown report upload feature. | 25-07-2024 |
⬜ Review and refine markdown upload implementation. | 26-07-2024 |
PR 2.3
Fix/replace cancellation workflow
Starting Date | Creation Date | Merge Date |
---|---|---|
26-07-2024 | 01-08-2024 | 03-08-2024 |
Tasks
Task | Due Date |
---|---|
⬜ Identify issues with the current cancellation workflow. | 26-07-2024 |
⬜ Execute and analyze cancellation with styfle - PR #2890. | 28-07-2024 |
⬜ Develop replacement or fix for the cancellation workflow. | 30-07-2024 |
⬜ Validate the new cancellation workflow. | 01-08-2024 |
PR 2.4
Create wiki page explaining code coverage usage, limitations, file issues for coverage gaps, and test writing tips
Starting Date | Creation Date | Merge Date |
---|---|---|
01-08-2024 | 04-08-2024 | 06-08-2024 |
Tasks
Task | Due Date |
---|---|
⬜ Introduce new wiki page for "how to use the code coverage tool". | 01-08-2024 |
⬜ Introduce new wiki page for "how to write tests with good behavioral coverage". | 02-08-2024 |
⬜ Introduce new wiki page for "Limitations of the code coverage tool". | 03-08-2024 |
⬜ File issues for missing / incorrect code coverages. | 04-08-2024 |
Buffer Time
To work on reviews and code changes.
Starting Date | Creation Date | Merge Date |
---|---|---|
06-08-2024 | 10-08-2024 | 12-08-2024 |
Final Evaluation
Code Reviews and Evaluations
Starting Date | Creation Date | Merge Date |
---|---|---|
12-08-2024 | 26-08-2024 | 03-09-2024 |
Spare Intervals
Spare intervals to fix any further issues.
Starting Date | Creation Date | Merge Date |
---|---|---|
03-09-2024 | N/A | End of GSoC period |
@Rd4dev The dates for milestone 1(creation date, some due date), can you please fix those? Also, I don't see any update on the milestone/PRs task, can you please actively update this table? (whenever you complete a task or get a PR merged)
@DubeySandeep Corrected the dates and updated the table to reflect the current progress, will ensure it remains up to date in the future.
Continuing the discussion from #4886 regarding why some app and testing module tests seem to fail to run in coverage. Copying in my comment from that thread:
Thanks @Rd4dev. It's interesting to see the differences with Gradle.
I spent some time today trying a bunch of different things to try and even get a newer version of JaCoCo running. It would be a lot to summarize, so here's the very high-level:
We can build a deploy version of our Robolectric tests, but actually directly running them via JVM CLI is quite hard because there's a lot of environment setup stuff Bazel does behind the scenes.
It is possible to set up a custom Java toolchain to replace the built-in one that comes with Bazel (so that we can swap out the JaCoCo binary it points to).
Swapping out JaCoCo is hard. Bazel builds its own wrapper around the JaCoCo library rather than using its CLI, so we'd have to build our own version of that which points to a newer JaCoCo library.
The above isn't too much of an issue, except Bazel is in a weird mid-migration state where it's moving its remote_java_tools dependencies to a separate repo, but it's in between state is essentially:
- Bazel itself instruments remote_java_tools when building (since rules_java still just points to the native Java rules as they haven't yet been fully migrated to Starlark).
- Bazel does the above by pointing to remote_java_tools prebuilt deployments which are generated using a script that points back to Bazel in order to create the deployable Jars for its package.
That's as far as I've made it to updating JaCoCo even for a light test. Essentially next steps would be:
- Build a custom remote_java_tools deployment that contains a newer version of JaCoCo.
- Upload this somewhere (like a GitHub fork).
- Update my local checkout of Bazel to point to these new packages & rebuild.
- Use the locally built Bazel binary to try and run coverage.
It would probably be much easier to try and create a similar failure case outside of Bazel entirely (i.e. using direct
javac
and JaCoCo's CLIs), but without a better sense of what the root issue is that will presumably be hard to come up with. Hopefully I can make headway on the above to at least try to use a newer version of JaCoCo to see if that makes any difference on the failures.
Will add any other findings I have here.
I found that, interestingly, two things:
- Coverage is failing for some groups of tests outside of app module.
- All app module tests that have their own explicit test targets work with coverage.
This is leading me to believe that there may be a problem with the top-level test targets that are defined, by default, for tests with no dedicated BUILD files. I need to dig a bit more to confirm this (& maybe come up with some explanation as to why), but if this is right then the pathway to fixing it is at least fairly straightforward.
Okay I'm almost certain this is the problem area, though I'm still unsure why. The following command passes for me (running all non-top-level tests):
bazel coverage //{app,domain,testing,utility,data,scripts}/src/...
However, this fails:
bazel coverage --keep_going //domain/...
This fails with 84 targets that don't build. I took a specific example: MultipleChoiceInputEqualsRuleClassifierProviderTest
. This test fails to build with coverage as-is, but moving it to its own target causes it to pass.
I'm now going to investigate the differences between the local declaration and top-level declaration for this test to see if it's something that's actually fixable.
Edit: Ah, this is interesting. I'm trying a different classifier:
bazel coverage //domain:src/test/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputIsInRegionRuleClassifierProviderTest
I get the following build error:
INFO: From KotlinCompile @//domain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput:drag_and_drop_sort_input_providers_kt { kt: 4, java: 0, srcjars: 0 } for k8:
Jun 20, 2024 11:10:10 PM worker request 0
SEVERE: Uncaught exception
java.io.IOException: Error while instrumenting /tmp/pwd7199928558572205927/_kotlinc/domain_src_main_java_org_oppia_android_domain_classify_rules_dragAndDropSortInput-drag_and_drop_sort_input_providers_kt_jvm/classes/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXAtPositionYClassifierProvider$createRuleClassifier$$inlined$createDoubleInputClassifier$2.class with JaCoCo 0.8.9.202303300400/461ebf3.
at org.jacoco.core.instr.Instrumenter.instrumentError(Instrumenter.java:162)
at org.jacoco.core.instr.Instrumenter.instrument(Instrumenter.java:111)
at org.jacoco.core.instr.Instrumenter.instrument(Instrumenter.java:136)
at org.jacoco.core.instr.Instrumenter.instrument(Instrumenter.java:156)
at io.bazel.kotlin.builder.tasks.jvm.JacocoInstrumentationKt$instrumentRecursively$visitor$1.visitFile(JacocoInstrumentation.kt:66)
at io.bazel.kotlin.builder.tasks.jvm.JacocoInstrumentationKt$instrumentRecursively$visitor$1.visitFile(JacocoInstrumentation.kt:52)
at java.base/java.nio.file.Files.walkFileTree(Files.java:2725)
at java.base/java.nio.file.Files.walkFileTree(Files.java:2797)
at io.bazel.kotlin.builder.tasks.jvm.JacocoInstrumentationKt.instrumentRecursively(JacocoInstrumentation.kt:73)
at io.bazel.kotlin.builder.tasks.jvm.JacocoInstrumentationKt.createCoverageInstrumentedJar(JacocoInstrumentation.kt:21)
at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1$1$6.invoke(KotlinJvmTaskExecutor.kt:112)
at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1$1$6.invoke(KotlinJvmTaskExecutor.kt:112)
at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:153)
at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:145)
at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1.invoke(KotlinJvmTaskExecutor.kt:112)
at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor$execute$1.invoke(KotlinJvmTaskExecutor.kt:54)
at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:153)
at io.bazel.kotlin.builder.toolchain.CompilationTaskContext.execute(CompilationTaskContext.kt:145)
at io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor.execute(KotlinJvmTaskExecutor.kt:54)
at io.bazel.kotlin.builder.tasks.KotlinBuilder.executeJvmTask(KotlinBuilder.kt:209)
at io.bazel.kotlin.builder.tasks.KotlinBuilder.build(KotlinBuilder.kt:102)
at io.bazel.kotlin.builder.tasks.CompileKotlin.invoke(CompileKotlin.kt:27)
at io.bazel.worker.PersistentWorker$workTo$1.invoke(PersistentWorker.kt:97)
at io.bazel.worker.PersistentWorker$workTo$1.invoke(PersistentWorker.kt:97)
at io.bazel.worker.WorkerContext$TaskContext.resultOf(WorkerContext.kt:128)
at io.bazel.worker.WorkerContext.doTask(WorkerContext.kt:156)
at io.bazel.worker.PersistentWorker$start$1$1$producer$1$1.invoke$lambda$0(PersistentWorker.kt:70)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.IllegalStateException: Cannot process instrumented class org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXAtPositionYClassifierProvider$createRuleClassifier$$inlined$createDoubleInputClassifier$2. Please supply original non-instrumented classes.
at org.jacoco.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:238)
at org.jacoco.core.internal.instr.ClassInstrumenter.visitMethod(ClassInstrumenter.java:65)
at org.jacoco.core.internal.flow.ClassProbesAdapter.visitMethod(ClassProbesAdapter.java:66)
at com.google.testing.coverage.jarjar.org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1353)
at com.google.testing.coverage.jarjar.org.objectweb.asm.ClassReader.accept(ClassReader.java:744)
at com.google.testing.coverage.jarjar.org.objectweb.asm.ClassReader.accept(ClassReader.java:424)
at org.jacoco.core.instr.Instrumenter.instrument(Instrumenter.java:91)
at org.jacoco.core.instr.Instrumenter.instrument(Instrumenter.java:109)
... 31 more
I didn't notice this before, but I find it especially noteworthy that the failure is tied to DragDropSortInputHasElementXAtPositionYClassifierProvider which is completely unrelated to the test that I'm trying to build. I find this interesting because it's an entirely different target, so I'm not sure why it's trying to build the other target (even if they're both umodularized top-level defined domain tests).
Running the coverage request multiple times tends to fail with a different test each time. I'm also noticing a bunch of compile targets are kicking off when running coverage when they really shouldn't.
Edit 2: Ah, I misread the above. These are production libraries that are failing in the context of the test build, not other tests. That sounds more like some sort of package conflict is happening since so many tests are packed in the same top-level package for unmodularized tests. Still digging.
So I've tried a few things to try and fix this: replacing the '/' part of the top-level test names with '_' (in case there are directory pathing assumptions being made somewhere in the coverage pipeline), forcing a modularized test into a subdirectory (for the same check), and bring closer parity between top-level unmodularized (failing) tests with modularized (passing tests). Despite these, I still can't find an obvious reason why prod targets are failing in the context of non-modularized tests.
It very much seems like there's some sort of instrumentation duplication happening for production targets shared across tests. It's not obvious to me why this is happening, nor is it that modularized multi-test packages build & run fine (but not the top-level unmodularized tests). It could be a number of tests thing, but that implies a (scary) hidden limitation of the coverage pipeline. Alternatively, there could just be some sort of highly specific pathing assumption happening somewhere that I can't easily isolate.
The best path forward is probably to finish the modularization work. The good news is that those PRs are very close to being ready to go into review (since they were shortly after #4886 in the Bazel PR chain). The bad news is that these are very large and complex PRs that will probably require significant time to bring back into review.
I'm going to see if we can at least disable the broken tests for coverage for now, but I'm not sure if that's actually possible.
Edit: Per https://github.com/bazelbuild/bazel/issues/21520 it seems we are not able to easily selectively disable certain tests for code coverage. :( I think that means we must work to bring in modularization in order to address this. I will dig to see just how difficult that effort will be.
I'm going to see if we can at least disable the broken tests for coverage for now, but I'm not sure if that's actually possible.
Hey @BenHenning,
If disabling the broken tests directly through Bazel isn't an option, could we consider using our existing test_files_exemption
to add a field for exempting tests from coverage? Since we already check for exemptions at the beginning and skip execution if a file is exempted, we could apply the same logic to coverage checks. This wouldn't fix the underlying issue but if skipping those coverages is something we can do then, I am wondering if this could serve as a temporary workaround to skip the problematic coverage executions.
I'm going to see if we can at least disable the broken tests for coverage for now, but I'm not sure if that's actually possible.
Hey @BenHenning,
If disabling the broken tests directly through Bazel isn't an option, could we consider using our existing
test_files_exemption
to add a field for exempting tests from coverage? Since we already check for exemptions at the beginning and skip execution if a file is exempted, we could apply the same logic to coverage checks. This wouldn't fix the underlying issue but if skipping those coverages is something we can do then, I am wondering if this could serve as a temporary workaround to skip the problematic coverage executions.
I think that's a good backup option @Rd4dev. I want to see if it's possible to bring forward the changes that would ultimately unblock the work (since we want them, anyway), but if that ends up being infeasible I think your approach is the best option.
So I spent a lot of time this week trying to get up to a point of verifying this result, but I couldn't quite get one of the modularization PRs building again (the prerequisites #4920 and #4978 took a long time to get working). I'll need to revisit this when I next have availability (in July).
@Rd4dev The merge date for PR 1.3 is behind the expected revised deadline, can you please help us understand what's going on and when can we expect the PR to be merged?
@Rd4dev The merge date for PR 1.3 is behind the expected revised deadline, can you please help us understand what's going on and when can we expect the PR to be merged?
@DubeySandeep The PR 1.3 was in review iterations, and just got merged: https://github.com/oppia/oppia-android/pull/5433 Updated the same with issue tracker
Other PRs PR 1.4 is in review PR 1.5 will be out of draft by EOD
So I spent a lot of time this week trying to get up to a point of verifying this result, but I couldn't quite get one of the modularization PRs building again (the prerequisites #4920 and #4978 took a long time to get working). I'll need to revisit this when I next have availability (in July).
Hey @BenHenning,
I tried to see if I could make any conversion to package-specific targets, but I'm not sure if I did it correctly or if the coverage results are accurate. I wanted to update you on how things went (in case any of this could be useful for future reference).
domain module
As mentioned earlier, I first tried to run the coverage for the domain module's MultipleChoiceInputEqualsRuleClassifierProviderTest with the top-level package label version, but it failed to retrieve coverage.
//domain:src/test/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProviderTest
This fails with 84 targets that don't build. I took a specific example: MultipleChoiceInputEqualsRuleClassifierProviderTest. This test fails to build with coverage as-is, but moving it to its own target causes it to pass.
So, I tried to refactor it to package-relative label, and that yielded a desirable output with coverage data containing coverages for the source file MultipleChoiceInputEqualsRuleClassifierProvider.kt (since the source files already had their own targets, it was straightforward).
//domain/src/test/java/org/oppia/android/domain/classify/rules/multiplechoiceinput:MultipleChoiceInputEqualsRuleClassifierProviderTest
Coveragae Result
SF:domain/src/main/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProvider.kt
FN:17,org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProvider::<init> (Lorg/oppia/android/domain/classify/rules/GenericRuleClassifier$Factory;)V
FN:22,org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProvider::createRuleClassifier ()Lorg/oppia/android/domain/classify/RuleClassifier;
FN:33,org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProvider::matches (IILorg/oppia/android/domain/classify/ClassificationContext;)Z
FNDA:1,org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProvider::<init> (Lorg/oppia/android/domain/classify/rules/GenericRuleClassifier$Factory;)V
FNDA:1,org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProvider::createRuleClassifier ()Lorg/oppia/android/domain/classify/RuleClassifier;
FNDA:1,org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProvider::matches (IILorg/oppia/android/domain/classify/ClassificationContext;)Z
FNF:3
FNH:3
BRDA:33,0,0,1
BRDA:33,0,1,1
BRF:2
BRH:2
DA:17,1
DA:18,1
DA:22,1
DA:23,1
DA:24,1
DA:33,1
LH:6
LF:6
end_of_record
app module
Then, I tried replicating the same behavior for SplashActivity, which was more complex :| so I skipped that and instead tried doing FractionParsingUiError.kt in the app module. While the top-level package label coverage run failed, converting it to a package-relative label it eventually passed the coverage run,
$ bazel coverage //app/src/test/java/org/oppia/android/app/parser:FractionParsingUiErrorTest --instrumentation_filter=//app/...
BUT the coverage data didn't have the desired output. Specifically, the coverage result should provide the coverage data related to the source file, i.e., for FractionParsingUiErrorTest.kt, it should point to -> SF: FractionParsingUiError.kt, but it was not there. Instead, it had coverage data related to FractionParsingUiErrorTest.
Coverage Results (Lengthy Report Inside)
cat /home/rddev/.cache/bazel/_bazel_rddev/81159660e9f0a21d3064c6805850402d/execroot/__main__/bazel-out/k8-fastbuild/testlogs/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest/coverage.dat
SF:app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityIntentFactories.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableAppCompatActivity.kt
FN:19,org/oppia/android/app/activity/InjectableAppCompatActivity::<init> ()V
FN:29,org/oppia/android/app/activity/InjectableAppCompatActivity::attachBaseContext (Landroid/content/Context;)V
FN:48,org/oppia/android/app/activity/InjectableAppCompatActivity::createFragmentComponent (Landroidx/fragment/app/Fragment;)Lorg/oppia/android/app/fragment/FragmentComponent;
FN:92,org/oppia/android/app/activity/InjectableAppCompatActivity::ensureLayoutDirection ()V
FN:26,org/oppia/android/app/activity/InjectableAppCompatActivity::getActivityComponent ()Lorg/oppia/android/app/activity/ActivityComponent;
FN:52,org/oppia/android/app/activity/InjectableAppCompatActivity::getAppLanguageActivityInjector ()Lorg/oppia/android/app/translation/AppLanguageActivityInjector;
FN:38,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;)V
FN:43,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
FN:55,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeActivityComponent (Landroid/content/Context;)V
FN:67,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeLocalization (Landroid/content/Context;)Landroid/content/res/Configuration;
FN:26,org/oppia/android/app/activity/InjectableAppCompatActivity::setActivityComponent (Lorg/oppia/android/app/activity/ActivityComponent;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::<init> ()V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::attachBaseContext (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::createFragmentComponent (Landroidx/fragment/app/Fragment;)Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::ensureLayoutDirection ()V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::getActivityComponent ()Lorg/oppia/android/app/activity/ActivityComponent;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::getAppLanguageActivityInjector ()Lorg/oppia/android/app/translation/AppLanguageActivityInjector;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeActivityComponent (Landroid/content/Context;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeLocalization (Landroid/content/Context;)Landroid/content/res/Configuration;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::setActivityComponent (Lorg/oppia/android/app/activity/ActivityComponent;)V
FNF:11
FNH:9
BRDA:26,0,0,1
BRDA:26,0,1,0
BRDA:29,0,0,0
BRDA:29,0,1,1
BRDA:29,0,2,0
BRDA:29,0,3,1
BRDA:34,0,0,0
BRDA:34,0,1,1
BRDA:76,0,0,0
BRDA:76,0,1,1
BRDA:76,0,2,0
BRDA:76,0,3,1
BRF:12
BRH:6
DA:19,1
DA:20,1
DA:26,1
DA:29,1
DA:30,0
DA:32,1
DA:33,1
DA:34,1
DA:35,1
DA:38,1
DA:39,1
DA:40,1
DA:43,0
DA:44,0
DA:45,0
DA:48,0
DA:49,0
DA:52,1
DA:55,1
DA:56,1
DA:57,1
DA:67,1
DA:68,1
DA:69,1
DA:70,1
DA:71,1
DA:73,1
DA:74,1
DA:76,1
DA:77,1
DA:78,1
DA:92,1
DA:93,1
LH:27
LF:33
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt
FN:13,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::<init> ()V
FN:16,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNDA:1,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::<init> ()V
FNDA:1,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNF:2
FNH:2
DA:13,1
DA:16,1
DA:17,1
LH:3
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.kt
FN:13,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::<init> ()V
FN:16,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNDA:0,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::<init> ()V
FNDA:0,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNF:2
FNH:0
DA:13,0
DA:16,0
DA:17,0
LH:0
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/ActivityRouter.kt
FN:13,org/oppia/android/app/activity/route/ActivityRouter::<init> (Landroidx/appcompat/app/AppCompatActivity;Ljava/util/Map;Lorg/oppia/android/util/logging/ConsoleLogger;)V
FN:20,org/oppia/android/app/activity/route/ActivityRouter::routeToScreen (Lorg/oppia/android/app/model/DestinationScreen;)V
FNDA:1,org/oppia/android/app/activity/route/ActivityRouter::<init> (Landroidx/appcompat/app/AppCompatActivity;Ljava/util/Map;Lorg/oppia/android/util/logging/ConsoleLogger;)V
FNDA:0,org/oppia/android/app/activity/route/ActivityRouter::routeToScreen (Lorg/oppia/android/app/model/DestinationScreen;)V
FNF:2
FNH:1
BRDA:20,0,0,-
BRDA:20,0,1,-
BRDA:25,0,0,-
BRDA:25,0,1,-
BRF:4
BRH:0
DA:13,1
DA:14,1
DA:15,1
DA:16,1
DA:20,0
DA:21,0
DA:22,0
DA:23,0
DA:25,0
DA:26,0
DA:28,0
DA:30,0
LH:4
LF:12
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/Route.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/RouteKey.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationInjectorProvider.kt
FN:29,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getAppLanguageApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FN:37,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getConsoleLoggerInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FN:26,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDataProvidersInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/data/DataProvidersInjector;
FN:35,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDispatcherInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/threading/DispatcherInjector;
FN:33,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getLocaleApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FN:31,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getOppiaClockInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/system/OppiaClockInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getAppLanguageApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getConsoleLoggerInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDataProvidersInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/data/DataProvidersInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDispatcherInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/threading/DispatcherInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getLocaleApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getOppiaClockInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/system/OppiaClockInjector;
FNF:6
FNH:3
DA:26,1
DA:29,1
DA:31,0
DA:33,1
DA:35,0
DA:37,0
LH:3
LF:6
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationStartupListenerModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/testing/TestingBuildFlavorModule.kt
FN:11,org/oppia/android/app/application/testing/TestingBuildFlavorModule::<init> ()V
FN:14,org/oppia/android/app/application/testing/TestingBuildFlavorModule::provideTestingBuildFlavor ()Lorg/oppia/android/app/model/BuildFlavor;
FNDA:1,org/oppia/android/app/application/testing/TestingBuildFlavorModule::<init> ()V
FNDA:0,org/oppia/android/app/application/testing/TestingBuildFlavorModule::provideTestingBuildFlavor ()Lorg/oppia/android/app/model/BuildFlavor;
FNF:2
FNH:1
DA:11,1
DA:12,1
DA:14,0
LH:2
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponentBuilderInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::<init> ()V
FN:31,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:22,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::getBottomSheetFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:25,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::onAttach (Landroid/content/Context;)V
FN:22,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::setBottomSheetFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::getBottomSheetFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::setBottomSheetFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:15,0
DA:22,0
DA:25,0
DA:26,0
DA:27,0
DA:28,0
DA:31,0
DA:32,0
LH:0
LF:9
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableDialogFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableDialogFragment::<init> ()V
FN:29,org/oppia/android/app/fragment/InjectableDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:20,org/oppia/android/app/fragment/InjectableDialogFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:23,org/oppia/android/app/fragment/InjectableDialogFragment::onAttach (Landroid/content/Context;)V
FN:20,org/oppia/android/app/fragment/InjectableDialogFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:20,0
DA:23,0
DA:24,0
DA:25,0
DA:26,0
DA:29,0
DA:30,0
LH:0
LF:8
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableFragment::<init> ()V
FN:29,org/oppia/android/app/fragment/InjectableFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:20,org/oppia/android/app/fragment/InjectableFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:23,org/oppia/android/app/fragment/InjectableFragment::onAttach (Landroid/content/Context;)V
FN:20,org/oppia/android/app/fragment/InjectableFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:20,0
DA:23,0
DA:24,0
DA:25,0
DA:26,0
DA:29,0
DA:30,0
LH:0
LF:8
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/IntentFactoryShim.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/IntentFactoryShimModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/ViewBindingShim.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/ViewBindingShimModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightManager.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightNavigationListener.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightShape.kt
FN:6,org/oppia/android/app/spotlight/SpotlightShape$Circle::<init> ()V
FN:9,org/oppia/android/app/spotlight/SpotlightShape$RoundedRectangle::<init> ()V
FNDA:0,org/oppia/android/app/spotlight/SpotlightShape$Circle::<init> ()V
FNDA:0,org/oppia/android/app/spotlight/SpotlightShape$RoundedRectangle::<init> ()V
FNF:2
FNH:0
DA:6,0
DA:9,0
LH:0
LF:2
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightTarget.kt
FN:14,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;)V
FN:14,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
FN:66,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreX ()F
FN:70,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreY ()F
FN:58,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorHeight ()I
FN:44,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorLeft ()F
FN:51,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorTop ()F
FN:62,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorWidth ()I
FN:15,org/oppia/android/app/spotlight/SpotlightTarget::getAnchor ()Landroid/view/View;
FN:30,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreX ()F
FN:32,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreY ()F
FN:26,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorHeight ()I
FN:22,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorLeft ()F
FN:24,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorTop ()F
FN:28,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorWidth ()I
FN:18,org/oppia/android/app/spotlight/SpotlightTarget::getFeature ()Lorg/oppia/android/app/model/Spotlight$FeatureCase;
FN:16,org/oppia/android/app/spotlight/SpotlightTarget::getHint ()Ljava/lang/String;
FN:17,org/oppia/android/app/spotlight/SpotlightTarget::getShape ()Lorg/oppia/android/app/spotlight/SpotlightShape;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;)V
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreX ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreY ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorHeight ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorLeft ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorTop ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorWidth ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchor ()Landroid/view/View;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreX ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreY ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorHeight ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorLeft ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorTop ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorWidth ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getFeature ()Lorg/oppia/android/app/model/Spotlight$FeatureCase;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getHint ()Ljava/lang/String;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getShape ()Lorg/oppia/android/app/spotlight/SpotlightShape;
FNF:18
FNH:0
DA:14,0
DA:15,0
DA:16,0
DA:17,0
DA:18,0
DA:22,0
DA:24,0
DA:26,0
DA:28,0
DA:30,0
DA:32,0
DA:34,0
DA:35,0
DA:36,0
DA:37,0
DA:38,0
DA:39,0
DA:40,0
DA:41,0
DA:44,0
DA:45,0
DA:46,0
DA:47,0
DA:51,0
DA:52,0
DA:53,0
DA:54,0
DA:58,0
DA:62,0
DA:66,0
DA:70,0
DA:72,0
LH:0
LF:32
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandler.kt
FN:30,org/oppia/android/app/translation/ActivityLanguageLocaleHandler$displayLocale$2::invoke ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:18,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;)V
FN:29,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:41,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FN:51,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler$displayLocale$2::invoke ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;)V
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FNDA:0,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNF:5
FNH:4
BRDA:53,0,0,-
BRDA:53,0,1,-
BRF:2
BRH:0
DA:18,1
DA:19,1
DA:20,1
DA:21,1
DA:29,1
DA:30,1
DA:41,1
DA:42,1
DA:51,0
DA:52,0
DA:53,0
LH:8
LF:11
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreator.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorImpl.kt
FN:7,org/oppia/android/app/translation/ActivityRecreatorImpl::<init> ()V
FN:9,org/oppia/android/app/translation/ActivityRecreatorImpl::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNDA:0,org/oppia/android/app/translation/ActivityRecreatorImpl::<init> ()V
FNDA:0,org/oppia/android/app/translation/ActivityRecreatorImpl::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNF:2
FNH:0
DA:7,0
DA:9,0
DA:10,0
LH:0
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorProdModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjectorProvider.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjectorProvider.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageLocaleHandler.kt
FN:20,org/oppia/android/app/translation/AppLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;)V
FN:76,org/oppia/android/app/translation/AppLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:41,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)V
FN:56,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FN:32,org/oppia/android/app/translation/AppLanguageLocaleHandler::isInitialized ()Z
FN:67,org/oppia/android/app/translation/AppLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FN:81,org/oppia/android/app/translation/AppLanguageLocaleHandler::verifyDisplayLocaleIsInitialized ()V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)V
FNDA:0,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::isInitialized ()Z
FNDA:0,org/oppia/android/app/translation/AppLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::verifyDisplayLocaleIsInitialized ()V
FNF:7
FNH:5
BRDA:32,0,0,1
BRDA:32,0,1,1
BRDA:41,0,0,1
BRDA:41,0,1,0
BRDA:41,0,2,0
BRDA:41,0,3,1
BRDA:57,0,0,-
BRDA:57,0,1,-
BRDA:68,0,0,-
BRDA:68,0,1,-
BRDA:70,0,0,-
BRDA:70,0,1,-
BRDA:77,0,0,1
BRDA:77,0,1,0
BRDA:81,0,0,0
BRDA:81,0,1,1
BRF:16
BRH:6
DA:20,1
DA:21,1
DA:22,1
DA:32,1
DA:41,1
DA:42,0
DA:45,1
DA:46,1
DA:56,0
DA:57,0
DA:58,0
DA:67,0
DA:68,0
DA:69,0
DA:70,0
DA:76,1
DA:77,1
DA:81,1
DA:82,0
DA:85,1
LH:11
LF:20
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageWatcherMixin.kt
FN:80,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::<init> (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;Landroidx/lifecycle/LiveData;)V
FN:82,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::onChanged (Lorg/oppia/android/util/data/AsyncResult;)V
FN:20,org/oppia/android/app/translation/AppLanguageWatcherMixin::<init> (Landroidx/appcompat/app/AppCompatActivity;Lorg/oppia/android/domain/translation/TranslationController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/domain/oppialogger/OppiaLogger;Lorg/oppia/android/app/translation/ActivityRecreator;Lorg/oppia/android/domain/profile/ProfileManagementController;Lorg/oppia/android/app/translation/ActivityLanguageLocaleHandler;)V
FN:43,org/oppia/android/app/translation/AppLanguageWatcherMixin::initialize (Z)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::<init> (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;Landroidx/lifecycle/LiveData;)V
FNDA:0,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::onChanged (Lorg/oppia/android/util/data/AsyncResult;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin::<init> (Landroidx/appcompat/app/AppCompatActivity;Lorg/oppia/android/domain/translation/TranslationController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/domain/oppialogger/OppiaLogger;Lorg/oppia/android/app/translation/ActivityRecreator;Lorg/oppia/android/domain/profile/ProfileManagementController;Lorg/oppia/android/app/translation/ActivityLanguageLocaleHandler;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin::initialize (Z)V
FNF:4
FNH:3
BRDA:43,0,0,1
BRDA:43,0,1,0
BRDA:72,0,0,0
BRDA:72,0,1,1
BRDA:73,0,0,1
BRDA:73,0,1,0
BRDA:83,0,0,-
BRDA:83,0,1,-
BRDA:86,0,0,-
BRDA:86,0,1,-
BRDA:103,0,0,-
BRDA:103,0,1,-
BRDA:109,0,0,-
BRDA:109,0,1,-
BRF:14
BRH:3
DA:20,1
DA:21,1
DA:22,1
DA:23,1
DA:24,1
DA:25,1
DA:26,1
DA:27,1
DA:28,1
DA:43,1
DA:60,0
DA:61,0
DA:63,0
DA:64,0
DA:66,0
DA:69,1
DA:71,1
DA:72,1
DA:73,1
DA:74,0
DA:77,1
DA:78,1
DA:79,1
DA:80,1
DA:82,0
DA:83,0
DA:86,0
DA:99,0
DA:100,0
DA:103,0
DA:104,0
DA:105,0
DA:106,0
DA:109,0
DA:111,0
DA:114,1
LH:19
LF:36
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/testing/ActivityRecreatorTestModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/testing/TestActivityRecreator.kt
FN:18,org/oppia/android/app/translation/testing/TestActivityRecreator::<init> ()V
FN:28,org/oppia/android/app/translation/testing/TestActivityRecreator::getRecreateCount ()I
FN:24,org/oppia/android/app/translation/testing/TestActivityRecreator::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNDA:1,org/oppia/android/app/translation/testing/TestActivityRecreator::<init> ()V
FNDA:0,org/oppia/android/app/translation/testing/TestActivityRecreator::getRecreateCount ()I
FNDA:0,org/oppia/android/app/translation/testing/TestActivityRecreator::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNF:3
FNH:1
DA:18,1
DA:19,1
DA:24,0
DA:25,0
DA:28,0
LH:2
LF:5
end_of_record
SF:app/src/main/java/org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory.kt
FN:36,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$createTimer$1::invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;
FN:80,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runPeriodically$1::invoke ()V
FN:53,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::<init> (Landroidx/lifecycle/LiveData;Lkotlin/jvm/functions/Function0;)V
FN:55,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::onChanged (Ljava/lang/Object;)V
FN:19,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::<init> (Lkotlinx/coroutines/CoroutineDispatcher;)V
FN:34,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::createTimer (J)Landroidx/lifecycle/LiveData;
FN:79,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically (Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;)V
FN:74,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically$default (Lorg/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory;Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
FN:50,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runWithDelay (Landroidx/lifecycle/LifecycleOwner;JLkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$createTimer$1::invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runPeriodically$1::invoke ()V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::<init> (Landroidx/lifecycle/LiveData;Lkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::onChanged (Ljava/lang/Object;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::<init> (Lkotlinx/coroutines/CoroutineDispatcher;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::createTimer (J)Landroidx/lifecycle/LiveData;
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically (Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically$default (Lorg/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory;Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runWithDelay (Landroidx/lifecycle/LifecycleOwner;JLkotlin/jvm/functions/Function0;)V
FNF:9
FNH:0
DA:19,0
DA:20,0
DA:24,0
DA:34,0
DA:35,0
DA:36,0
DA:37,0
DA:38,0
DA:39,0
DA:50,0
DA:51,0
DA:52,0
DA:53,0
DA:55,0
DA:56,0
DA:57,0
DA:60,0
DA:74,0
DA:75,0
DA:79,0
DA:80,0
DA:81,0
DA:83,0
DA:84,0
LH:0
LF:24
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponentBuilderInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/viewmodel/ObservableArrayList.kt
FN:7,org/oppia/android/app/viewmodel/ObservableArrayList::<init> ()V
FN:17,org/oppia/android/app/viewmodel/ObservableArrayList::add (ILjava/lang/Object;)V
FN:11,org/oppia/android/app/viewmodel/ObservableArrayList::add (Ljava/lang/Object;)Z
FN:31,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (ILjava/util/Collection;)Z
FN:22,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (Ljava/util/Collection;)Z
FN:69,org/oppia/android/app/viewmodel/ObservableArrayList::addOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FN:48,org/oppia/android/app/viewmodel/ObservableArrayList::clear ()V
FN:8,org/oppia/android/app/viewmodel/ObservableArrayList::getListeners ()Landroidx/databinding/ListChangeRegistry;
FN:79,org/oppia/android/app/viewmodel/ObservableArrayList::notifyAdd (II)V
FN:83,org/oppia/android/app/viewmodel/ObservableArrayList::notifyRemove (II)V
FN:39,org/oppia/android/app/viewmodel/ObservableArrayList::removeAll (Ljava/util/Collection;)Z
FN:75,org/oppia/android/app/viewmodel/ObservableArrayList::removeOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FN:62,org/oppia/android/app/viewmodel/ObservableArrayList::removeRange (II)V
FN:56,org/oppia/android/app/viewmodel/ObservableArrayList::set (ILjava/lang/Object;)Ljava/lang/Object;
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::<init> ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::add (ILjava/lang/Object;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::add (Ljava/lang/Object;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (ILjava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (Ljava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::clear ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::getListeners ()Landroidx/databinding/ListChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::notifyAdd (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::notifyRemove (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeAll (Ljava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeRange (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::set (ILjava/lang/Object;)Ljava/lang/Object;
FNF:14
FNH:0
DA:7,0
DA:8,0
DA:11,0
DA:12,0
DA:13,0
DA:17,0
DA:18,0
DA:19,0
DA:22,0
DA:23,0
DA:24,0
DA:25,0
DA:27,0
DA:31,0
DA:32,0
DA:33,0
DA:35,0
DA:39,0
DA:40,0
DA:41,0
DA:42,0
DA:44,0
DA:48,0
DA:49,0
DA:50,0
DA:51,0
DA:53,0
DA:56,0
DA:57,0
DA:58,0
DA:62,0
DA:63,0
DA:64,0
DA:69,0
DA:70,0
DA:75,0
DA:76,0
DA:79,0
DA:80,0
DA:83,0
DA:84,0
LH:0
LF:41
end_of_record
SF:app/src/main/java/org/oppia/android/app/viewmodel/ObservableViewModel.kt
FN:9,org/oppia/android/app/viewmodel/ObservableViewModel$callbacks$2::invoke ()Landroidx/databinding/PropertyChangeRegistry;
FN:7,org/oppia/android/app/viewmodel/ObservableViewModel::<init> ()V
FN:17,org/oppia/android/app/viewmodel/ObservableViewModel::addOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FN:8,org/oppia/android/app/viewmodel/ObservableViewModel::getCallbacks ()Landroidx/databinding/PropertyChangeRegistry;
FN:22,org/oppia/android/app/viewmodel/ObservableViewModel::notifyChange ()V
FN:27,org/oppia/android/app/viewmodel/ObservableViewModel::notifyPropertyChanged (I)V
FN:13,org/oppia/android/app/viewmodel/ObservableViewModel::removeOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel$callbacks$2::invoke ()Landroidx/databinding/PropertyChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::<init> ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::addOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::getCallbacks ()Landroidx/databinding/PropertyChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::notifyChange ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::notifyPropertyChanged (I)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::removeOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNF:7
FNH:0
DA:7,0
DA:8,0
DA:9,0
DA:13,0
DA:14,0
DA:17,0
DA:18,0
DA:22,0
DA:23,0
DA:27,0
DA:28,0
LH:0
LF:11
end_of_record
SF:app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt
FN:243,org/oppia/android/app/parser/FractionParsingUiErrorTest$Companion::toUiError (Lorg/oppia/android/util/math/FractionParser$FractionParsingError;)Lorg/oppia/android/app/parser/FractionParsingUiError;
FN:288,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication$component$2::invoke ()Lorg/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplicationComponent;
FN:286,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::<init> ()V
FN:298,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::createActivityComponent (Landroidx/appcompat/app/AppCompatActivity;)Lorg/oppia/android/app/activity/ActivityComponent;
FN:286,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getAppLanguageApplicationInjector ()Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FN:301,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getApplicationInjector ()Lorg/oppia/android/app/application/ApplicationInjector;
FN:287,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getComponent ()Lorg/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplicationComponent;
FN:286,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getConsoleLoggerInjector ()Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FN:286,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getDataProvidersInjector ()Lorg/oppia/android/util/data/DataProvidersInjector;
FN:286,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getDispatcherInjector ()Lorg/oppia/android/util/threading/DispatcherInjector;
FN:286,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getLocaleApplicationInjector ()Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FN:286,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getOppiaClockInjector ()Lorg/oppia/android/util/system/OppiaClockInjector;
FN:294,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::inject (Lorg/oppia/android/app/parser/FractionParsingUiErrorTest;)V
FN:207,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_noNumerator_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:196,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_nonDigits_invalidChars_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:229,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_severalDashes_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:218,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_severalSlashes_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:186,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_validRegularFraction_noErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:153,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_ambiguousSpacing_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:143,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_divisionByZero_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:164,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_emptyString_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:175,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_noDenominator_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:132,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_nonDigits_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:121,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_tenDigitNumber_numberTooLong_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:111,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_validMixedNumber_noErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FN:87,org/oppia/android/app/parser/FractionParsingUiErrorTest::<init> ()V
FN:95,org/oppia/android/app/parser/FractionParsingUiErrorTest::getActivityRule ()Landroidx/test/ext/junit/rules/ActivityScenarioRule;
FN:92,org/oppia/android/app/parser/FractionParsingUiErrorTest::getInitializeDefaultLocaleRule ()Lorg/oppia/android/testing/junit/InitializeDefaultLocaleRule;
FN:95,org/oppia/android/app/parser/FractionParsingUiErrorTest::setActivityRule (Landroidx/test/ext/junit/rules/ActivityScenarioRule;)V
FN:104,org/oppia/android/app/parser/FractionParsingUiErrorTest::setUp ()V
FN:238,org/oppia/android/app/parser/FractionParsingUiErrorTest::setUpTestApplicationComponent ()V
FN:206,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_noNumerator_invalidFormat_hasRelevantErrorMessage ()V
FN:195,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_nonDigits_invalidChars_hasRelevantErrorMessage ()V
FN:228,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_severalDashes_invalidFormat_hasRelevantErrorMessage ()V
FN:217,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_severalSlashes_invalidFormat_hasRelevantErrorMessage ()V
FN:185,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_validRegularFraction_noErrorMessage ()V
FN:152,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_ambiguousSpacing_invalidFormat_hasRelevantErrorMessage ()V
FN:142,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_divisionByZero_hasRelevantErrorMessage ()V
FN:163,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_emptyString_invalidFormat_hasRelevantErrorMessage ()V
FN:174,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_noDenominator_invalidFormat_hasRelevantErrorMessage ()V
FN:131,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_nonDigits_invalidFormat_hasRelevantErrorMessage ()V
FN:120,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_tenDigitNumber_numberTooLong_hasRelevantErrorMessage ()V
FN:110,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_validMixedNumber_noErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$Companion::toUiError (Lorg/oppia/android/util/math/FractionParser$FractionParsingError;)Lorg/oppia/android/app/parser/FractionParsingUiError;
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication$component$2::invoke ()Lorg/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplicationComponent;
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::<init> ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::createActivityComponent (Landroidx/appcompat/app/AppCompatActivity;)Lorg/oppia/android/app/activity/ActivityComponent;
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getAppLanguageApplicationInjector ()Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getApplicationInjector ()Lorg/oppia/android/app/application/ApplicationInjector;
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getComponent ()Lorg/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplicationComponent;
FNDA:0,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getConsoleLoggerInjector ()Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getDataProvidersInjector ()Lorg/oppia/android/util/data/DataProvidersInjector;
FNDA:0,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getDispatcherInjector ()Lorg/oppia/android/util/threading/DispatcherInjector;
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getLocaleApplicationInjector ()Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FNDA:0,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::getOppiaClockInjector ()Lorg/oppia/android/util/system/OppiaClockInjector;
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$TestApplication::inject (Lorg/oppia/android/app/parser/FractionParsingUiErrorTest;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_noNumerator_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_nonDigits_invalidChars_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_severalDashes_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_severalSlashes_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testRealTimeError_validRegularFraction_noErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_ambiguousSpacing_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_divisionByZero_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_emptyString_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_noDenominator_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_nonDigits_invalidFormat_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_tenDigitNumber_numberTooLong_hasRelevantErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest$testSubmitTimeError_validMixedNumber_noErrorMessage$1::perform (Lorg/oppia/android/app/testing/activity/TestActivity;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::<init> ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::getActivityRule ()Landroidx/test/ext/junit/rules/ActivityScenarioRule;
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::getInitializeDefaultLocaleRule ()Lorg/oppia/android/testing/junit/InitializeDefaultLocaleRule;
FNDA:0,org/oppia/android/app/parser/FractionParsingUiErrorTest::setActivityRule (Landroidx/test/ext/junit/rules/ActivityScenarioRule;)V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::setUp ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::setUpTestApplicationComponent ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_noNumerator_invalidFormat_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_nonDigits_invalidChars_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_severalDashes_invalidFormat_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_severalSlashes_invalidFormat_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testRealTimeError_validRegularFraction_noErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_ambiguousSpacing_invalidFormat_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_divisionByZero_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_emptyString_invalidFormat_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_noDenominator_invalidFormat_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_nonDigits_invalidFormat_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_tenDigitNumber_numberTooLong_hasRelevantErrorMessage ()V
FNDA:1,org/oppia/android/app/parser/FractionParsingUiErrorTest::testSubmitTimeError_validMixedNumber_noErrorMessage ()V
FNF:43
FNH:39
BRDA:111,0,0,1
BRDA:111,0,1,0
BRDA:121,0,0,1
BRDA:121,0,1,0
BRDA:132,0,0,1
BRDA:132,0,1,0
BRDA:143,0,0,1
BRDA:143,0,1,0
BRDA:153,0,0,1
BRDA:153,0,1,0
BRDA:164,0,0,1
BRDA:164,0,1,0
BRDA:175,0,0,1
BRDA:175,0,1,0
BRDA:186,0,0,1
BRDA:186,0,1,0
BRDA:196,0,0,1
BRDA:196,0,1,0
BRDA:207,0,0,1
BRDA:207,0,1,0
BRDA:218,0,0,1
BRDA:218,0,1,0
BRDA:229,0,0,1
BRDA:229,0,1,0
BRF:24
BRH:12
DA:87,1
DA:90,1
DA:92,1
DA:95,1
DA:96,1
DA:97,1
DA:98,0
DA:104,1
DA:105,1
DA:106,1
DA:110,1
DA:111,1
DA:112,1
DA:113,1
DA:114,1
DA:115,1
DA:116,1
DA:120,1
DA:121,1
DA:122,1
DA:123,1
DA:124,1
DA:125,1
DA:126,1
DA:127,1
DA:131,1
DA:132,1
DA:133,1
DA:134,1
DA:135,1
DA:136,1
DA:137,1
DA:138,1
DA:142,1
DA:143,1
DA:144,1
DA:145,1
DA:146,1
DA:147,1
DA:148,1
DA:152,1
DA:153,1
DA:154,1
DA:155,1
DA:156,1
DA:157,1
DA:158,1
DA:159,1
DA:163,1
DA:164,1
DA:165,1
DA:166,1
DA:167,1
DA:168,1
DA:169,1
DA:170,1
DA:174,1
DA:175,1
DA:176,1
DA:177,1
DA:178,1
DA:179,1
DA:180,1
DA:181,1
DA:185,1
DA:186,1
DA:187,1
DA:188,1
DA:189,1
DA:190,1
DA:191,1
DA:195,1
DA:196,1
DA:197,1
DA:198,1
DA:199,1
DA:200,1
DA:201,1
DA:202,1
DA:206,1
DA:207,1
DA:208,1
DA:209,1
DA:210,1
DA:211,1
DA:212,1
DA:213,1
DA:217,1
DA:218,1
DA:219,1
DA:220,1
DA:221,1
DA:222,1
DA:223,1
DA:224,1
DA:228,1
DA:229,1
DA:230,1
DA:231,1
DA:232,1
DA:233,1
DA:234,1
DA:235,1
DA:238,1
DA:239,1
DA:243,1
DA:286,1
DA:287,1
DA:288,1
DA:289,1
DA:290,1
DA:294,1
DA:295,1
DA:298,1
DA:301,1
LH:114
LF:115
end_of_record
I noticed the same behavior while testing with another file, FakeOppiaClock.kt, which I kept for discussion later. The same behavior was seen with the package-relative labelled StringToRatioParserTest target.
I am not sure if I did the refactoring of package-specific labeling right (I just tried replicating similar target builds). I have kept the code for reference in my fork (though it's messy). I will also try with other packages to see if I can find anything different that can be helpful.
I found that, interestingly, two things:
- Coverage is failing for some groups of tests outside of app module.
- All app module tests that have their own explicit test targets work with coverage.
This is leading me to believe that there may be a problem with the top-level test targets that are defined, by default, for tests with no dedicated BUILD files. I need to dig a bit more to confirm this (& maybe come up with some explanation as to why), but if this is right then the pathway to fixing it is at least fairly straightforward.
Also adding to this (nothing useful but just to confirm the cases and few additional things) there are few test targets in the app module (with top level package labelling) that do pass the coverage but as observed above they too don't contain the relevant coverage data.
Few Example targets:
- //app:src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest
- /app:src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest
- //app:src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest
- //app:src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest
And as mentioned looking at the coverage reports all files that are included in the coverage result do have their own explicit targets specified however I'm uncertain if the opposite holds true. i.e. Not all files that have their explicit targets specified were included in the coverage report.
What I mean by that is, the coverage data includes the files -
SF:app/src/main/java/org/oppia/android/app/activity/route/Route.kt,
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightTarget.kt,
SF:app/src/main/java/org/oppia/android/app/application/ApplicationModule.kt
and all these files have their targets set explicitly.
But also, recently I tried running the test target:
- //app:src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest which has its own explicit target set for the source file (not test target) - utility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt and looking at the report it doesn't include the coverage data for the HtmlParser.kt file.
A similar observation when I tried to convert the top-level labelling to package specific labelling
Coverage Report running bazel coverage //app:src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest --instrumentation_filter=//app/... (HtmlParserTest/coverage.dat) (Lengthy report inside)
SF:app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityIntentFactories.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableAppCompatActivity.kt
FN:19,org/oppia/android/app/activity/InjectableAppCompatActivity::<init> ()V
FN:29,org/oppia/android/app/activity/InjectableAppCompatActivity::attachBaseContext (Landroid/content/Context;)V
FN:48,org/oppia/android/app/activity/InjectableAppCompatActivity::createFragmentComponent (Landroidx/fragment/app/Fragment;)Lorg/oppia/android/app/fragment/FragmentComponent;
FN:92,org/oppia/android/app/activity/InjectableAppCompatActivity::ensureLayoutDirection ()V
FN:26,org/oppia/android/app/activity/InjectableAppCompatActivity::getActivityComponent ()Lorg/oppia/android/app/activity/ActivityComponent;
FN:52,org/oppia/android/app/activity/InjectableAppCompatActivity::getAppLanguageActivityInjector ()Lorg/oppia/android/app/translation/AppLanguageActivityInjector;
FN:38,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;)V
FN:43,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
FN:55,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeActivityComponent (Landroid/content/Context;)V
FN:67,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeLocalization (Landroid/content/Context;)Landroid/content/res/Configuration;
FN:26,org/oppia/android/app/activity/InjectableAppCompatActivity::setActivityComponent (Lorg/oppia/android/app/activity/ActivityComponent;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::<init> ()V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::attachBaseContext (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::createFragmentComponent (Landroidx/fragment/app/Fragment;)Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::ensureLayoutDirection ()V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::getActivityComponent ()Lorg/oppia/android/app/activity/ActivityComponent;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::getAppLanguageActivityInjector ()Lorg/oppia/android/app/translation/AppLanguageActivityInjector;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeActivityComponent (Landroid/content/Context;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeLocalization (Landroid/content/Context;)Landroid/content/res/Configuration;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::setActivityComponent (Lorg/oppia/android/app/activity/ActivityComponent;)V
FNF:11
FNH:9
BRDA:26,0,0,1
BRDA:26,0,1,0
BRDA:29,0,0,0
BRDA:29,0,1,1
BRDA:29,0,2,0
BRDA:29,0,3,1
BRDA:34,0,0,0
BRDA:34,0,1,1
BRDA:76,0,0,0
BRDA:76,0,1,1
BRDA:76,0,2,0
BRDA:76,0,3,1
BRF:12
BRH:6
DA:19,1
DA:20,1
DA:26,1
DA:29,1
DA:30,0
DA:32,1
DA:33,1
DA:34,1
DA:35,1
DA:38,1
DA:39,1
DA:40,1
DA:43,0
DA:44,0
DA:45,0
DA:48,0
DA:49,0
DA:52,1
DA:55,1
DA:56,1
DA:57,1
DA:67,1
DA:68,1
DA:69,1
DA:70,1
DA:71,1
DA:73,1
DA:74,1
DA:76,1
DA:77,1
DA:78,1
DA:92,1
DA:93,1
LH:27
LF:33
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt
FN:13,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::<init> ()V
FN:16,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNDA:1,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::<init> ()V
FNDA:1,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNF:2
FNH:2
DA:13,1
DA:16,1
DA:17,1
LH:3
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.kt
FN:13,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::<init> ()V
FN:16,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNDA:0,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::<init> ()V
FNDA:0,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNF:2
FNH:0
DA:13,0
DA:16,0
DA:17,0
LH:0
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/ActivityRouter.kt
FN:13,org/oppia/android/app/activity/route/ActivityRouter::<init> (Landroidx/appcompat/app/AppCompatActivity;Ljava/util/Map;Lorg/oppia/android/util/logging/ConsoleLogger;)V
FN:20,org/oppia/android/app/activity/route/ActivityRouter::routeToScreen (Lorg/oppia/android/app/model/DestinationScreen;)V
FNDA:0,org/oppia/android/app/activity/route/ActivityRouter::<init> (Landroidx/appcompat/app/AppCompatActivity;Ljava/util/Map;Lorg/oppia/android/util/logging/ConsoleLogger;)V
FNDA:0,org/oppia/android/app/activity/route/ActivityRouter::routeToScreen (Lorg/oppia/android/app/model/DestinationScreen;)V
FNF:2
FNH:0
DA:13,0
DA:14,0
DA:15,0
DA:16,0
DA:20,0
DA:21,0
DA:22,0
DA:23,0
DA:25,0
DA:26,0
DA:28,0
DA:30,0
LH:0
LF:12
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/Route.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/RouteKey.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationInjectorProvider.kt
FN:29,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getAppLanguageApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FN:37,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getConsoleLoggerInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FN:26,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDataProvidersInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/data/DataProvidersInjector;
FN:35,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDispatcherInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/threading/DispatcherInjector;
FN:33,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getLocaleApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FN:31,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getOppiaClockInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/system/OppiaClockInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getAppLanguageApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getConsoleLoggerInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDataProvidersInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/data/DataProvidersInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDispatcherInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/threading/DispatcherInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getLocaleApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getOppiaClockInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/system/OppiaClockInjector;
FNF:6
FNH:5
DA:26,1
DA:29,1
DA:31,0
DA:33,1
DA:35,1
DA:37,1
LH:5
LF:6
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationStartupListenerModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/testing/TestingBuildFlavorModule.kt
FN:11,org/oppia/android/app/application/testing/TestingBuildFlavorModule::<init> ()V
FN:14,org/oppia/android/app/application/testing/TestingBuildFlavorModule::provideTestingBuildFlavor ()Lorg/oppia/android/app/model/BuildFlavor;
FNDA:1,org/oppia/android/app/application/testing/TestingBuildFlavorModule::<init> ()V
FNDA:0,org/oppia/android/app/application/testing/TestingBuildFlavorModule::provideTestingBuildFlavor ()Lorg/oppia/android/app/model/BuildFlavor;
FNF:2
FNH:1
DA:11,1
DA:12,1
DA:14,0
LH:2
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponentBuilderInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::<init> ()V
FN:31,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:22,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::getBottomSheetFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:25,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::onAttach (Landroid/content/Context;)V
FN:22,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::setBottomSheetFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::getBottomSheetFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::setBottomSheetFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:15,0
DA:22,0
DA:25,0
DA:26,0
DA:27,0
DA:28,0
DA:31,0
DA:32,0
LH:0
LF:9
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableDialogFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableDialogFragment::<init> ()V
FN:29,org/oppia/android/app/fragment/InjectableDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:20,org/oppia/android/app/fragment/InjectableDialogFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:23,org/oppia/android/app/fragment/InjectableDialogFragment::onAttach (Landroid/content/Context;)V
FN:20,org/oppia/android/app/fragment/InjectableDialogFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:20,0
DA:23,0
DA:24,0
DA:25,0
DA:26,0
DA:29,0
DA:30,0
LH:0
LF:8
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableFragment::<init> ()V
FN:29,org/oppia/android/app/fragment/InjectableFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:20,org/oppia/android/app/fragment/InjectableFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:23,org/oppia/android/app/fragment/InjectableFragment::onAttach (Landroid/content/Context;)V
FN:20,org/oppia/android/app/fragment/InjectableFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:20,0
DA:23,0
DA:24,0
DA:25,0
DA:26,0
DA:29,0
DA:30,0
LH:0
LF:8
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/IntentFactoryShim.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/IntentFactoryShimModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/ViewBindingShim.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/ViewBindingShimModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightManager.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightNavigationListener.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightShape.kt
FN:6,org/oppia/android/app/spotlight/SpotlightShape$Circle::<init> ()V
FN:9,org/oppia/android/app/spotlight/SpotlightShape$RoundedRectangle::<init> ()V
FNDA:0,org/oppia/android/app/spotlight/SpotlightShape$Circle::<init> ()V
FNDA:0,org/oppia/android/app/spotlight/SpotlightShape$RoundedRectangle::<init> ()V
FNF:2
FNH:0
DA:6,0
DA:9,0
LH:0
LF:2
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightTarget.kt
FN:14,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;)V
FN:14,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
FN:66,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreX ()F
FN:70,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreY ()F
FN:58,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorHeight ()I
FN:44,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorLeft ()F
FN:51,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorTop ()F
FN:62,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorWidth ()I
FN:15,org/oppia/android/app/spotlight/SpotlightTarget::getAnchor ()Landroid/view/View;
FN:30,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreX ()F
FN:32,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreY ()F
FN:26,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorHeight ()I
FN:22,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorLeft ()F
FN:24,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorTop ()F
FN:28,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorWidth ()I
FN:18,org/oppia/android/app/spotlight/SpotlightTarget::getFeature ()Lorg/oppia/android/app/model/Spotlight$FeatureCase;
FN:16,org/oppia/android/app/spotlight/SpotlightTarget::getHint ()Ljava/lang/String;
FN:17,org/oppia/android/app/spotlight/SpotlightTarget::getShape ()Lorg/oppia/android/app/spotlight/SpotlightShape;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;)V
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreX ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreY ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorHeight ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorLeft ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorTop ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorWidth ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchor ()Landroid/view/View;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreX ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreY ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorHeight ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorLeft ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorTop ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorWidth ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getFeature ()Lorg/oppia/android/app/model/Spotlight$FeatureCase;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getHint ()Ljava/lang/String;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getShape ()Lorg/oppia/android/app/spotlight/SpotlightShape;
FNF:18
FNH:0
DA:14,0
DA:15,0
DA:16,0
DA:17,0
DA:18,0
DA:22,0
DA:24,0
DA:26,0
DA:28,0
DA:30,0
DA:32,0
DA:34,0
DA:35,0
DA:36,0
DA:37,0
DA:38,0
DA:39,0
DA:40,0
DA:41,0
DA:44,0
DA:45,0
DA:46,0
DA:47,0
DA:51,0
DA:52,0
DA:53,0
DA:54,0
DA:58,0
DA:62,0
DA:66,0
DA:70,0
DA:72,0
LH:0
LF:32
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandler.kt
FN:30,org/oppia/android/app/translation/ActivityLanguageLocaleHandler$displayLocale$2::invoke ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:18,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;)V
FN:29,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:41,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FN:51,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler$displayLocale$2::invoke ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;)V
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FNDA:0,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNF:5
FNH:4
BRDA:53,0,0,-
BRDA:53,0,1,-
BRF:2
BRH:0
DA:18,1
DA:19,1
DA:20,1
DA:21,1
DA:29,1
DA:30,1
DA:41,1
DA:42,1
DA:51,0
DA:52,0
DA:53,0
LH:8
LF:11
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreator.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorImpl.kt
FN:7,org/oppia/android/app/translation/ActivityRecreatorImpl::<init> ()V
FN:9,org/oppia/android/app/translation/ActivityRecreatorImpl::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNDA:0,org/oppia/android/app/translation/ActivityRecreatorImpl::<init> ()V
FNDA:0,org/oppia/android/app/translation/ActivityRecreatorImpl::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNF:2
FNH:0
DA:7,0
DA:9,0
DA:10,0
LH:0
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorProdModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjectorProvider.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjectorProvider.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageLocaleHandler.kt
FN:20,org/oppia/android/app/translation/AppLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;)V
FN:76,org/oppia/android/app/translation/AppLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:41,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)V
FN:56,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FN:32,org/oppia/android/app/translation/AppLanguageLocaleHandler::isInitialized ()Z
FN:67,org/oppia/android/app/translation/AppLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FN:81,org/oppia/android/app/translation/AppLanguageLocaleHandler::verifyDisplayLocaleIsInitialized ()V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)V
FNDA:0,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::isInitialized ()Z
FNDA:0,org/oppia/android/app/translation/AppLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::verifyDisplayLocaleIsInitialized ()V
FNF:7
FNH:5
BRDA:32,0,0,1
BRDA:32,0,1,1
BRDA:41,0,0,1
BRDA:41,0,1,0
BRDA:41,0,2,0
BRDA:41,0,3,1
BRDA:57,0,0,-
BRDA:57,0,1,-
BRDA:68,0,0,-
BRDA:68,0,1,-
BRDA:70,0,0,-
BRDA:70,0,1,-
BRDA:77,0,0,1
BRDA:77,0,1,0
BRDA:81,0,0,0
BRDA:81,0,1,1
BRF:16
BRH:6
DA:20,1
DA:21,1
DA:22,1
DA:32,1
DA:41,1
DA:42,0
DA:45,1
DA:46,1
DA:56,0
DA:57,0
DA:58,0
DA:67,0
DA:68,0
DA:69,0
DA:70,0
DA:76,1
DA:77,1
DA:81,1
DA:82,0
DA:85,1
LH:11
LF:20
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageWatcherMixin.kt
FN:80,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::<init> (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;Landroidx/lifecycle/LiveData;)V
FN:82,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::onChanged (Lorg/oppia/android/util/data/AsyncResult;)V
FN:20,org/oppia/android/app/translation/AppLanguageWatcherMixin::<init> (Landroidx/appcompat/app/AppCompatActivity;Lorg/oppia/android/domain/translation/TranslationController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/domain/oppialogger/OppiaLogger;Lorg/oppia/android/app/translation/ActivityRecreator;Lorg/oppia/android/domain/profile/ProfileManagementController;Lorg/oppia/android/app/translation/ActivityLanguageLocaleHandler;)V
FN:43,org/oppia/android/app/translation/AppLanguageWatcherMixin::initialize (Z)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::<init> (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;Landroidx/lifecycle/LiveData;)V
FNDA:0,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::onChanged (Lorg/oppia/android/util/data/AsyncResult;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin::<init> (Landroidx/appcompat/app/AppCompatActivity;Lorg/oppia/android/domain/translation/TranslationController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/domain/oppialogger/OppiaLogger;Lorg/oppia/android/app/translation/ActivityRecreator;Lorg/oppia/android/domain/profile/ProfileManagementController;Lorg/oppia/android/app/translation/ActivityLanguageLocaleHandler;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin::initialize (Z)V
FNF:4
FNH:3
BRDA:43,0,0,1
BRDA:43,0,1,0
BRDA:72,0,0,0
BRDA:72,0,1,1
BRDA:73,0,0,1
BRDA:73,0,1,0
BRDA:83,0,0,-
BRDA:83,0,1,-
BRDA:86,0,0,-
BRDA:86,0,1,-
BRDA:103,0,0,-
BRDA:103,0,1,-
BRDA:109,0,0,-
BRDA:109,0,1,-
BRF:14
BRH:3
DA:20,1
DA:21,1
DA:22,1
DA:23,1
DA:24,1
DA:25,1
DA:26,1
DA:27,1
DA:28,1
DA:43,1
DA:60,0
DA:61,0
DA:63,0
DA:64,0
DA:66,0
DA:69,1
DA:71,1
DA:72,1
DA:73,1
DA:74,0
DA:77,1
DA:78,1
DA:79,1
DA:80,1
DA:82,0
DA:83,0
DA:86,0
DA:99,0
DA:100,0
DA:103,0
DA:104,0
DA:105,0
DA:106,0
DA:109,0
DA:111,0
DA:114,1
LH:19
LF:36
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/testing/ActivityRecreatorTestModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/testing/TestActivityRecreator.kt
FN:18,org/oppia/android/app/translation/testing/TestActivityRecreator::<init> ()V
FN:28,org/oppia/android/app/translation/testing/TestActivityRecreator::getRecreateCount ()I
FN:24,org/oppia/android/app/translation/testing/TestActivityRecreator::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNDA:1,org/oppia/android/app/translation/testing/TestActivityRecreator::<init> ()V
FNDA:0,org/oppia/android/app/translation/testing/TestActivityRecreator::getRecreateCount ()I
FNDA:0,org/oppia/android/app/translation/testing/TestActivityRecreator::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNF:3
FNH:1
DA:18,1
DA:19,1
DA:24,0
DA:25,0
DA:28,0
LH:2
LF:5
end_of_record
SF:app/src/main/java/org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory.kt
FN:36,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$createTimer$1::invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;
FN:80,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runPeriodically$1::invoke ()V
FN:53,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::<init> (Landroidx/lifecycle/LiveData;Lkotlin/jvm/functions/Function0;)V
FN:55,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::onChanged (Ljava/lang/Object;)V
FN:19,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::<init> (Lkotlinx/coroutines/CoroutineDispatcher;)V
FN:34,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::createTimer (J)Landroidx/lifecycle/LiveData;
FN:79,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically (Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;)V
FN:74,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically$default (Lorg/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory;Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
FN:50,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runWithDelay (Landroidx/lifecycle/LifecycleOwner;JLkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$createTimer$1::invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runPeriodically$1::invoke ()V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::<init> (Landroidx/lifecycle/LiveData;Lkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::onChanged (Ljava/lang/Object;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::<init> (Lkotlinx/coroutines/CoroutineDispatcher;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::createTimer (J)Landroidx/lifecycle/LiveData;
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically (Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically$default (Lorg/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory;Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runWithDelay (Landroidx/lifecycle/LifecycleOwner;JLkotlin/jvm/functions/Function0;)V
FNF:9
FNH:0
DA:19,0
DA:20,0
DA:24,0
DA:34,0
DA:35,0
DA:36,0
DA:37,0
DA:38,0
DA:39,0
DA:50,0
DA:51,0
DA:52,0
DA:53,0
DA:55,0
DA:56,0
DA:57,0
DA:60,0
DA:74,0
DA:75,0
DA:79,0
DA:80,0
DA:81,0
DA:83,0
DA:84,0
LH:0
LF:24
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponentBuilderInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/viewmodel/ObservableArrayList.kt
FN:7,org/oppia/android/app/viewmodel/ObservableArrayList::<init> ()V
FN:17,org/oppia/android/app/viewmodel/ObservableArrayList::add (ILjava/lang/Object;)V
FN:11,org/oppia/android/app/viewmodel/ObservableArrayList::add (Ljava/lang/Object;)Z
FN:31,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (ILjava/util/Collection;)Z
FN:22,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (Ljava/util/Collection;)Z
FN:69,org/oppia/android/app/viewmodel/ObservableArrayList::addOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FN:48,org/oppia/android/app/viewmodel/ObservableArrayList::clear ()V
FN:8,org/oppia/android/app/viewmodel/ObservableArrayList::getListeners ()Landroidx/databinding/ListChangeRegistry;
FN:79,org/oppia/android/app/viewmodel/ObservableArrayList::notifyAdd (II)V
FN:83,org/oppia/android/app/viewmodel/ObservableArrayList::notifyRemove (II)V
FN:39,org/oppia/android/app/viewmodel/ObservableArrayList::removeAll (Ljava/util/Collection;)Z
FN:75,org/oppia/android/app/viewmodel/ObservableArrayList::removeOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FN:62,org/oppia/android/app/viewmodel/ObservableArrayList::removeRange (II)V
FN:56,org/oppia/android/app/viewmodel/ObservableArrayList::set (ILjava/lang/Object;)Ljava/lang/Object;
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::<init> ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::add (ILjava/lang/Object;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::add (Ljava/lang/Object;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (ILjava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (Ljava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::clear ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::getListeners ()Landroidx/databinding/ListChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::notifyAdd (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::notifyRemove (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeAll (Ljava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeRange (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::set (ILjava/lang/Object;)Ljava/lang/Object;
FNF:14
FNH:0
DA:7,0
DA:8,0
DA:11,0
DA:12,0
DA:13,0
DA:17,0
DA:18,0
DA:19,0
DA:22,0
DA:23,0
DA:24,0
DA:25,0
DA:27,0
DA:31,0
DA:32,0
DA:33,0
DA:35,0
DA:39,0
DA:40,0
DA:41,0
DA:42,0
DA:44,0
DA:48,0
DA:49,0
DA:50,0
DA:51,0
DA:53,0
DA:56,0
DA:57,0
DA:58,0
DA:62,0
DA:63,0
DA:64,0
DA:69,0
DA:70,0
DA:75,0
DA:76,0
DA:79,0
DA:80,0
DA:83,0
DA:84,0
LH:0
LF:41
end_of_record
SF:app/src/main/java/org/oppia/android/app/viewmodel/ObservableViewModel.kt
FN:9,org/oppia/android/app/viewmodel/ObservableViewModel$callbacks$2::invoke ()Landroidx/databinding/PropertyChangeRegistry;
FN:7,org/oppia/android/app/viewmodel/ObservableViewModel::<init> ()V
FN:17,org/oppia/android/app/viewmodel/ObservableViewModel::addOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FN:8,org/oppia/android/app/viewmodel/ObservableViewModel::getCallbacks ()Landroidx/databinding/PropertyChangeRegistry;
FN:22,org/oppia/android/app/viewmodel/ObservableViewModel::notifyChange ()V
FN:27,org/oppia/android/app/viewmodel/ObservableViewModel::notifyPropertyChanged (I)V
FN:13,org/oppia/android/app/viewmodel/ObservableViewModel::removeOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel$callbacks$2::invoke ()Landroidx/databinding/PropertyChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::<init> ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::addOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::getCallbacks ()Landroidx/databinding/PropertyChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::notifyChange ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::notifyPropertyChanged (I)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::removeOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNF:7
FNH:0
DA:7,0
DA:8,0
DA:9,0
DA:13,0
DA:14,0
DA:17,0
DA:18,0
DA:22,0
DA:23,0
DA:27,0
DA:28,0
LH:0
LF:11
end_of_record
@BenHenning Uhmm.. apologies Ben I couldn't remember to bring this up in the meeting. So, you mentioned that the coverage execution fails in cases where the test files don't have their own explicit targets (not the source files). I tried acquiring coverage reports for the test target - SplashActivityTest which has its own explicit target set (for the test file - SplashActivityTest but not for its source).
bazel coverage //app/src/sharedTest/java/org/oppia/android/app/splash:SplashActivityTest --instrumentation_filter=//app/...
The coverage execution does pass when having the test modularized, but as mentioned the generated coverage reports doesn't seem to include coverage data for the related file.
Coverage Report (lengthy report inside)
cat /home/rddev/.cache/bazel/_bazel_rddev/81159660e9f0a21d3064c6805850402d/execroot/__main__/bazel-out/k8-fastbuild/testlogs/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest/coverage.dat
SF:app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityIntentFactories.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableAppCompatActivity.kt
FN:19,org/oppia/android/app/activity/InjectableAppCompatActivity::<init> ()V
FN:29,org/oppia/android/app/activity/InjectableAppCompatActivity::attachBaseContext (Landroid/content/Context;)V
FN:48,org/oppia/android/app/activity/InjectableAppCompatActivity::createFragmentComponent (Landroidx/fragment/app/Fragment;)Lorg/oppia/android/app/fragment/FragmentComponent;
FN:92,org/oppia/android/app/activity/InjectableAppCompatActivity::ensureLayoutDirection ()V
FN:26,org/oppia/android/app/activity/InjectableAppCompatActivity::getActivityComponent ()Lorg/oppia/android/app/activity/ActivityComponent;
FN:52,org/oppia/android/app/activity/InjectableAppCompatActivity::getAppLanguageActivityInjector ()Lorg/oppia/android/app/translation/AppLanguageActivityInjector;
FN:38,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;)V
FN:43,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
FN:55,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeActivityComponent (Landroid/content/Context;)V
FN:67,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeLocalization (Landroid/content/Context;)Landroid/content/res/Configuration;
FN:26,org/oppia/android/app/activity/InjectableAppCompatActivity::setActivityComponent (Lorg/oppia/android/app/activity/ActivityComponent;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::<init> ()V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::attachBaseContext (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::createFragmentComponent (Landroidx/fragment/app/Fragment;)Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::ensureLayoutDirection ()V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::getActivityComponent ()Lorg/oppia/android/app/activity/ActivityComponent;
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::getAppLanguageActivityInjector ()Lorg/oppia/android/app/translation/AppLanguageActivityInjector;
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeActivityComponent (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeLocalization (Landroid/content/Context;)Landroid/content/res/Configuration;
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::setActivityComponent (Lorg/oppia/android/app/activity/ActivityComponent;)V
FNF:11
FNH:0
DA:19,0
DA:20,0
DA:26,0
DA:29,0
DA:30,0
DA:32,0
DA:33,0
DA:34,0
DA:35,0
DA:38,0
DA:39,0
DA:40,0
DA:43,0
DA:44,0
DA:45,0
DA:48,0
DA:49,0
DA:52,0
DA:55,0
DA:56,0
DA:57,0
DA:67,0
DA:68,0
DA:69,0
DA:70,0
DA:71,0
DA:73,0
DA:74,0
DA:76,0
DA:77,0
DA:78,0
DA:92,0
DA:93,0
LH:0
LF:33
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt
FN:13,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::<init> ()V
FN:16,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNDA:0,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::<init> ()V
FNDA:0,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNF:2
FNH:0
DA:13,0
DA:16,0
DA:17,0
LH:0
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.kt
FN:13,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::<init> ()V
FN:16,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNDA:0,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::<init> ()V
FNDA:0,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNF:2
FNH:0
DA:13,0
DA:16,0
DA:17,0
LH:0
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/ActivityRouter.kt
FN:13,org/oppia/android/app/activity/route/ActivityRouter::<init> (Landroidx/appcompat/app/AppCompatActivity;Ljava/util/Map;Lorg/oppia/android/util/logging/ConsoleLogger;)V
FN:20,org/oppia/android/app/activity/route/ActivityRouter::routeToScreen (Lorg/oppia/android/app/model/DestinationScreen;)V
FNDA:0,org/oppia/android/app/activity/route/ActivityRouter::<init> (Landroidx/appcompat/app/AppCompatActivity;Ljava/util/Map;Lorg/oppia/android/util/logging/ConsoleLogger;)V
FNDA:0,org/oppia/android/app/activity/route/ActivityRouter::routeToScreen (Lorg/oppia/android/app/model/DestinationScreen;)V
FNF:2
FNH:0
DA:13,0
DA:14,0
DA:15,0
DA:16,0
DA:20,0
DA:21,0
DA:22,0
DA:23,0
DA:25,0
DA:26,0
DA:28,0
DA:30,0
LH:0
LF:12
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/Route.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/RouteKey.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationInjectorProvider.kt
FN:29,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getAppLanguageApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FN:37,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getConsoleLoggerInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FN:26,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDataProvidersInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/data/DataProvidersInjector;
FN:35,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDispatcherInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/threading/DispatcherInjector;
FN:33,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getLocaleApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FN:31,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getOppiaClockInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/system/OppiaClockInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getAppLanguageApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getConsoleLoggerInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDataProvidersInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/data/DataProvidersInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDispatcherInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/threading/DispatcherInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getLocaleApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getOppiaClockInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/system/OppiaClockInjector;
FNF:6
FNH:1
DA:26,1
DA:29,0
DA:31,0
DA:33,0
DA:35,0
DA:37,0
LH:1
LF:6
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationStartupListenerModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponentBuilderInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::<init> ()V
FN:31,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:22,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::getBottomSheetFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:25,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::onAttach (Landroid/content/Context;)V
FN:22,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::setBottomSheetFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::getBottomSheetFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::setBottomSheetFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:15,0
DA:22,0
DA:25,0
DA:26,0
DA:27,0
DA:28,0
DA:31,0
DA:32,0
LH:0
LF:9
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableDialogFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableDialogFragment::<init> ()V
FN:29,org/oppia/android/app/fragment/InjectableDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:20,org/oppia/android/app/fragment/InjectableDialogFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:23,org/oppia/android/app/fragment/InjectableDialogFragment::onAttach (Landroid/content/Context;)V
FN:20,org/oppia/android/app/fragment/InjectableDialogFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:1,org/oppia/android/app/fragment/InjectableDialogFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:1,org/oppia/android/app/fragment/InjectableDialogFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:1,org/oppia/android/app/fragment/InjectableDialogFragment::onAttach (Landroid/content/Context;)V
FNDA:1,org/oppia/android/app/fragment/InjectableDialogFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:4
BRDA:20,0,0,1
BRDA:20,0,1,0
BRF:2
BRH:1
DA:14,1
DA:20,1
DA:23,1
DA:24,1
DA:25,1
DA:26,1
DA:29,0
DA:30,0
LH:6
LF:8
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableFragment::<init> ()V
FN:29,org/oppia/android/app/fragment/InjectableFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:20,org/oppia/android/app/fragment/InjectableFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:23,org/oppia/android/app/fragment/InjectableFragment::onAttach (Landroid/content/Context;)V
FN:20,org/oppia/android/app/fragment/InjectableFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:20,0
DA:23,0
DA:24,0
DA:25,0
DA:26,0
DA:29,0
DA:30,0
LH:0
LF:8
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/IntentFactoryShim.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/IntentFactoryShimModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/ViewBindingShim.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/ViewBindingShimModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightManager.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightNavigationListener.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightShape.kt
FN:6,org/oppia/android/app/spotlight/SpotlightShape$Circle::<init> ()V
FN:9,org/oppia/android/app/spotlight/SpotlightShape$RoundedRectangle::<init> ()V
FNDA:0,org/oppia/android/app/spotlight/SpotlightShape$Circle::<init> ()V
FNDA:0,org/oppia/android/app/spotlight/SpotlightShape$RoundedRectangle::<init> ()V
FNF:2
FNH:0
DA:6,0
DA:9,0
LH:0
LF:2
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightTarget.kt
FN:14,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;)V
FN:14,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
FN:66,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreX ()F
FN:70,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreY ()F
FN:58,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorHeight ()I
FN:44,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorLeft ()F
FN:51,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorTop ()F
FN:62,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorWidth ()I
FN:15,org/oppia/android/app/spotlight/SpotlightTarget::getAnchor ()Landroid/view/View;
FN:30,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreX ()F
FN:32,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreY ()F
FN:26,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorHeight ()I
FN:22,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorLeft ()F
FN:24,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorTop ()F
FN:28,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorWidth ()I
FN:18,org/oppia/android/app/spotlight/SpotlightTarget::getFeature ()Lorg/oppia/android/app/model/Spotlight$FeatureCase;
FN:16,org/oppia/android/app/spotlight/SpotlightTarget::getHint ()Ljava/lang/String;
FN:17,org/oppia/android/app/spotlight/SpotlightTarget::getShape ()Lorg/oppia/android/app/spotlight/SpotlightShape;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;)V
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreX ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreY ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorHeight ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorLeft ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorTop ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorWidth ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchor ()Landroid/view/View;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreX ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreY ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorHeight ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorLeft ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorTop ()F
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorWidth ()I
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getFeature ()Lorg/oppia/android/app/model/Spotlight$FeatureCase;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getHint ()Ljava/lang/String;
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::getShape ()Lorg/oppia/android/app/spotlight/SpotlightShape;
FNF:18
FNH:0
DA:14,0
DA:15,0
DA:16,0
DA:17,0
DA:18,0
DA:22,0
DA:24,0
DA:26,0
DA:28,0
DA:30,0
DA:32,0
DA:34,0
DA:35,0
DA:36,0
DA:37,0
DA:38,0
DA:39,0
DA:40,0
DA:41,0
DA:44,0
DA:45,0
DA:46,0
DA:47,0
DA:51,0
DA:52,0
DA:53,0
DA:54,0
DA:58,0
DA:62,0
DA:66,0
DA:70,0
DA:72,0
LH:0
LF:32
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandler.kt
FN:30,org/oppia/android/app/translation/ActivityLanguageLocaleHandler$displayLocale$2::invoke ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:18,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;)V
FN:29,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:41,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FN:51,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNDA:0,org/oppia/android/app/translation/ActivityLanguageLocaleHandler$displayLocale$2::invoke ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:0,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;)V
FNDA:0,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:0,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FNDA:0,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNF:5
FNH:0
DA:18,0
DA:19,0
DA:20,0
DA:21,0
DA:29,0
DA:30,0
DA:41,0
DA:42,0
DA:51,0
DA:52,0
DA:53,0
LH:0
LF:11
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreator.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorImpl.kt
FN:7,org/oppia/android/app/translation/ActivityRecreatorImpl::<init> ()V
FN:9,org/oppia/android/app/translation/ActivityRecreatorImpl::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNDA:0,org/oppia/android/app/translation/ActivityRecreatorImpl::<init> ()V
FNDA:0,org/oppia/android/app/translation/ActivityRecreatorImpl::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNF:2
FNH:0
DA:7,0
DA:9,0
DA:10,0
LH:0
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorProdModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjectorProvider.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjectorProvider.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageLocaleHandler.kt
FN:20,org/oppia/android/app/translation/AppLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;)V
FN:76,org/oppia/android/app/translation/AppLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:41,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)V
FN:56,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FN:32,org/oppia/android/app/translation/AppLanguageLocaleHandler::isInitialized ()Z
FN:67,org/oppia/android/app/translation/AppLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FN:81,org/oppia/android/app/translation/AppLanguageLocaleHandler::verifyDisplayLocaleIsInitialized ()V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)V
FNDA:0,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::isInitialized ()Z
FNDA:0,org/oppia/android/app/translation/AppLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::verifyDisplayLocaleIsInitialized ()V
FNF:7
FNH:5
BRDA:32,0,0,1
BRDA:32,0,1,1
BRDA:41,0,0,1
BRDA:41,0,1,0
BRDA:41,0,2,0
BRDA:41,0,3,1
BRDA:57,0,0,-
BRDA:57,0,1,-
BRDA:68,0,0,-
BRDA:68,0,1,-
BRDA:70,0,0,-
BRDA:70,0,1,-
BRDA:77,0,0,1
BRDA:77,0,1,0
BRDA:81,0,0,0
BRDA:81,0,1,1
BRF:16
BRH:6
DA:20,1
DA:21,1
DA:22,1
DA:32,1
DA:41,1
DA:42,0
DA:45,1
DA:46,1
DA:56,0
DA:57,0
DA:58,0
DA:67,0
DA:68,0
DA:69,0
DA:70,0
DA:76,1
DA:77,1
DA:81,1
DA:82,0
DA:85,1
LH:11
LF:20
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageWatcherMixin.kt
FN:80,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::<init> (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;Landroidx/lifecycle/LiveData;)V
FN:82,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::onChanged (Lorg/oppia/android/util/data/AsyncResult;)V
FN:20,org/oppia/android/app/translation/AppLanguageWatcherMixin::<init> (Landroidx/appcompat/app/AppCompatActivity;Lorg/oppia/android/domain/translation/TranslationController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/domain/oppialogger/OppiaLogger;Lorg/oppia/android/app/translation/ActivityRecreator;Lorg/oppia/android/domain/profile/ProfileManagementController;Lorg/oppia/android/app/translation/ActivityLanguageLocaleHandler;)V
FN:43,org/oppia/android/app/translation/AppLanguageWatcherMixin::initialize (Z)V
FNDA:0,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::<init> (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;Landroidx/lifecycle/LiveData;)V
FNDA:0,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::onChanged (Lorg/oppia/android/util/data/AsyncResult;)V
FNDA:0,org/oppia/android/app/translation/AppLanguageWatcherMixin::<init> (Landroidx/appcompat/app/AppCompatActivity;Lorg/oppia/android/domain/translation/TranslationController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/domain/oppialogger/OppiaLogger;Lorg/oppia/android/app/translation/ActivityRecreator;Lorg/oppia/android/domain/profile/ProfileManagementController;Lorg/oppia/android/app/translation/ActivityLanguageLocaleHandler;)V
FNDA:0,org/oppia/android/app/translation/AppLanguageWatcherMixin::initialize (Z)V
FNF:4
FNH:0
DA:20,0
DA:21,0
DA:22,0
DA:23,0
DA:24,0
DA:25,0
DA:26,0
DA:27,0
DA:28,0
DA:43,0
DA:60,0
DA:61,0
DA:63,0
DA:64,0
DA:66,0
DA:69,0
DA:71,0
DA:72,0
DA:73,0
DA:74,0
DA:77,0
DA:78,0
DA:79,0
DA:80,0
DA:82,0
DA:83,0
DA:86,0
DA:99,0
DA:100,0
DA:103,0
DA:104,0
DA:105,0
DA:106,0
DA:109,0
DA:111,0
DA:114,0
LH:0
LF:36
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/testing/ActivityRecreatorTestModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/testing/TestActivityRecreator.kt
FN:18,org/oppia/android/app/translation/testing/TestActivityRecreator::<init> ()V
FN:28,org/oppia/android/app/translation/testing/TestActivityRecreator::getRecreateCount ()I
FN:24,org/oppia/android/app/translation/testing/TestActivityRecreator::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNDA:0,org/oppia/android/app/translation/testing/TestActivityRecreator::<init> ()V
FNDA:0,org/oppia/android/app/translation/testing/TestActivityRecreator::getRecreateCount ()I
FNDA:0,org/oppia/android/app/translation/testing/TestActivityRecreator::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNF:3
FNH:0
DA:18,0
DA:19,0
DA:24,0
DA:25,0
DA:28,0
LH:0
LF:5
end_of_record
SF:app/src/main/java/org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory.kt
FN:36,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$createTimer$1::invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;
FN:80,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runPeriodically$1::invoke ()V
FN:53,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::<init> (Landroidx/lifecycle/LiveData;Lkotlin/jvm/functions/Function0;)V
FN:55,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::onChanged (Ljava/lang/Object;)V
FN:19,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::<init> (Lkotlinx/coroutines/CoroutineDispatcher;)V
FN:34,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::createTimer (J)Landroidx/lifecycle/LiveData;
FN:79,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically (Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;)V
FN:74,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically$default (Lorg/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory;Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
FN:50,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runWithDelay (Landroidx/lifecycle/LifecycleOwner;JLkotlin/jvm/functions/Function0;)V
FNDA:1,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$createTimer$1::invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runPeriodically$1::invoke ()V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::<init> (Landroidx/lifecycle/LiveData;Lkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::onChanged (Ljava/lang/Object;)V
FNDA:1,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::<init> (Lkotlinx/coroutines/CoroutineDispatcher;)V
FNDA:1,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::createTimer (J)Landroidx/lifecycle/LiveData;
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically (Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically$default (Lorg/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory;Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runWithDelay (Landroidx/lifecycle/LifecycleOwner;JLkotlin/jvm/functions/Function0;)V
FNF:9
FNH:3
DA:19,1
DA:20,1
DA:24,1
DA:34,1
DA:35,1
DA:36,1
DA:37,1
DA:38,1
DA:39,1
DA:50,0
DA:51,0
DA:52,0
DA:53,0
DA:55,0
DA:56,0
DA:57,0
DA:60,0
DA:74,0
DA:75,0
DA:79,0
DA:80,0
DA:81,0
DA:83,0
DA:84,0
LH:9
LF:24
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponentBuilderInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/viewmodel/ObservableArrayList.kt
FN:7,org/oppia/android/app/viewmodel/ObservableArrayList::<init> ()V
FN:17,org/oppia/android/app/viewmodel/ObservableArrayList::add (ILjava/lang/Object;)V
FN:11,org/oppia/android/app/viewmodel/ObservableArrayList::add (Ljava/lang/Object;)Z
FN:31,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (ILjava/util/Collection;)Z
FN:22,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (Ljava/util/Collection;)Z
FN:69,org/oppia/android/app/viewmodel/ObservableArrayList::addOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FN:48,org/oppia/android/app/viewmodel/ObservableArrayList::clear ()V
FN:8,org/oppia/android/app/viewmodel/ObservableArrayList::getListeners ()Landroidx/databinding/ListChangeRegistry;
FN:79,org/oppia/android/app/viewmodel/ObservableArrayList::notifyAdd (II)V
FN:83,org/oppia/android/app/viewmodel/ObservableArrayList::notifyRemove (II)V
FN:39,org/oppia/android/app/viewmodel/ObservableArrayList::removeAll (Ljava/util/Collection;)Z
FN:75,org/oppia/android/app/viewmodel/ObservableArrayList::removeOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FN:62,org/oppia/android/app/viewmodel/ObservableArrayList::removeRange (II)V
FN:56,org/oppia/android/app/viewmodel/ObservableArrayList::set (ILjava/lang/Object;)Ljava/lang/Object;
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::<init> ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::add (ILjava/lang/Object;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::add (Ljava/lang/Object;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (ILjava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (Ljava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::clear ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::getListeners ()Landroidx/databinding/ListChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::notifyAdd (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::notifyRemove (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeAll (Ljava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeRange (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::set (ILjava/lang/Object;)Ljava/lang/Object;
FNF:14
FNH:0
DA:7,0
DA:8,0
DA:11,0
DA:12,0
DA:13,0
DA:17,0
DA:18,0
DA:19,0
DA:22,0
DA:23,0
DA:24,0
DA:25,0
DA:27,0
DA:31,0
DA:32,0
DA:33,0
DA:35,0
DA:39,0
DA:40,0
DA:41,0
DA:42,0
DA:44,0
DA:48,0
DA:49,0
DA:50,0
DA:51,0
DA:53,0
DA:56,0
DA:57,0
DA:58,0
DA:62,0
DA:63,0
DA:64,0
DA:69,0
DA:70,0
DA:75,0
DA:76,0
DA:79,0
DA:80,0
DA:83,0
DA:84,0
LH:0
LF:41
end_of_record
SF:app/src/main/java/org/oppia/android/app/viewmodel/ObservableViewModel.kt
FN:9,org/oppia/android/app/viewmodel/ObservableViewModel$callbacks$2::invoke ()Landroidx/databinding/PropertyChangeRegistry;
FN:7,org/oppia/android/app/viewmodel/ObservableViewModel::<init> ()V
FN:17,org/oppia/android/app/viewmodel/ObservableViewModel::addOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FN:8,org/oppia/android/app/viewmodel/ObservableViewModel::getCallbacks ()Landroidx/databinding/PropertyChangeRegistry;
FN:22,org/oppia/android/app/viewmodel/ObservableViewModel::notifyChange ()V
FN:27,org/oppia/android/app/viewmodel/ObservableViewModel::notifyPropertyChanged (I)V
FN:13,org/oppia/android/app/viewmodel/ObservableViewModel::removeOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel$callbacks$2::invoke ()Landroidx/databinding/PropertyChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::<init> ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::addOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::getCallbacks ()Landroidx/databinding/PropertyChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::notifyChange ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::notifyPropertyChanged (I)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::removeOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNF:7
FNH:0
DA:7,0
DA:8,0
DA:9,0
DA:13,0
DA:14,0
DA:17,0
DA:18,0
DA:22,0
DA:23,0
DA:27,0
DA:28,0
LH:0
LF:11
end_of_record
And there were doubts if that could be due to having the genrule - I think that's the case. Just wanted to provide an example of confirming the scenerio.
The files in the app/src/main/java/org/oppia/android/app/spotlight package has the following files
- SpotlightFragment
- SpotlightManager
- SpotlightNavigationListener
- SpotlightShape
- SpotlightTarget
app/src/main/java/org/oppia/android/app/spotlight/BUILD.bazel
"""
Constructs for setting up spotlights.
"""
load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library")
genrule(
name = "update_SpotlightFragment",
srcs = ["SpotlightFragment.kt"],
outs = ["SpotlightFragment_updated.kt"],
cmd = """
cat $(SRCS) |
sed 's/import org.oppia.android.R/import org.oppia.android.app.R/g' |
sed 's/import org.oppia.android.databinding./import org.oppia.android.app.databinding.databinding./g' > $(OUTS)
""",
visibility = ["//app:app_visibility"],
)
kt_android_library(
name = "spotlight",
srcs = [
"SpotlightManager.kt",
"SpotlightNavigationListener.kt",
"SpotlightShape.kt",
"SpotlightTarget.kt",
],
visibility = ["//app:app_visibility"],
deps = ["//model/src/main/proto:spotlight_java_proto_lite"],
)
It only has tests for SpotlightFragment -> SpotlightFragmentTest (but it doesn't have explicit test target declared) and running the command
bazel coverage //app:src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest --instrumentation_filter=//app/..
does produce pass result but most importantly it includes / provides coverage data for the files (under kt_android_library)
- SpotlightTarget
- SpotlightShape
- SpotlightNavigationListener
- SpotlightManager
and ignores the report for the file (under genrule)
- SpotlightFragment (as mentioned with name = "update_SpotlightFragment")
Coverage report with spotlight files included (lengthy report)
cat /home/rddev/.cache/bazel/_bazel_rddev/81159660e9f0a21d3064c6805850402d/execroot/__main__/bazel-out/k8-fastbuild/testlogs/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest/coverage.dat
SF:app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityIntentFactories.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/ActivityScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableAppCompatActivity.kt
FN:19,org/oppia/android/app/activity/InjectableAppCompatActivity::<init> ()V
FN:29,org/oppia/android/app/activity/InjectableAppCompatActivity::attachBaseContext (Landroid/content/Context;)V
FN:48,org/oppia/android/app/activity/InjectableAppCompatActivity::createFragmentComponent (Landroidx/fragment/app/Fragment;)Lorg/oppia/android/app/fragment/FragmentComponent;
FN:92,org/oppia/android/app/activity/InjectableAppCompatActivity::ensureLayoutDirection ()V
FN:26,org/oppia/android/app/activity/InjectableAppCompatActivity::getActivityComponent ()Lorg/oppia/android/app/activity/ActivityComponent;
FN:52,org/oppia/android/app/activity/InjectableAppCompatActivity::getAppLanguageActivityInjector ()Lorg/oppia/android/app/translation/AppLanguageActivityInjector;
FN:38,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;)V
FN:43,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
FN:55,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeActivityComponent (Landroid/content/Context;)V
FN:67,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeLocalization (Landroid/content/Context;)Landroid/content/res/Configuration;
FN:26,org/oppia/android/app/activity/InjectableAppCompatActivity::setActivityComponent (Lorg/oppia/android/app/activity/ActivityComponent;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::<init> ()V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::attachBaseContext (Landroid/content/Context;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::createFragmentComponent (Landroidx/fragment/app/Fragment;)Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::ensureLayoutDirection ()V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::getActivityComponent ()Lorg/oppia/android/app/activity/ActivityComponent;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::getAppLanguageActivityInjector ()Lorg/oppia/android/app/translation/AppLanguageActivityInjector;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;)V
FNDA:0,org/oppia/android/app/activity/InjectableAppCompatActivity::onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeActivityComponent (Landroid/content/Context;)V
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::onInitializeLocalization (Landroid/content/Context;)Landroid/content/res/Configuration;
FNDA:1,org/oppia/android/app/activity/InjectableAppCompatActivity::setActivityComponent (Lorg/oppia/android/app/activity/ActivityComponent;)V
FNF:11
FNH:10
BRDA:26,0,0,1
BRDA:26,0,1,0
BRDA:29,0,0,0
BRDA:29,0,1,1
BRDA:29,0,2,0
BRDA:29,0,3,1
BRDA:34,0,0,0
BRDA:34,0,1,1
BRDA:76,0,0,0
BRDA:76,0,1,1
BRDA:76,0,2,0
BRDA:76,0,3,1
BRF:12
BRH:6
DA:19,1
DA:20,1
DA:26,1
DA:29,1
DA:30,0
DA:32,1
DA:33,1
DA:34,1
DA:35,1
DA:38,1
DA:39,1
DA:40,1
DA:43,0
DA:44,0
DA:45,0
DA:48,1
DA:49,1
DA:52,1
DA:55,1
DA:56,1
DA:57,1
DA:67,1
DA:68,1
DA:69,1
DA:70,1
DA:71,1
DA:73,1
DA:74,1
DA:76,1
DA:77,1
DA:78,1
DA:92,1
DA:93,1
LH:29
LF:33
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt
FN:13,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::<init> ()V
FN:16,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNDA:1,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::<init> ()V
FNDA:1,org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNF:2
FNH:2
DA:13,1
DA:16,1
DA:17,1
LH:3
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.kt
FN:13,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::<init> ()V
FN:16,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNDA:0,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::<init> ()V
FNDA:0,org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity::initializeMixin (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;)V
FNF:2
FNH:0
DA:13,0
DA:16,0
DA:17,0
LH:0
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/ActivityRouter.kt
FN:13,org/oppia/android/app/activity/route/ActivityRouter::<init> (Landroidx/appcompat/app/AppCompatActivity;Ljava/util/Map;Lorg/oppia/android/util/logging/ConsoleLogger;)V
FN:20,org/oppia/android/app/activity/route/ActivityRouter::routeToScreen (Lorg/oppia/android/app/model/DestinationScreen;)V
FNDA:1,org/oppia/android/app/activity/route/ActivityRouter::<init> (Landroidx/appcompat/app/AppCompatActivity;Ljava/util/Map;Lorg/oppia/android/util/logging/ConsoleLogger;)V
FNDA:0,org/oppia/android/app/activity/route/ActivityRouter::routeToScreen (Lorg/oppia/android/app/model/DestinationScreen;)V
FNF:2
FNH:1
BRDA:20,0,0,-
BRDA:20,0,1,-
BRDA:25,0,0,-
BRDA:25,0,1,-
BRF:4
BRH:0
DA:13,1
DA:14,1
DA:15,1
DA:16,1
DA:20,0
DA:21,0
DA:22,0
DA:23,0
DA:25,0
DA:26,0
DA:28,0
DA:30,0
LH:4
LF:12
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/Route.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/activity/route/RouteKey.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationInjectorProvider.kt
FN:29,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getAppLanguageApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FN:37,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getConsoleLoggerInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FN:26,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDataProvidersInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/data/DataProvidersInjector;
FN:35,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDispatcherInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/threading/DispatcherInjector;
FN:33,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getLocaleApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FN:31,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getOppiaClockInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/system/OppiaClockInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getAppLanguageApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/app/translation/AppLanguageApplicationInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getConsoleLoggerInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/logging/ConsoleLoggerInjector;
FNDA:1,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDataProvidersInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/data/DataProvidersInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getDispatcherInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/threading/DispatcherInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getLocaleApplicationInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/domain/locale/LocaleApplicationInjector;
FNDA:0,org/oppia/android/app/application/ApplicationInjectorProvider$DefaultImpls::getOppiaClockInjector (Lorg/oppia/android/app/application/ApplicationInjectorProvider;)Lorg/oppia/android/util/system/OppiaClockInjector;
FNF:6
FNH:1
DA:26,1
DA:29,0
DA:31,0
DA:33,0
DA:35,0
DA:37,0
LH:1
LF:6
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/ApplicationStartupListenerModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/application/testing/TestingBuildFlavorModule.kt
FN:11,org/oppia/android/app/application/testing/TestingBuildFlavorModule::<init> ()V
FN:14,org/oppia/android/app/application/testing/TestingBuildFlavorModule::provideTestingBuildFlavor ()Lorg/oppia/android/app/model/BuildFlavor;
FNDA:1,org/oppia/android/app/application/testing/TestingBuildFlavorModule::<init> ()V
FNDA:0,org/oppia/android/app/application/testing/TestingBuildFlavorModule::provideTestingBuildFlavor ()Lorg/oppia/android/app/model/BuildFlavor;
FNF:2
FNH:1
DA:11,1
DA:12,1
DA:14,0
LH:2
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponentBuilderInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/FragmentScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::<init> ()V
FN:31,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:22,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::getBottomSheetFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:25,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::onAttach (Landroid/content/Context;)V
FN:22,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::setBottomSheetFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::getBottomSheetFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment::setBottomSheetFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:15,0
DA:22,0
DA:25,0
DA:26,0
DA:27,0
DA:28,0
DA:31,0
DA:32,0
LH:0
LF:9
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableDialogFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableDialogFragment::<init> ()V
FN:29,org/oppia/android/app/fragment/InjectableDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:20,org/oppia/android/app/fragment/InjectableDialogFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:23,org/oppia/android/app/fragment/InjectableDialogFragment::onAttach (Landroid/content/Context;)V
FN:20,org/oppia/android/app/fragment/InjectableDialogFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::onAttach (Landroid/content/Context;)V
FNDA:0,org/oppia/android/app/fragment/InjectableDialogFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:0
DA:14,0
DA:20,0
DA:23,0
DA:24,0
DA:25,0
DA:26,0
DA:29,0
DA:30,0
LH:0
LF:8
end_of_record
SF:app/src/main/java/org/oppia/android/app/fragment/InjectableFragment.kt
FN:14,org/oppia/android/app/fragment/InjectableFragment::<init> ()V
FN:29,org/oppia/android/app/fragment/InjectableFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FN:20,org/oppia/android/app/fragment/InjectableFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FN:23,org/oppia/android/app/fragment/InjectableFragment::onAttach (Landroid/content/Context;)V
FN:20,org/oppia/android/app/fragment/InjectableFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNDA:1,org/oppia/android/app/fragment/InjectableFragment::<init> ()V
FNDA:0,org/oppia/android/app/fragment/InjectableFragment::createViewComponent (Landroid/view/View;)Lorg/oppia/android/app/view/ViewComponent;
FNDA:1,org/oppia/android/app/fragment/InjectableFragment::getFragmentComponent ()Lorg/oppia/android/app/fragment/FragmentComponent;
FNDA:1,org/oppia/android/app/fragment/InjectableFragment::onAttach (Landroid/content/Context;)V
FNDA:1,org/oppia/android/app/fragment/InjectableFragment::setFragmentComponent (Lorg/oppia/android/app/fragment/FragmentComponent;)V
FNF:5
FNH:4
BRDA:20,0,0,1
BRDA:20,0,1,0
BRF:2
BRH:1
DA:14,1
DA:20,1
DA:23,1
DA:24,1
DA:25,1
DA:26,1
DA:29,0
DA:30,0
LH:6
LF:8
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/IntentFactoryShim.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/IntentFactoryShimModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/ViewBindingShim.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/shim/ViewBindingShimModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightManager.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightNavigationListener.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightShape.kt
FN:6,org/oppia/android/app/spotlight/SpotlightShape$Circle::<init> ()V
FN:9,org/oppia/android/app/spotlight/SpotlightShape$RoundedRectangle::<init> ()V
FNDA:0,org/oppia/android/app/spotlight/SpotlightShape$Circle::<init> ()V
FNDA:1,org/oppia/android/app/spotlight/SpotlightShape$RoundedRectangle::<init> ()V
FNF:2
FNH:1
DA:6,0
DA:9,1
LH:1
LF:2
end_of_record
SF:app/src/main/java/org/oppia/android/app/spotlight/SpotlightTarget.kt
FN:14,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;)V
FN:14,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
FN:66,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreX ()F
FN:70,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreY ()F
FN:58,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorHeight ()I
FN:44,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorLeft ()F
FN:51,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorTop ()F
FN:62,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorWidth ()I
FN:15,org/oppia/android/app/spotlight/SpotlightTarget::getAnchor ()Landroid/view/View;
FN:30,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreX ()F
FN:32,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreY ()F
FN:26,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorHeight ()I
FN:22,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorLeft ()F
FN:24,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorTop ()F
FN:28,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorWidth ()I
FN:18,org/oppia/android/app/spotlight/SpotlightTarget::getFeature ()Lorg/oppia/android/app/model/Spotlight$FeatureCase;
FN:16,org/oppia/android/app/spotlight/SpotlightTarget::getHint ()Ljava/lang/String;
FN:17,org/oppia/android/app/spotlight/SpotlightTarget::getShape ()Lorg/oppia/android/app/spotlight/SpotlightShape;
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;)V
FNDA:0,org/oppia/android/app/spotlight/SpotlightTarget::<init> (Landroid/view/View;Ljava/lang/String;Lorg/oppia/android/app/spotlight/SpotlightShape;Lorg/oppia/android/app/model/Spotlight$FeatureCase;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreX ()F
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorCentreY ()F
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorHeight ()I
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorLeft ()F
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorTop ()F
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::calculateAnchorWidth ()I
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getAnchor ()Landroid/view/View;
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreX ()F
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorCentreY ()F
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorHeight ()I
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorLeft ()F
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorTop ()F
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getAnchorWidth ()I
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getFeature ()Lorg/oppia/android/app/model/Spotlight$FeatureCase;
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getHint ()Ljava/lang/String;
FNDA:1,org/oppia/android/app/spotlight/SpotlightTarget::getShape ()Lorg/oppia/android/app/spotlight/SpotlightShape;
FNF:18
FNH:17
DA:14,1
DA:15,1
DA:16,1
DA:17,1
DA:18,1
DA:22,1
DA:24,1
DA:26,1
DA:28,1
DA:30,1
DA:32,1
DA:34,1
DA:35,1
DA:36,1
DA:37,1
DA:38,1
DA:39,1
DA:40,1
DA:41,1
DA:44,1
DA:45,1
DA:46,1
DA:47,1
DA:51,1
DA:52,1
DA:53,1
DA:54,1
DA:58,1
DA:62,1
DA:66,1
DA:70,1
DA:72,0
LH:31
LF:32
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandler.kt
FN:30,org/oppia/android/app/translation/ActivityLanguageLocaleHandler$displayLocale$2::invoke ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:18,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;)V
FN:29,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:41,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FN:51,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler$displayLocale$2::invoke ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;)V
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FNDA:1,org/oppia/android/app/translation/ActivityLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNF:5
FNH:5
BRDA:53,0,0,1
BRDA:53,0,1,1
BRF:2
BRH:2
DA:18,1
DA:19,1
DA:20,1
DA:21,1
DA:29,1
DA:30,1
DA:41,1
DA:42,1
DA:51,1
DA:52,1
DA:53,1
LH:11
LF:11
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreator.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorImpl.kt
FN:7,org/oppia/android/app/translation/ActivityRecreatorImpl::<init> ()V
FN:9,org/oppia/android/app/translation/ActivityRecreatorImpl::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNDA:0,org/oppia/android/app/translation/ActivityRecreatorImpl::<init> ()V
FNDA:0,org/oppia/android/app/translation/ActivityRecreatorImpl::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNF:2
FNH:0
DA:7,0
DA:9,0
DA:10,0
LH:0
LF:3
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorProdModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjectorProvider.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjectorProvider.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageLocaleHandler.kt
FN:20,org/oppia/android/app/translation/AppLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;)V
FN:76,org/oppia/android/app/translation/AppLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FN:41,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)V
FN:56,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FN:32,org/oppia/android/app/translation/AppLanguageLocaleHandler::isInitialized ()Z
FN:67,org/oppia/android/app/translation/AppLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FN:81,org/oppia/android/app/translation/AppLanguageLocaleHandler::verifyDisplayLocaleIsInitialized ()V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::<init> (Lorg/oppia/android/domain/locale/LocaleController;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::getDisplayLocale ()Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)V
FNDA:0,org/oppia/android/app/translation/AppLanguageLocaleHandler::initializeLocaleForActivity (Landroid/content/res/Configuration;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::isInitialized ()Z
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::updateLocale (Lorg/oppia/android/util/locale/OppiaLocale$DisplayLocale;)Z
FNDA:1,org/oppia/android/app/translation/AppLanguageLocaleHandler::verifyDisplayLocaleIsInitialized ()V
FNF:7
FNH:6
BRDA:32,0,0,1
BRDA:32,0,1,1
BRDA:41,0,0,1
BRDA:41,0,1,0
BRDA:41,0,2,0
BRDA:41,0,3,1
BRDA:57,0,0,-
BRDA:57,0,1,-
BRDA:68,0,0,1
BRDA:68,0,1,0
BRDA:70,0,0,1
BRDA:70,0,1,1
BRDA:77,0,0,1
BRDA:77,0,1,0
BRDA:81,0,0,0
BRDA:81,0,1,1
BRF:16
BRH:9
DA:20,1
DA:21,1
DA:22,1
DA:32,1
DA:41,1
DA:42,0
DA:45,1
DA:46,1
DA:56,0
DA:57,0
DA:58,0
DA:67,1
DA:68,1
DA:69,1
DA:70,1
DA:76,1
DA:77,1
DA:81,1
DA:82,0
DA:85,1
LH:15
LF:20
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/AppLanguageWatcherMixin.kt
FN:80,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::<init> (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;Landroidx/lifecycle/LiveData;)V
FN:82,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::onChanged (Lorg/oppia/android/util/data/AsyncResult;)V
FN:20,org/oppia/android/app/translation/AppLanguageWatcherMixin::<init> (Landroidx/appcompat/app/AppCompatActivity;Lorg/oppia/android/domain/translation/TranslationController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/domain/oppialogger/OppiaLogger;Lorg/oppia/android/app/translation/ActivityRecreator;Lorg/oppia/android/domain/profile/ProfileManagementController;Lorg/oppia/android/app/translation/ActivityLanguageLocaleHandler;)V
FN:43,org/oppia/android/app/translation/AppLanguageWatcherMixin::initialize (Z)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::<init> (Lorg/oppia/android/app/translation/AppLanguageWatcherMixin;Landroidx/lifecycle/LiveData;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin$initialize$1::onChanged (Lorg/oppia/android/util/data/AsyncResult;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin::<init> (Landroidx/appcompat/app/AppCompatActivity;Lorg/oppia/android/domain/translation/TranslationController;Lorg/oppia/android/app/translation/AppLanguageLocaleHandler;Lorg/oppia/android/domain/locale/LocaleController;Lorg/oppia/android/domain/oppialogger/OppiaLogger;Lorg/oppia/android/app/translation/ActivityRecreator;Lorg/oppia/android/domain/profile/ProfileManagementController;Lorg/oppia/android/app/translation/ActivityLanguageLocaleHandler;)V
FNDA:1,org/oppia/android/app/translation/AppLanguageWatcherMixin::initialize (Z)V
FNF:4
FNH:4
BRDA:43,0,0,1
BRDA:43,0,1,1
BRDA:72,0,0,0
BRDA:72,0,1,1
BRDA:73,0,0,1
BRDA:73,0,1,0
BRDA:83,0,0,1
BRDA:83,0,1,0
BRDA:86,0,0,1
BRDA:86,0,1,1
BRDA:103,0,0,-
BRDA:103,0,1,-
BRDA:109,0,0,-
BRDA:109,0,1,-
BRF:14
BRH:7
DA:20,1
DA:21,1
DA:22,1
DA:23,1
DA:24,1
DA:25,1
DA:26,1
DA:27,1
DA:28,1
DA:43,1
DA:60,1
DA:61,1
DA:63,1
DA:64,1
DA:66,1
DA:69,1
DA:71,1
DA:72,1
DA:73,1
DA:74,0
DA:77,1
DA:78,1
DA:79,1
DA:80,1
DA:82,1
DA:83,1
DA:86,1
DA:99,1
DA:100,1
DA:103,0
DA:104,0
DA:105,0
DA:106,0
DA:109,0
DA:111,1
DA:114,1
LH:30
LF:36
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/testing/ActivityRecreatorTestModule.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/translation/testing/TestActivityRecreator.kt
FN:18,org/oppia/android/app/translation/testing/TestActivityRecreator::<init> ()V
FN:28,org/oppia/android/app/translation/testing/TestActivityRecreator::getRecreateCount ()I
FN:24,org/oppia/android/app/translation/testing/TestActivityRecreator::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNDA:1,org/oppia/android/app/translation/testing/TestActivityRecreator::<init> ()V
FNDA:0,org/oppia/android/app/translation/testing/TestActivityRecreator::getRecreateCount ()I
FNDA:1,org/oppia/android/app/translation/testing/TestActivityRecreator::recreate (Landroidx/appcompat/app/AppCompatActivity;)V
FNF:3
FNH:2
DA:18,1
DA:19,1
DA:24,1
DA:25,1
DA:28,0
LH:4
LF:5
end_of_record
SF:app/src/main/java/org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory.kt
FN:36,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$createTimer$1::invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;
FN:80,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runPeriodically$1::invoke ()V
FN:53,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::<init> (Landroidx/lifecycle/LiveData;Lkotlin/jvm/functions/Function0;)V
FN:55,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::onChanged (Ljava/lang/Object;)V
FN:19,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::<init> (Lkotlinx/coroutines/CoroutineDispatcher;)V
FN:34,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::createTimer (J)Landroidx/lifecycle/LiveData;
FN:79,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically (Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;)V
FN:74,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically$default (Lorg/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory;Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
FN:50,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runWithDelay (Landroidx/lifecycle/LifecycleOwner;JLkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$createTimer$1::invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runPeriodically$1::invoke ()V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::<init> (Landroidx/lifecycle/LiveData;Lkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory$runWithDelay$1::onChanged (Ljava/lang/Object;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::<init> (Lkotlinx/coroutines/CoroutineDispatcher;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::createTimer (J)Landroidx/lifecycle/LiveData;
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically (Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runPeriodically$default (Lorg/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory;Landroidx/lifecycle/LifecycleOwner;JJLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
FNDA:0,org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory::runWithDelay (Landroidx/lifecycle/LifecycleOwner;JLkotlin/jvm/functions/Function0;)V
FNF:9
FNH:0
DA:19,0
DA:20,0
DA:24,0
DA:34,0
DA:35,0
DA:36,0
DA:37,0
DA:38,0
DA:39,0
DA:50,0
DA:51,0
DA:52,0
DA:53,0
DA:55,0
DA:56,0
DA:57,0
DA:60,0
DA:74,0
DA:75,0
DA:79,0
DA:80,0
DA:81,0
DA:83,0
DA:84,0
LH:0
LF:24
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponent.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponentBuilderInjector.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewComponentFactory.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/view/ViewScope.kt
FNF:0
FNH:0
LH:0
LF:0
end_of_record
SF:app/src/main/java/org/oppia/android/app/viewmodel/ObservableArrayList.kt
FN:7,org/oppia/android/app/viewmodel/ObservableArrayList::<init> ()V
FN:17,org/oppia/android/app/viewmodel/ObservableArrayList::add (ILjava/lang/Object;)V
FN:11,org/oppia/android/app/viewmodel/ObservableArrayList::add (Ljava/lang/Object;)Z
FN:31,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (ILjava/util/Collection;)Z
FN:22,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (Ljava/util/Collection;)Z
FN:69,org/oppia/android/app/viewmodel/ObservableArrayList::addOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FN:48,org/oppia/android/app/viewmodel/ObservableArrayList::clear ()V
FN:8,org/oppia/android/app/viewmodel/ObservableArrayList::getListeners ()Landroidx/databinding/ListChangeRegistry;
FN:79,org/oppia/android/app/viewmodel/ObservableArrayList::notifyAdd (II)V
FN:83,org/oppia/android/app/viewmodel/ObservableArrayList::notifyRemove (II)V
FN:39,org/oppia/android/app/viewmodel/ObservableArrayList::removeAll (Ljava/util/Collection;)Z
FN:75,org/oppia/android/app/viewmodel/ObservableArrayList::removeOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FN:62,org/oppia/android/app/viewmodel/ObservableArrayList::removeRange (II)V
FN:56,org/oppia/android/app/viewmodel/ObservableArrayList::set (ILjava/lang/Object;)Ljava/lang/Object;
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::<init> ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::add (ILjava/lang/Object;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::add (Ljava/lang/Object;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (ILjava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addAll (Ljava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::addOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::clear ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::getListeners ()Landroidx/databinding/ListChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::notifyAdd (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::notifyRemove (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeAll (Ljava/util/Collection;)Z
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeOnListChangedCallback (Landroidx/databinding/ObservableList$OnListChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::removeRange (II)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableArrayList::set (ILjava/lang/Object;)Ljava/lang/Object;
FNF:14
FNH:0
DA:7,0
DA:8,0
DA:11,0
DA:12,0
DA:13,0
DA:17,0
DA:18,0
DA:19,0
DA:22,0
DA:23,0
DA:24,0
DA:25,0
DA:27,0
DA:31,0
DA:32,0
DA:33,0
DA:35,0
DA:39,0
DA:40,0
DA:41,0
DA:42,0
DA:44,0
DA:48,0
DA:49,0
DA:50,0
DA:51,0
DA:53,0
DA:56,0
DA:57,0
DA:58,0
DA:62,0
DA:63,0
DA:64,0
DA:69,0
DA:70,0
DA:75,0
DA:76,0
DA:79,0
DA:80,0
DA:83,0
DA:84,0
LH:0
LF:41
end_of_record
SF:app/src/main/java/org/oppia/android/app/viewmodel/ObservableViewModel.kt
FN:9,org/oppia/android/app/viewmodel/ObservableViewModel$callbacks$2::invoke ()Landroidx/databinding/PropertyChangeRegistry;
FN:7,org/oppia/android/app/viewmodel/ObservableViewModel::<init> ()V
FN:17,org/oppia/android/app/viewmodel/ObservableViewModel::addOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FN:8,org/oppia/android/app/viewmodel/ObservableViewModel::getCallbacks ()Landroidx/databinding/PropertyChangeRegistry;
FN:22,org/oppia/android/app/viewmodel/ObservableViewModel::notifyChange ()V
FN:27,org/oppia/android/app/viewmodel/ObservableViewModel::notifyPropertyChanged (I)V
FN:13,org/oppia/android/app/viewmodel/ObservableViewModel::removeOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel$callbacks$2::invoke ()Landroidx/databinding/PropertyChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::<init> ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::addOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::getCallbacks ()Landroidx/databinding/PropertyChangeRegistry;
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::notifyChange ()V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::notifyPropertyChanged (I)V
FNDA:0,org/oppia/android/app/viewmodel/ObservableViewModel::removeOnPropertyChangedCallback (Landroidx/databinding/Observable$OnPropertyChangedCallback;)V
FNF:7
FNH:0
DA:7,0
DA:8,0
DA:9,0
DA:13,0
DA:14,0
DA:17,0
DA:18,0
DA:22,0
DA:23,0
DA:27,0
DA:28,0
LH:0
LF:11
end_of_record
Also, with this case would it mean (at least considering the app modules), the coverage reports being included / passing would be related to having package specific source targets? (since the spotlight test modules didn't have an explicit one)
@BenHenning another finding that might be helpful
Just tried running coverage on the non-modularized test: BundleExtensionsTest
bazel coverage //utility:src/test/java/org/oppia/android/util/extensions/BundleExtensionsTest
Note: The source file is modularized while the test is not
Running the bazel coverage command did pass the coverage analysis:
And also it has its SourceFile included in the coverage report:
...
SF:utility/src/main/java/org/oppia/android/util/extensions/BundleExtensions.kt
FN:37,org/oppia/android/util/extensions/BundleExtensionsKt::getProto (Landroid/os/Bundle;Ljava/lang/String;Lcom/google/protobuf/MessageLite;)Lcom/google/protobuf/MessageLite;
FN:66,org/oppia/android/util/extensions/BundleExtensionsKt::getProtoExtra (Landroid/content/Intent;Ljava/lang/String;Lcom/google/protobuf/MessageLite;)Lcom/google/protobuf/MessageLite;
FN:84,org/oppia/android/util/extensions/BundleExtensionsKt::getSerializableAboveApi32 (Landroid/os/Bundle;Ljava/lang/String;Ljava/lang/Class;)Ljava/io/Serializable;
FN:73,org/oppia/android/util/extensions/BundleExtensionsKt::getStringFromBundle (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/String;
FN:18,org/oppia/android/util/extensions/BundleExtensionsKt::putProto (Landroid/os/Bundle;Ljava/lang/String;Lcom/google/protobuf/MessageLite;)V
FN:57,org/oppia/android/util/extensions/BundleExtensionsKt::putProtoExtra (Landroid/content/Intent;Ljava/lang/String;Lcom/google/protobuf/MessageLite;)V
FNDA:1,org/oppia/android/util/extensions/BundleExtensionsKt::getProto (Landroid/os/Bundle;Ljava/lang/String;Lcom/google/protobuf/MessageLite;)Lcom/google/protobuf/MessageLite;
FNDA:1,org/oppia/android/util/extensions/BundleExtensionsKt::getProtoExtra (Landroid/content/Intent;Ljava/lang/String;Lcom/google/protobuf/MessageLite;)Lcom/google/protobuf/MessageLite;
FNDA:0,org/oppia/android/util/extensions/BundleExtensionsKt::getSerializableAboveApi32 (Landroid/os/Bundle;Ljava/lang/String;Ljava/lang/Class;)Ljava/io/Serializable;
FNDA:0,org/oppia/android/util/extensions/BundleExtensionsKt::getStringFromBundle (Landroid/os/Bundle;Ljava/lang/String;)Ljava/lang/String;
FNDA:1,org/oppia/android/util/extensions/BundleExtensionsKt::putProto (Landroid/os/Bundle;Ljava/lang/String;Lcom/google/protobuf/MessageLite;)V
FNDA:1,org/oppia/android/util/extensions/BundleExtensionsKt::putProtoExtra (Landroid/content/Intent;Ljava/lang/String;Lcom/google/protobuf/MessageLite;)V
FNF:6
FNH:4
BRDA:37,0,0,1
BRDA:37,0,1,1
BRDA:37,0,2,1
BRDA:37,0,3,1
BRDA:57,0,0,1
BRDA:57,0,1,1
BRDA:66,0,0,1
BRDA:66,0,1,1
BRDA:66,0,2,1
BRDA:66,0,3,0
BRF:10
BRH:9
DA:18,1
DA:19,1
DA:37,1
DA:40,1
DA:42,1
DA:43,1
DA:44,1
DA:46,1
DA:57,1
DA:58,1
DA:66,1
DA:73,0
DA:84,0
LH:11
LF:13
end_of_record
Todo: (will try later) -> Tried running
bazel coverage //domain:src/test/java/org/oppia/android/domain/util/StringExtensionsTest
whose source is specified in the same build file as of BundleExtensions
BUILD.bazel
kt_android_library(
name = "bundle_extensions",
srcs = [
"BundleExtensions.kt",
],
visibility = ["//:oppia_api_visibility"],
deps = [
"//third_party:com_google_protobuf_protobuf-javalite",
],
)
kt_android_library(
name = "context_extensions",
srcs = [
"ContextExtensions.kt",
],
visibility = ["//:oppia_api_visibility"],
deps = [
"//third_party:com_google_protobuf_protobuf-javalite",
],
)
kt_android_library(
name = "string_extensions",
srcs = [
"StringExtensions.kt",
],
visibility = ["//:oppia_api_visibility"],
)
The coverage run failed.
but test file seems to be in an improper place (might be that could be a troublemaker), will later try to move it to its respective package and again try analysing it.