eclipse-timekeeper

Step 3: Mylyn integration and workweek UI

Started from merged PR #185, origin/main revision d2724f0, on September 21,

  1. The preceding PR’s Linux/Xvfb CI checks passed before merge. Pre-existing local classpath edits and Eclipse metadata were preserved and excluded from this work.

Compatibility decisions

Remaining internal API audit

Reviewed the source bundles actually selected by the target: org.eclipse.mylyn.tasks.core.source/4.12.0.v20260826-1729 and org.eclipse.mylyn.tasks.ui.source/4.12.0.v20260721-0835.

Boundary Retained internal dependency Reason
TimekeeperPlugin project grouping AbstractTask, AbstractTaskContainer Public ITask/ITaskContainer expose no parent-container enumeration. The entry point now accepts ITask and checks the concrete type.
Task project association AbstractTask, AbstractTaskCategory, AbstractTaskContainer Category membership and parent enumeration still require internal types. Query detection now uses public IRepositoryQuery.
WorkWeekView task-list changes TasksUiPlugin.getTaskList(), ITaskListChangeListener, TaskContainerDelta Public TasksUi/IRepositoryModel do not expose a task-list change subscription. Activation subscriptions use the public API.
Synthetic tests only LocalTask, TaskCategory, TaskList, associated abstract types Construct and delete local fixtures without contacting a task server.

These are explicit compatibility boundaries to recheck on future Mylyn upgrades, not evidence that internal APIs are supported contracts. No internal Mylyn imports remain in the title/time label providers, week content provider or Project.

Runtime fixes

Verification

Clean source-copy build on macOS 27.0/aarch64, Temurin 21.0.12.1, Maven 3.9.16:

mvn -B -ntp clean verify -Dtycho.localArtifacts=ignore

The local command used an empty temporary Maven settings file to exclude unrelated private repositories. No tests were disabled or skipped through build flags. The normal dependency cache was retained; IDE output and local classpath changes were not copied into the test checkout.

Local evidence: /private/tmp/timekeeper-mylyn-3.log and reports under /private/tmp/timekeeper-mylyn.WUttZ3/. Temporary evidence may be removed by the OS.

PR review follow-up: background notifications and disposal

Addressed Copilot’s review comment by capturing the viewer’s display during inputChanged on the UI thread. Database notification threads now only read that published display reference and queue work; all viewer/control access happens inside the UI callback. Provider disposal clears the reference, queued callbacks recheck disposal, and a display shutdown while scheduling is ignored only for SWT.ERROR_DEVICE_DISPOSED.

Three synthetic regression tests cover a normal background notification and notifications queued before or delivered after control/provider disposal. The test viewer rejects off-UI-thread access. Disposal tests hold the UI thread until the background notification is queued, making their ordering deterministic. All three tests fail against the original provider due to background viewer access and pass with the fix. The full fixed-source reactor passes with 4 database/report tests and 7 UI tests passing; the existing CSV-export test remains ignored. No personal database is used.

Local evidence: /private/tmp/timekeeper-review.log (passing fixed build), /private/tmp/timekeeper-review-before.log (expected regression failures), and the isolated source copy at /private/tmp/timekeeper-review.J6mERX/.

Limits and follow-up

This is not a release-readiness or data-migration sign-off. Existing databases, labels, import/export and restart remain step 4/5 work. The old manual-edit UI test remains inactive. Remote Bugzilla/JIRA/GitHub repositories and category reassignment have not been exercised against live connectors.

The test runtime still reports missing theme/Cocoa menu contributions and Mylyn’s CommonColors shutdown Invalid thread access error, as recorded before this step. No new Timekeeper event-loop exception appeared in the successful run. Clean installed-IDE verification remains necessary; these harness errors are not hidden by the passing test count. The site POM change received from origin also produces an additionalFileSets unknown-parameter warning; it was preserved for the release-packaging review rather than silently reverted.