Giter Site home page Giter Site logo

Comments (16)

BenHenning avatar BenHenning commented on August 16, 2024 1

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.

from oppia-android.

BenHenning avatar BenHenning commented on August 16, 2024

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.

from oppia-android.

BenHenning avatar BenHenning commented on August 16, 2024

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.

from oppia-android.

Rd4dev avatar Rd4dev commented on August 16, 2024

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

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 2

PR 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

from oppia-android.

DubeySandeep avatar DubeySandeep commented on August 16, 2024

@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)

from oppia-android.

Rd4dev avatar Rd4dev commented on August 16, 2024

@DubeySandeep Corrected the dates and updated the table to reflect the current progress, will ensure it remains up to date in the future.

from oppia-android.

BenHenning avatar BenHenning commented on August 16, 2024

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.

from oppia-android.

BenHenning avatar BenHenning commented on August 16, 2024

I found that, interestingly, two things:

  1. Coverage is failing for some groups of tests outside of app module.
  2. 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.

from oppia-android.

BenHenning avatar BenHenning commented on August 16, 2024

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.

from oppia-android.

BenHenning avatar BenHenning commented on August 16, 2024

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 bazelbuild/bazel#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.

from oppia-android.

Rd4dev avatar Rd4dev commented on August 16, 2024

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.

from oppia-android.

BenHenning avatar BenHenning commented on August 16, 2024

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).

from oppia-android.

DubeySandeep avatar DubeySandeep commented on August 16, 2024

@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?

from oppia-android.

Rd4dev avatar Rd4dev commented on August 16, 2024

@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: #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

from oppia-android.

Rd4dev avatar Rd4dev commented on August 16, 2024

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/...

image

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.

from oppia-android.

Rd4dev avatar Rd4dev commented on August 16, 2024

I found that, interestingly, two things:

  1. Coverage is failing for some groups of tests outside of app module.
  2. 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

from oppia-android.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.