Enforce Android SpotBugs and default to API 36 - #5451

Merged
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch
Jul 26, 2026
Merged

Enforce Android SpotBugs and default to API 36#5451
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch

Conversation

@shai-almog

@shai-almogshai-almog commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • remove the redundant Android calendar column branch reported by SpotBugs
  • make the Android Maven verification fail on every non-whitelisted SpotBugs finding
  • retain XML report generation for the CI quality summary
  • raise the Gradle 8 Android compile and target SDK floor from API 33 to API 36
  • update the developer guide to describe the API 36 default

SpotBugs fix

Events.CALENDAR_ID and Instances.CALENDAR_ID resolve to the same Android Calendar Provider column name, so selecting between them produced identical bytecode branches and triggered DB_DUPLICATE_BRANCHES.

The Android module generated SpotBugs reports but did not run the plugin's check goal, so findings outside the exclusion filter did not fail Maven verification. The configuration also makes SpotBugs execution and analysis errors fail the build instead of silently producing an incomplete report.

Android API 36

The open-source Gradle 8 builder selects the highest installed Android platform but previously allowed API 33 as its minimum. It now requires API 36 as the default floor while continuing to honor explicit android.targetSDKVersion overrides. Generated projects also guarantee that compileSdk is never lower than targetSdk, independently of the selected Build Tools package.

Cloud builds receive the matching default in codenameone/BuildDaemon#157.

Validation

  • Java 8 Android Maven verify with the compile-android profile
  • SpotBugs: BugInstance size is 0
  • SpotBugs: Error size is 0
  • AndroidGradleBuilderSdkVersionTest: 3 tests passed
  • Maven: BUILD SUCCESS

CopilotAI review requested due to automatic review settings July 24, 2026 13:34
@shai-almogshai-almog changed the title Fix Android SpotBugs calendar warningEnforce Android SpotBugs and default to API 36Jul 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Updates the Android build and QA pipeline to eliminate a SpotBugs duplicate-branch warning in calendar queries and ensure SpotBugs findings fail Maven verification while still emitting CI-consumable XML reports.

Changes:

  • Simplifies Android Calendar Provider filtering to remove a redundant column-selection branch flagged by SpotBugs.
  • Tightens SpotBugs enforcement in the Android Maven module by failing verification on non-excluded findings.
  • Raises the Android SDK floor used by the Gradle-based Android builder and aligns the developer documentation.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

FileDescription
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.javaRaises the minimum Android platform API used by the builder.
maven/android/pom.xmlMakes SpotBugs failures block mvn verify and adds the check goal while keeping XML output.
docs/developer-guide/Advanced-Topics-Under-The-Hood.asciidocUpdates docs to reflect the new Android SDK floor.
Ports/Android/src/com/codename1/impl/android/AndroidCalendarSource.javaRemoves SpotBugs-triggering duplicate branches by using a single calendar id column constant.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
Comment threadPorts/Android/src/com/codename1/impl/android/AndroidCalendarSource.java Outdated
CopilotAI review requested due to automatic review settings July 24, 2026 13:50

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 385ms / native 180ms = 2.1x speedup
SIMD float-mul (64K x300)java 147ms / native 179ms = 0.8x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode80.000 ms
Base64 CN1 decode86.000 ms
Base64 native encode338.000 ms
Base64 encode ratio (CN1/native)0.237x (76.3% faster)
Base64 native decode271.000 ms
Base64 decode ratio (CN1/native)0.317x (68.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

CopilotAI review requested due to automatic review settings July 24, 2026 14:13
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

Static Analysis

  • SpotBugs[Report archive]
    • ByteCodeTranslator: 0 findings (no issues)
    • android: 0 findings (no issues)
    • codenameone-maven-plugin: 0 findings (no issues)
    • core-unittests: 0 findings (no issues)
    • ios: 0 findings (no issues)
  • PMD: 0 findings (no issues) [Report archive]
  • Checkstyle: 0 findings (no issues) [Report archive]

Generated automatically by the PR CI workflow.

CopilotAI review requested due to automatic review settings July 24, 2026 15:18
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 149 screenshots: 149 matched.
✅ Native iOS Metal screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 611 seconds

Build and Run Timing

MetricDuration
Simulator Boot96000 ms
Simulator Boot (Run)0 ms
App Install19000 ms
App Launch33000 ms
Test Execution1071000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 78ms / native 5ms = 15.6x speedup
SIMD float-mul (64K x300)java 70ms / native 2ms = 35.0x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode171.000 ms
Base64 CN1 decode171.000 ms
Base64 native encode327.000 ms
Base64 encode ratio (CN1/native)0.523x (47.7% faster)
Base64 native decode488.000 ms
Base64 decode ratio (CN1/native)0.350x (65.0% faster)
Base64 SIMD encode91.000 ms
Base64 encode ratio (SIMD/CN1)0.532x (46.8% faster)
Base64 SIMD decode68.000 ms
Base64 decode ratio (SIMD/CN1)0.398x (60.2% faster)
Base64 encode ratio (SIMD/native)0.278x (72.2% faster)
Base64 decode ratio (SIMD/native)0.139x (86.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)18.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.056x (94.4% faster)
Image applyMask (SIMD off)44.000 ms
Image applyMask (SIMD on)32.000 ms
Image applyMask ratio (SIMD on/off)0.727x (27.3% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)30.000 ms
Image modifyAlpha ratio (SIMD on/off)0.909x (9.1% faster)
Image modifyAlpha removeColor (SIMD off)53.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.585x (41.5% faster)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 144 screenshots: 144 matched.
✅ Native Apple TV (tvOS, Metal) screenshot tests passed.

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 143 screenshots: 143 matched.
✅ Native iOS screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 264 seconds

Build and Run Timing

MetricDuration
Simulator Boot60000 ms
Simulator Boot (Run)0 ms
App Install12000 ms
App Launch1000 ms
Test Execution732000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 81ms / native 3ms = 27.0x speedup
SIMD float-mul (64K x300)java 67ms / native 4ms = 16.7x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode161.000 ms
Base64 CN1 decode142.000 ms
Base64 native encode458.000 ms
Base64 encode ratio (CN1/native)0.352x (64.8% faster)
Base64 native decode215.000 ms
Base64 decode ratio (CN1/native)0.660x (34.0% faster)
Base64 SIMD encode48.000 ms
Base64 encode ratio (SIMD/CN1)0.298x (70.2% faster)
Base64 SIMD decode45.000 ms
Base64 decode ratio (SIMD/CN1)0.317x (68.3% faster)
Base64 encode ratio (SIMD/native)0.105x (89.5% faster)
Base64 decode ratio (SIMD/native)0.209x (79.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)6.000 ms
Image createMask (SIMD on)2.000 ms
Image createMask ratio (SIMD on/off)0.333x (66.7% faster)
Image applyMask (SIMD off)46.000 ms
Image applyMask (SIMD on)39.000 ms
Image applyMask ratio (SIMD on/off)0.848x (15.2% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)34.000 ms
Image modifyAlpha ratio (SIMD on/off)1.030x (3.0% slower)
Image modifyAlpha removeColor (SIMD off)34.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.912x (8.8% faster)

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
CopilotAI review requested due to automatic review settings July 24, 2026 15:44
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 148 screenshots: 148 matched.
✅ Native Mac screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 250 seconds

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 57ms / native 3ms = 19.0x speedup
SIMD float-mul (64K x300)java 55ms / native 3ms = 18.3x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode170.000 ms
Base64 CN1 decode149.000 ms
Base64 native encode664.000 ms
Base64 encode ratio (CN1/native)0.256x (74.4% faster)
Base64 native decode410.000 ms
Base64 decode ratio (CN1/native)0.363x (63.7% faster)
Base64 SIMD encode57.000 ms
Base64 encode ratio (SIMD/CN1)0.335x (66.5% faster)
Base64 SIMD decode52.000 ms
Base64 decode ratio (SIMD/CN1)0.349x (65.1% faster)
Base64 encode ratio (SIMD/native)0.086x (91.4% faster)
Base64 decode ratio (SIMD/native)0.127x (87.3% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)8.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.125x (87.5% faster)
Image applyMask (SIMD off)95.000 ms
Image applyMask (SIMD on)62.000 ms
Image applyMask ratio (SIMD on/off)0.653x (34.7% faster)
Image modifyAlpha (SIMD off)52.000 ms
Image modifyAlpha (SIMD on)46.000 ms
Image modifyAlpha ratio (SIMD on/off)0.885x (11.5% faster)
Image modifyAlpha removeColor (SIMD off)56.000 ms
Image modifyAlpha removeColor (SIMD on)57.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)1.018x (1.8% slower)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 217 screenshots: 217 matched.
✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

CopilotAI review requested due to automatic review settings July 24, 2026 17:37

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

@shai-almog
shai-almog merged commit 2f22507 into masterJul 26, 2026
41 checks passed
@shai-almog
shai-almog deleted the fix-android-spotbugs-calendar-branch branch July 26, 2026 13:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Enforce Android SpotBugs and default to API 36 - #5451

Merged
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch
Jul 26, 2026
Merged

Enforce Android SpotBugs and default to API 36#5451
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch

Conversation

@shai-almog

@shai-almogshai-almog commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • remove the redundant Android calendar column branch reported by SpotBugs
  • make the Android Maven verification fail on every non-whitelisted SpotBugs finding
  • retain XML report generation for the CI quality summary
  • raise the Gradle 8 Android compile and target SDK floor from API 33 to API 36
  • update the developer guide to describe the API 36 default

SpotBugs fix

Events.CALENDAR_ID and Instances.CALENDAR_ID resolve to the same Android Calendar Provider column name, so selecting between them produced identical bytecode branches and triggered DB_DUPLICATE_BRANCHES.

The Android module generated SpotBugs reports but did not run the plugin's check goal, so findings outside the exclusion filter did not fail Maven verification. The configuration also makes SpotBugs execution and analysis errors fail the build instead of silently producing an incomplete report.

Android API 36

The open-source Gradle 8 builder selects the highest installed Android platform but previously allowed API 33 as its minimum. It now requires API 36 as the default floor while continuing to honor explicit android.targetSDKVersion overrides. Generated projects also guarantee that compileSdk is never lower than targetSdk, independently of the selected Build Tools package.

Cloud builds receive the matching default in codenameone/BuildDaemon#157.

Validation

  • Java 8 Android Maven verify with the compile-android profile
  • SpotBugs: BugInstance size is 0
  • SpotBugs: Error size is 0
  • AndroidGradleBuilderSdkVersionTest: 3 tests passed
  • Maven: BUILD SUCCESS

CopilotAI review requested due to automatic review settings July 24, 2026 13:34
@shai-almogshai-almog changed the title Fix Android SpotBugs calendar warningEnforce Android SpotBugs and default to API 36Jul 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Updates the Android build and QA pipeline to eliminate a SpotBugs duplicate-branch warning in calendar queries and ensure SpotBugs findings fail Maven verification while still emitting CI-consumable XML reports.

Changes:

  • Simplifies Android Calendar Provider filtering to remove a redundant column-selection branch flagged by SpotBugs.
  • Tightens SpotBugs enforcement in the Android Maven module by failing verification on non-excluded findings.
  • Raises the Android SDK floor used by the Gradle-based Android builder and aligns the developer documentation.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

FileDescription
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.javaRaises the minimum Android platform API used by the builder.
maven/android/pom.xmlMakes SpotBugs failures block mvn verify and adds the check goal while keeping XML output.
docs/developer-guide/Advanced-Topics-Under-The-Hood.asciidocUpdates docs to reflect the new Android SDK floor.
Ports/Android/src/com/codename1/impl/android/AndroidCalendarSource.javaRemoves SpotBugs-triggering duplicate branches by using a single calendar id column constant.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
Comment threadPorts/Android/src/com/codename1/impl/android/AndroidCalendarSource.java Outdated
CopilotAI review requested due to automatic review settings July 24, 2026 13:50

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 385ms / native 180ms = 2.1x speedup
SIMD float-mul (64K x300)java 147ms / native 179ms = 0.8x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode80.000 ms
Base64 CN1 decode86.000 ms
Base64 native encode338.000 ms
Base64 encode ratio (CN1/native)0.237x (76.3% faster)
Base64 native decode271.000 ms
Base64 decode ratio (CN1/native)0.317x (68.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

CopilotAI review requested due to automatic review settings July 24, 2026 14:13
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

Static Analysis

  • SpotBugs[Report archive]
    • ByteCodeTranslator: 0 findings (no issues)
    • android: 0 findings (no issues)
    • codenameone-maven-plugin: 0 findings (no issues)
    • core-unittests: 0 findings (no issues)
    • ios: 0 findings (no issues)
  • PMD: 0 findings (no issues) [Report archive]
  • Checkstyle: 0 findings (no issues) [Report archive]

Generated automatically by the PR CI workflow.

CopilotAI review requested due to automatic review settings July 24, 2026 15:18
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 149 screenshots: 149 matched.
✅ Native iOS Metal screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 611 seconds

Build and Run Timing

MetricDuration
Simulator Boot96000 ms
Simulator Boot (Run)0 ms
App Install19000 ms
App Launch33000 ms
Test Execution1071000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 78ms / native 5ms = 15.6x speedup
SIMD float-mul (64K x300)java 70ms / native 2ms = 35.0x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode171.000 ms
Base64 CN1 decode171.000 ms
Base64 native encode327.000 ms
Base64 encode ratio (CN1/native)0.523x (47.7% faster)
Base64 native decode488.000 ms
Base64 decode ratio (CN1/native)0.350x (65.0% faster)
Base64 SIMD encode91.000 ms
Base64 encode ratio (SIMD/CN1)0.532x (46.8% faster)
Base64 SIMD decode68.000 ms
Base64 decode ratio (SIMD/CN1)0.398x (60.2% faster)
Base64 encode ratio (SIMD/native)0.278x (72.2% faster)
Base64 decode ratio (SIMD/native)0.139x (86.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)18.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.056x (94.4% faster)
Image applyMask (SIMD off)44.000 ms
Image applyMask (SIMD on)32.000 ms
Image applyMask ratio (SIMD on/off)0.727x (27.3% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)30.000 ms
Image modifyAlpha ratio (SIMD on/off)0.909x (9.1% faster)
Image modifyAlpha removeColor (SIMD off)53.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.585x (41.5% faster)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 144 screenshots: 144 matched.
✅ Native Apple TV (tvOS, Metal) screenshot tests passed.

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 143 screenshots: 143 matched.
✅ Native iOS screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 264 seconds

Build and Run Timing

MetricDuration
Simulator Boot60000 ms
Simulator Boot (Run)0 ms
App Install12000 ms
App Launch1000 ms
Test Execution732000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 81ms / native 3ms = 27.0x speedup
SIMD float-mul (64K x300)java 67ms / native 4ms = 16.7x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode161.000 ms
Base64 CN1 decode142.000 ms
Base64 native encode458.000 ms
Base64 encode ratio (CN1/native)0.352x (64.8% faster)
Base64 native decode215.000 ms
Base64 decode ratio (CN1/native)0.660x (34.0% faster)
Base64 SIMD encode48.000 ms
Base64 encode ratio (SIMD/CN1)0.298x (70.2% faster)
Base64 SIMD decode45.000 ms
Base64 decode ratio (SIMD/CN1)0.317x (68.3% faster)
Base64 encode ratio (SIMD/native)0.105x (89.5% faster)
Base64 decode ratio (SIMD/native)0.209x (79.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)6.000 ms
Image createMask (SIMD on)2.000 ms
Image createMask ratio (SIMD on/off)0.333x (66.7% faster)
Image applyMask (SIMD off)46.000 ms
Image applyMask (SIMD on)39.000 ms
Image applyMask ratio (SIMD on/off)0.848x (15.2% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)34.000 ms
Image modifyAlpha ratio (SIMD on/off)1.030x (3.0% slower)
Image modifyAlpha removeColor (SIMD off)34.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.912x (8.8% faster)

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
CopilotAI review requested due to automatic review settings July 24, 2026 15:44
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 148 screenshots: 148 matched.
✅ Native Mac screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 250 seconds

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 57ms / native 3ms = 19.0x speedup
SIMD float-mul (64K x300)java 55ms / native 3ms = 18.3x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode170.000 ms
Base64 CN1 decode149.000 ms
Base64 native encode664.000 ms
Base64 encode ratio (CN1/native)0.256x (74.4% faster)
Base64 native decode410.000 ms
Base64 decode ratio (CN1/native)0.363x (63.7% faster)
Base64 SIMD encode57.000 ms
Base64 encode ratio (SIMD/CN1)0.335x (66.5% faster)
Base64 SIMD decode52.000 ms
Base64 decode ratio (SIMD/CN1)0.349x (65.1% faster)
Base64 encode ratio (SIMD/native)0.086x (91.4% faster)
Base64 decode ratio (SIMD/native)0.127x (87.3% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)8.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.125x (87.5% faster)
Image applyMask (SIMD off)95.000 ms
Image applyMask (SIMD on)62.000 ms
Image applyMask ratio (SIMD on/off)0.653x (34.7% faster)
Image modifyAlpha (SIMD off)52.000 ms
Image modifyAlpha (SIMD on)46.000 ms
Image modifyAlpha ratio (SIMD on/off)0.885x (11.5% faster)
Image modifyAlpha removeColor (SIMD off)56.000 ms
Image modifyAlpha removeColor (SIMD on)57.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)1.018x (1.8% slower)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 217 screenshots: 217 matched.
✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

CopilotAI review requested due to automatic review settings July 24, 2026 17:37

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

@shai-almog
shai-almog merged commit 2f22507 into masterJul 26, 2026
41 checks passed
@shai-almog
shai-almog deleted the fix-android-spotbugs-calendar-branch branch July 26, 2026 13:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Enforce Android SpotBugs and default to API 36 - #5451

Merged
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch
Jul 26, 2026
Merged

Enforce Android SpotBugs and default to API 36#5451
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch

Conversation

@shai-almog

@shai-almogshai-almog commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • remove the redundant Android calendar column branch reported by SpotBugs
  • make the Android Maven verification fail on every non-whitelisted SpotBugs finding
  • retain XML report generation for the CI quality summary
  • raise the Gradle 8 Android compile and target SDK floor from API 33 to API 36
  • update the developer guide to describe the API 36 default

SpotBugs fix

Events.CALENDAR_ID and Instances.CALENDAR_ID resolve to the same Android Calendar Provider column name, so selecting between them produced identical bytecode branches and triggered DB_DUPLICATE_BRANCHES.

The Android module generated SpotBugs reports but did not run the plugin's check goal, so findings outside the exclusion filter did not fail Maven verification. The configuration also makes SpotBugs execution and analysis errors fail the build instead of silently producing an incomplete report.

Android API 36

The open-source Gradle 8 builder selects the highest installed Android platform but previously allowed API 33 as its minimum. It now requires API 36 as the default floor while continuing to honor explicit android.targetSDKVersion overrides. Generated projects also guarantee that compileSdk is never lower than targetSdk, independently of the selected Build Tools package.

Cloud builds receive the matching default in codenameone/BuildDaemon#157.

Validation

  • Java 8 Android Maven verify with the compile-android profile
  • SpotBugs: BugInstance size is 0
  • SpotBugs: Error size is 0
  • AndroidGradleBuilderSdkVersionTest: 3 tests passed
  • Maven: BUILD SUCCESS

CopilotAI review requested due to automatic review settings July 24, 2026 13:34
@shai-almogshai-almog changed the title Fix Android SpotBugs calendar warningEnforce Android SpotBugs and default to API 36Jul 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Updates the Android build and QA pipeline to eliminate a SpotBugs duplicate-branch warning in calendar queries and ensure SpotBugs findings fail Maven verification while still emitting CI-consumable XML reports.

Changes:

  • Simplifies Android Calendar Provider filtering to remove a redundant column-selection branch flagged by SpotBugs.
  • Tightens SpotBugs enforcement in the Android Maven module by failing verification on non-excluded findings.
  • Raises the Android SDK floor used by the Gradle-based Android builder and aligns the developer documentation.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

FileDescription
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.javaRaises the minimum Android platform API used by the builder.
maven/android/pom.xmlMakes SpotBugs failures block mvn verify and adds the check goal while keeping XML output.
docs/developer-guide/Advanced-Topics-Under-The-Hood.asciidocUpdates docs to reflect the new Android SDK floor.
Ports/Android/src/com/codename1/impl/android/AndroidCalendarSource.javaRemoves SpotBugs-triggering duplicate branches by using a single calendar id column constant.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
Comment threadPorts/Android/src/com/codename1/impl/android/AndroidCalendarSource.java Outdated
CopilotAI review requested due to automatic review settings July 24, 2026 13:50

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 385ms / native 180ms = 2.1x speedup
SIMD float-mul (64K x300)java 147ms / native 179ms = 0.8x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode80.000 ms
Base64 CN1 decode86.000 ms
Base64 native encode338.000 ms
Base64 encode ratio (CN1/native)0.237x (76.3% faster)
Base64 native decode271.000 ms
Base64 decode ratio (CN1/native)0.317x (68.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

CopilotAI review requested due to automatic review settings July 24, 2026 14:13
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

Static Analysis

  • SpotBugs[Report archive]
    • ByteCodeTranslator: 0 findings (no issues)
    • android: 0 findings (no issues)
    • codenameone-maven-plugin: 0 findings (no issues)
    • core-unittests: 0 findings (no issues)
    • ios: 0 findings (no issues)
  • PMD: 0 findings (no issues) [Report archive]
  • Checkstyle: 0 findings (no issues) [Report archive]

Generated automatically by the PR CI workflow.

CopilotAI review requested due to automatic review settings July 24, 2026 15:18
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 149 screenshots: 149 matched.
✅ Native iOS Metal screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 611 seconds

Build and Run Timing

MetricDuration
Simulator Boot96000 ms
Simulator Boot (Run)0 ms
App Install19000 ms
App Launch33000 ms
Test Execution1071000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 78ms / native 5ms = 15.6x speedup
SIMD float-mul (64K x300)java 70ms / native 2ms = 35.0x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode171.000 ms
Base64 CN1 decode171.000 ms
Base64 native encode327.000 ms
Base64 encode ratio (CN1/native)0.523x (47.7% faster)
Base64 native decode488.000 ms
Base64 decode ratio (CN1/native)0.350x (65.0% faster)
Base64 SIMD encode91.000 ms
Base64 encode ratio (SIMD/CN1)0.532x (46.8% faster)
Base64 SIMD decode68.000 ms
Base64 decode ratio (SIMD/CN1)0.398x (60.2% faster)
Base64 encode ratio (SIMD/native)0.278x (72.2% faster)
Base64 decode ratio (SIMD/native)0.139x (86.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)18.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.056x (94.4% faster)
Image applyMask (SIMD off)44.000 ms
Image applyMask (SIMD on)32.000 ms
Image applyMask ratio (SIMD on/off)0.727x (27.3% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)30.000 ms
Image modifyAlpha ratio (SIMD on/off)0.909x (9.1% faster)
Image modifyAlpha removeColor (SIMD off)53.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.585x (41.5% faster)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 144 screenshots: 144 matched.
✅ Native Apple TV (tvOS, Metal) screenshot tests passed.

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 143 screenshots: 143 matched.
✅ Native iOS screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 264 seconds

Build and Run Timing

MetricDuration
Simulator Boot60000 ms
Simulator Boot (Run)0 ms
App Install12000 ms
App Launch1000 ms
Test Execution732000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 81ms / native 3ms = 27.0x speedup
SIMD float-mul (64K x300)java 67ms / native 4ms = 16.7x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode161.000 ms
Base64 CN1 decode142.000 ms
Base64 native encode458.000 ms
Base64 encode ratio (CN1/native)0.352x (64.8% faster)
Base64 native decode215.000 ms
Base64 decode ratio (CN1/native)0.660x (34.0% faster)
Base64 SIMD encode48.000 ms
Base64 encode ratio (SIMD/CN1)0.298x (70.2% faster)
Base64 SIMD decode45.000 ms
Base64 decode ratio (SIMD/CN1)0.317x (68.3% faster)
Base64 encode ratio (SIMD/native)0.105x (89.5% faster)
Base64 decode ratio (SIMD/native)0.209x (79.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)6.000 ms
Image createMask (SIMD on)2.000 ms
Image createMask ratio (SIMD on/off)0.333x (66.7% faster)
Image applyMask (SIMD off)46.000 ms
Image applyMask (SIMD on)39.000 ms
Image applyMask ratio (SIMD on/off)0.848x (15.2% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)34.000 ms
Image modifyAlpha ratio (SIMD on/off)1.030x (3.0% slower)
Image modifyAlpha removeColor (SIMD off)34.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.912x (8.8% faster)

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
CopilotAI review requested due to automatic review settings July 24, 2026 15:44
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 148 screenshots: 148 matched.
✅ Native Mac screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 250 seconds

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 57ms / native 3ms = 19.0x speedup
SIMD float-mul (64K x300)java 55ms / native 3ms = 18.3x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode170.000 ms
Base64 CN1 decode149.000 ms
Base64 native encode664.000 ms
Base64 encode ratio (CN1/native)0.256x (74.4% faster)
Base64 native decode410.000 ms
Base64 decode ratio (CN1/native)0.363x (63.7% faster)
Base64 SIMD encode57.000 ms
Base64 encode ratio (SIMD/CN1)0.335x (66.5% faster)
Base64 SIMD decode52.000 ms
Base64 decode ratio (SIMD/CN1)0.349x (65.1% faster)
Base64 encode ratio (SIMD/native)0.086x (91.4% faster)
Base64 decode ratio (SIMD/native)0.127x (87.3% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)8.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.125x (87.5% faster)
Image applyMask (SIMD off)95.000 ms
Image applyMask (SIMD on)62.000 ms
Image applyMask ratio (SIMD on/off)0.653x (34.7% faster)
Image modifyAlpha (SIMD off)52.000 ms
Image modifyAlpha (SIMD on)46.000 ms
Image modifyAlpha ratio (SIMD on/off)0.885x (11.5% faster)
Image modifyAlpha removeColor (SIMD off)56.000 ms
Image modifyAlpha removeColor (SIMD on)57.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)1.018x (1.8% slower)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 217 screenshots: 217 matched.
✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

CopilotAI review requested due to automatic review settings July 24, 2026 17:37

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

@shai-almog
shai-almog merged commit 2f22507 into masterJul 26, 2026
41 checks passed
@shai-almog
shai-almog deleted the fix-android-spotbugs-calendar-branch branch July 26, 2026 13:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Enforce Android SpotBugs and default to API 36 - #5451

Merged
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch
Jul 26, 2026
Merged

Enforce Android SpotBugs and default to API 36#5451
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch

Conversation

@shai-almog

@shai-almogshai-almog commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • remove the redundant Android calendar column branch reported by SpotBugs
  • make the Android Maven verification fail on every non-whitelisted SpotBugs finding
  • retain XML report generation for the CI quality summary
  • raise the Gradle 8 Android compile and target SDK floor from API 33 to API 36
  • update the developer guide to describe the API 36 default

SpotBugs fix

Events.CALENDAR_ID and Instances.CALENDAR_ID resolve to the same Android Calendar Provider column name, so selecting between them produced identical bytecode branches and triggered DB_DUPLICATE_BRANCHES.

The Android module generated SpotBugs reports but did not run the plugin's check goal, so findings outside the exclusion filter did not fail Maven verification. The configuration also makes SpotBugs execution and analysis errors fail the build instead of silently producing an incomplete report.

Android API 36

The open-source Gradle 8 builder selects the highest installed Android platform but previously allowed API 33 as its minimum. It now requires API 36 as the default floor while continuing to honor explicit android.targetSDKVersion overrides. Generated projects also guarantee that compileSdk is never lower than targetSdk, independently of the selected Build Tools package.

Cloud builds receive the matching default in codenameone/BuildDaemon#157.

Validation

  • Java 8 Android Maven verify with the compile-android profile
  • SpotBugs: BugInstance size is 0
  • SpotBugs: Error size is 0
  • AndroidGradleBuilderSdkVersionTest: 3 tests passed
  • Maven: BUILD SUCCESS

CopilotAI review requested due to automatic review settings July 24, 2026 13:34
@shai-almogshai-almog changed the title Fix Android SpotBugs calendar warningEnforce Android SpotBugs and default to API 36Jul 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Updates the Android build and QA pipeline to eliminate a SpotBugs duplicate-branch warning in calendar queries and ensure SpotBugs findings fail Maven verification while still emitting CI-consumable XML reports.

Changes:

  • Simplifies Android Calendar Provider filtering to remove a redundant column-selection branch flagged by SpotBugs.
  • Tightens SpotBugs enforcement in the Android Maven module by failing verification on non-excluded findings.
  • Raises the Android SDK floor used by the Gradle-based Android builder and aligns the developer documentation.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

FileDescription
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.javaRaises the minimum Android platform API used by the builder.
maven/android/pom.xmlMakes SpotBugs failures block mvn verify and adds the check goal while keeping XML output.
docs/developer-guide/Advanced-Topics-Under-The-Hood.asciidocUpdates docs to reflect the new Android SDK floor.
Ports/Android/src/com/codename1/impl/android/AndroidCalendarSource.javaRemoves SpotBugs-triggering duplicate branches by using a single calendar id column constant.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
Comment threadPorts/Android/src/com/codename1/impl/android/AndroidCalendarSource.java Outdated
CopilotAI review requested due to automatic review settings July 24, 2026 13:50

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 385ms / native 180ms = 2.1x speedup
SIMD float-mul (64K x300)java 147ms / native 179ms = 0.8x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode80.000 ms
Base64 CN1 decode86.000 ms
Base64 native encode338.000 ms
Base64 encode ratio (CN1/native)0.237x (76.3% faster)
Base64 native decode271.000 ms
Base64 decode ratio (CN1/native)0.317x (68.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

CopilotAI review requested due to automatic review settings July 24, 2026 14:13
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

Static Analysis

  • SpotBugs[Report archive]
    • ByteCodeTranslator: 0 findings (no issues)
    • android: 0 findings (no issues)
    • codenameone-maven-plugin: 0 findings (no issues)
    • core-unittests: 0 findings (no issues)
    • ios: 0 findings (no issues)
  • PMD: 0 findings (no issues) [Report archive]
  • Checkstyle: 0 findings (no issues) [Report archive]

Generated automatically by the PR CI workflow.

CopilotAI review requested due to automatic review settings July 24, 2026 15:18
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 149 screenshots: 149 matched.
✅ Native iOS Metal screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 611 seconds

Build and Run Timing

MetricDuration
Simulator Boot96000 ms
Simulator Boot (Run)0 ms
App Install19000 ms
App Launch33000 ms
Test Execution1071000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 78ms / native 5ms = 15.6x speedup
SIMD float-mul (64K x300)java 70ms / native 2ms = 35.0x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode171.000 ms
Base64 CN1 decode171.000 ms
Base64 native encode327.000 ms
Base64 encode ratio (CN1/native)0.523x (47.7% faster)
Base64 native decode488.000 ms
Base64 decode ratio (CN1/native)0.350x (65.0% faster)
Base64 SIMD encode91.000 ms
Base64 encode ratio (SIMD/CN1)0.532x (46.8% faster)
Base64 SIMD decode68.000 ms
Base64 decode ratio (SIMD/CN1)0.398x (60.2% faster)
Base64 encode ratio (SIMD/native)0.278x (72.2% faster)
Base64 decode ratio (SIMD/native)0.139x (86.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)18.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.056x (94.4% faster)
Image applyMask (SIMD off)44.000 ms
Image applyMask (SIMD on)32.000 ms
Image applyMask ratio (SIMD on/off)0.727x (27.3% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)30.000 ms
Image modifyAlpha ratio (SIMD on/off)0.909x (9.1% faster)
Image modifyAlpha removeColor (SIMD off)53.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.585x (41.5% faster)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 144 screenshots: 144 matched.
✅ Native Apple TV (tvOS, Metal) screenshot tests passed.

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 143 screenshots: 143 matched.
✅ Native iOS screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 264 seconds

Build and Run Timing

MetricDuration
Simulator Boot60000 ms
Simulator Boot (Run)0 ms
App Install12000 ms
App Launch1000 ms
Test Execution732000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 81ms / native 3ms = 27.0x speedup
SIMD float-mul (64K x300)java 67ms / native 4ms = 16.7x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode161.000 ms
Base64 CN1 decode142.000 ms
Base64 native encode458.000 ms
Base64 encode ratio (CN1/native)0.352x (64.8% faster)
Base64 native decode215.000 ms
Base64 decode ratio (CN1/native)0.660x (34.0% faster)
Base64 SIMD encode48.000 ms
Base64 encode ratio (SIMD/CN1)0.298x (70.2% faster)
Base64 SIMD decode45.000 ms
Base64 decode ratio (SIMD/CN1)0.317x (68.3% faster)
Base64 encode ratio (SIMD/native)0.105x (89.5% faster)
Base64 decode ratio (SIMD/native)0.209x (79.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)6.000 ms
Image createMask (SIMD on)2.000 ms
Image createMask ratio (SIMD on/off)0.333x (66.7% faster)
Image applyMask (SIMD off)46.000 ms
Image applyMask (SIMD on)39.000 ms
Image applyMask ratio (SIMD on/off)0.848x (15.2% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)34.000 ms
Image modifyAlpha ratio (SIMD on/off)1.030x (3.0% slower)
Image modifyAlpha removeColor (SIMD off)34.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.912x (8.8% faster)

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
CopilotAI review requested due to automatic review settings July 24, 2026 15:44
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 148 screenshots: 148 matched.
✅ Native Mac screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 250 seconds

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 57ms / native 3ms = 19.0x speedup
SIMD float-mul (64K x300)java 55ms / native 3ms = 18.3x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode170.000 ms
Base64 CN1 decode149.000 ms
Base64 native encode664.000 ms
Base64 encode ratio (CN1/native)0.256x (74.4% faster)
Base64 native decode410.000 ms
Base64 decode ratio (CN1/native)0.363x (63.7% faster)
Base64 SIMD encode57.000 ms
Base64 encode ratio (SIMD/CN1)0.335x (66.5% faster)
Base64 SIMD decode52.000 ms
Base64 decode ratio (SIMD/CN1)0.349x (65.1% faster)
Base64 encode ratio (SIMD/native)0.086x (91.4% faster)
Base64 decode ratio (SIMD/native)0.127x (87.3% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)8.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.125x (87.5% faster)
Image applyMask (SIMD off)95.000 ms
Image applyMask (SIMD on)62.000 ms
Image applyMask ratio (SIMD on/off)0.653x (34.7% faster)
Image modifyAlpha (SIMD off)52.000 ms
Image modifyAlpha (SIMD on)46.000 ms
Image modifyAlpha ratio (SIMD on/off)0.885x (11.5% faster)
Image modifyAlpha removeColor (SIMD off)56.000 ms
Image modifyAlpha removeColor (SIMD on)57.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)1.018x (1.8% slower)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 217 screenshots: 217 matched.
✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

CopilotAI review requested due to automatic review settings July 24, 2026 17:37

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

@shai-almog
shai-almog merged commit 2f22507 into masterJul 26, 2026
41 checks passed
@shai-almog
shai-almog deleted the fix-android-spotbugs-calendar-branch branch July 26, 2026 13:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Enforce Android SpotBugs and default to API 36 - #5451

Merged
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch
Jul 26, 2026
Merged

Enforce Android SpotBugs and default to API 36#5451
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch

Conversation

@shai-almog

@shai-almogshai-almog commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • remove the redundant Android calendar column branch reported by SpotBugs
  • make the Android Maven verification fail on every non-whitelisted SpotBugs finding
  • retain XML report generation for the CI quality summary
  • raise the Gradle 8 Android compile and target SDK floor from API 33 to API 36
  • update the developer guide to describe the API 36 default

SpotBugs fix

Events.CALENDAR_ID and Instances.CALENDAR_ID resolve to the same Android Calendar Provider column name, so selecting between them produced identical bytecode branches and triggered DB_DUPLICATE_BRANCHES.

The Android module generated SpotBugs reports but did not run the plugin's check goal, so findings outside the exclusion filter did not fail Maven verification. The configuration also makes SpotBugs execution and analysis errors fail the build instead of silently producing an incomplete report.

Android API 36

The open-source Gradle 8 builder selects the highest installed Android platform but previously allowed API 33 as its minimum. It now requires API 36 as the default floor while continuing to honor explicit android.targetSDKVersion overrides. Generated projects also guarantee that compileSdk is never lower than targetSdk, independently of the selected Build Tools package.

Cloud builds receive the matching default in codenameone/BuildDaemon#157.

Validation

  • Java 8 Android Maven verify with the compile-android profile
  • SpotBugs: BugInstance size is 0
  • SpotBugs: Error size is 0
  • AndroidGradleBuilderSdkVersionTest: 3 tests passed
  • Maven: BUILD SUCCESS

CopilotAI review requested due to automatic review settings July 24, 2026 13:34
@shai-almogshai-almog changed the title Fix Android SpotBugs calendar warningEnforce Android SpotBugs and default to API 36Jul 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Updates the Android build and QA pipeline to eliminate a SpotBugs duplicate-branch warning in calendar queries and ensure SpotBugs findings fail Maven verification while still emitting CI-consumable XML reports.

Changes:

  • Simplifies Android Calendar Provider filtering to remove a redundant column-selection branch flagged by SpotBugs.
  • Tightens SpotBugs enforcement in the Android Maven module by failing verification on non-excluded findings.
  • Raises the Android SDK floor used by the Gradle-based Android builder and aligns the developer documentation.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

FileDescription
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.javaRaises the minimum Android platform API used by the builder.
maven/android/pom.xmlMakes SpotBugs failures block mvn verify and adds the check goal while keeping XML output.
docs/developer-guide/Advanced-Topics-Under-The-Hood.asciidocUpdates docs to reflect the new Android SDK floor.
Ports/Android/src/com/codename1/impl/android/AndroidCalendarSource.javaRemoves SpotBugs-triggering duplicate branches by using a single calendar id column constant.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
Comment threadPorts/Android/src/com/codename1/impl/android/AndroidCalendarSource.java Outdated
CopilotAI review requested due to automatic review settings July 24, 2026 13:50

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 385ms / native 180ms = 2.1x speedup
SIMD float-mul (64K x300)java 147ms / native 179ms = 0.8x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode80.000 ms
Base64 CN1 decode86.000 ms
Base64 native encode338.000 ms
Base64 encode ratio (CN1/native)0.237x (76.3% faster)
Base64 native decode271.000 ms
Base64 decode ratio (CN1/native)0.317x (68.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

CopilotAI review requested due to automatic review settings July 24, 2026 14:13
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

Static Analysis

  • SpotBugs[Report archive]
    • ByteCodeTranslator: 0 findings (no issues)
    • android: 0 findings (no issues)
    • codenameone-maven-plugin: 0 findings (no issues)
    • core-unittests: 0 findings (no issues)
    • ios: 0 findings (no issues)
  • PMD: 0 findings (no issues) [Report archive]
  • Checkstyle: 0 findings (no issues) [Report archive]

Generated automatically by the PR CI workflow.

CopilotAI review requested due to automatic review settings July 24, 2026 15:18
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 149 screenshots: 149 matched.
✅ Native iOS Metal screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 611 seconds

Build and Run Timing

MetricDuration
Simulator Boot96000 ms
Simulator Boot (Run)0 ms
App Install19000 ms
App Launch33000 ms
Test Execution1071000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 78ms / native 5ms = 15.6x speedup
SIMD float-mul (64K x300)java 70ms / native 2ms = 35.0x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode171.000 ms
Base64 CN1 decode171.000 ms
Base64 native encode327.000 ms
Base64 encode ratio (CN1/native)0.523x (47.7% faster)
Base64 native decode488.000 ms
Base64 decode ratio (CN1/native)0.350x (65.0% faster)
Base64 SIMD encode91.000 ms
Base64 encode ratio (SIMD/CN1)0.532x (46.8% faster)
Base64 SIMD decode68.000 ms
Base64 decode ratio (SIMD/CN1)0.398x (60.2% faster)
Base64 encode ratio (SIMD/native)0.278x (72.2% faster)
Base64 decode ratio (SIMD/native)0.139x (86.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)18.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.056x (94.4% faster)
Image applyMask (SIMD off)44.000 ms
Image applyMask (SIMD on)32.000 ms
Image applyMask ratio (SIMD on/off)0.727x (27.3% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)30.000 ms
Image modifyAlpha ratio (SIMD on/off)0.909x (9.1% faster)
Image modifyAlpha removeColor (SIMD off)53.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.585x (41.5% faster)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 144 screenshots: 144 matched.
✅ Native Apple TV (tvOS, Metal) screenshot tests passed.

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 143 screenshots: 143 matched.
✅ Native iOS screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 264 seconds

Build and Run Timing

MetricDuration
Simulator Boot60000 ms
Simulator Boot (Run)0 ms
App Install12000 ms
App Launch1000 ms
Test Execution732000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 81ms / native 3ms = 27.0x speedup
SIMD float-mul (64K x300)java 67ms / native 4ms = 16.7x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode161.000 ms
Base64 CN1 decode142.000 ms
Base64 native encode458.000 ms
Base64 encode ratio (CN1/native)0.352x (64.8% faster)
Base64 native decode215.000 ms
Base64 decode ratio (CN1/native)0.660x (34.0% faster)
Base64 SIMD encode48.000 ms
Base64 encode ratio (SIMD/CN1)0.298x (70.2% faster)
Base64 SIMD decode45.000 ms
Base64 decode ratio (SIMD/CN1)0.317x (68.3% faster)
Base64 encode ratio (SIMD/native)0.105x (89.5% faster)
Base64 decode ratio (SIMD/native)0.209x (79.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)6.000 ms
Image createMask (SIMD on)2.000 ms
Image createMask ratio (SIMD on/off)0.333x (66.7% faster)
Image applyMask (SIMD off)46.000 ms
Image applyMask (SIMD on)39.000 ms
Image applyMask ratio (SIMD on/off)0.848x (15.2% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)34.000 ms
Image modifyAlpha ratio (SIMD on/off)1.030x (3.0% slower)
Image modifyAlpha removeColor (SIMD off)34.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.912x (8.8% faster)

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
CopilotAI review requested due to automatic review settings July 24, 2026 15:44
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 148 screenshots: 148 matched.
✅ Native Mac screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 250 seconds

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 57ms / native 3ms = 19.0x speedup
SIMD float-mul (64K x300)java 55ms / native 3ms = 18.3x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode170.000 ms
Base64 CN1 decode149.000 ms
Base64 native encode664.000 ms
Base64 encode ratio (CN1/native)0.256x (74.4% faster)
Base64 native decode410.000 ms
Base64 decode ratio (CN1/native)0.363x (63.7% faster)
Base64 SIMD encode57.000 ms
Base64 encode ratio (SIMD/CN1)0.335x (66.5% faster)
Base64 SIMD decode52.000 ms
Base64 decode ratio (SIMD/CN1)0.349x (65.1% faster)
Base64 encode ratio (SIMD/native)0.086x (91.4% faster)
Base64 decode ratio (SIMD/native)0.127x (87.3% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)8.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.125x (87.5% faster)
Image applyMask (SIMD off)95.000 ms
Image applyMask (SIMD on)62.000 ms
Image applyMask ratio (SIMD on/off)0.653x (34.7% faster)
Image modifyAlpha (SIMD off)52.000 ms
Image modifyAlpha (SIMD on)46.000 ms
Image modifyAlpha ratio (SIMD on/off)0.885x (11.5% faster)
Image modifyAlpha removeColor (SIMD off)56.000 ms
Image modifyAlpha removeColor (SIMD on)57.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)1.018x (1.8% slower)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 217 screenshots: 217 matched.
✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

CopilotAI review requested due to automatic review settings July 24, 2026 17:37

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

@shai-almog
shai-almog merged commit 2f22507 into masterJul 26, 2026
41 checks passed
@shai-almog
shai-almog deleted the fix-android-spotbugs-calendar-branch branch July 26, 2026 13:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Enforce Android SpotBugs and default to API 36 - #5451

Merged
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch
Jul 26, 2026
Merged

Enforce Android SpotBugs and default to API 36#5451
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch

Conversation

@shai-almog

@shai-almogshai-almog commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • remove the redundant Android calendar column branch reported by SpotBugs
  • make the Android Maven verification fail on every non-whitelisted SpotBugs finding
  • retain XML report generation for the CI quality summary
  • raise the Gradle 8 Android compile and target SDK floor from API 33 to API 36
  • update the developer guide to describe the API 36 default

SpotBugs fix

Events.CALENDAR_ID and Instances.CALENDAR_ID resolve to the same Android Calendar Provider column name, so selecting between them produced identical bytecode branches and triggered DB_DUPLICATE_BRANCHES.

The Android module generated SpotBugs reports but did not run the plugin's check goal, so findings outside the exclusion filter did not fail Maven verification. The configuration also makes SpotBugs execution and analysis errors fail the build instead of silently producing an incomplete report.

Android API 36

The open-source Gradle 8 builder selects the highest installed Android platform but previously allowed API 33 as its minimum. It now requires API 36 as the default floor while continuing to honor explicit android.targetSDKVersion overrides. Generated projects also guarantee that compileSdk is never lower than targetSdk, independently of the selected Build Tools package.

Cloud builds receive the matching default in codenameone/BuildDaemon#157.

Validation

  • Java 8 Android Maven verify with the compile-android profile
  • SpotBugs: BugInstance size is 0
  • SpotBugs: Error size is 0
  • AndroidGradleBuilderSdkVersionTest: 3 tests passed
  • Maven: BUILD SUCCESS

CopilotAI review requested due to automatic review settings July 24, 2026 13:34
@shai-almogshai-almog changed the title Fix Android SpotBugs calendar warningEnforce Android SpotBugs and default to API 36Jul 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Updates the Android build and QA pipeline to eliminate a SpotBugs duplicate-branch warning in calendar queries and ensure SpotBugs findings fail Maven verification while still emitting CI-consumable XML reports.

Changes:

  • Simplifies Android Calendar Provider filtering to remove a redundant column-selection branch flagged by SpotBugs.
  • Tightens SpotBugs enforcement in the Android Maven module by failing verification on non-excluded findings.
  • Raises the Android SDK floor used by the Gradle-based Android builder and aligns the developer documentation.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

FileDescription
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.javaRaises the minimum Android platform API used by the builder.
maven/android/pom.xmlMakes SpotBugs failures block mvn verify and adds the check goal while keeping XML output.
docs/developer-guide/Advanced-Topics-Under-The-Hood.asciidocUpdates docs to reflect the new Android SDK floor.
Ports/Android/src/com/codename1/impl/android/AndroidCalendarSource.javaRemoves SpotBugs-triggering duplicate branches by using a single calendar id column constant.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
Comment threadPorts/Android/src/com/codename1/impl/android/AndroidCalendarSource.java Outdated
CopilotAI review requested due to automatic review settings July 24, 2026 13:50

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 385ms / native 180ms = 2.1x speedup
SIMD float-mul (64K x300)java 147ms / native 179ms = 0.8x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode80.000 ms
Base64 CN1 decode86.000 ms
Base64 native encode338.000 ms
Base64 encode ratio (CN1/native)0.237x (76.3% faster)
Base64 native decode271.000 ms
Base64 decode ratio (CN1/native)0.317x (68.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

CopilotAI review requested due to automatic review settings July 24, 2026 14:13
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

Static Analysis

  • SpotBugs[Report archive]
    • ByteCodeTranslator: 0 findings (no issues)
    • android: 0 findings (no issues)
    • codenameone-maven-plugin: 0 findings (no issues)
    • core-unittests: 0 findings (no issues)
    • ios: 0 findings (no issues)
  • PMD: 0 findings (no issues) [Report archive]
  • Checkstyle: 0 findings (no issues) [Report archive]

Generated automatically by the PR CI workflow.

CopilotAI review requested due to automatic review settings July 24, 2026 15:18
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 149 screenshots: 149 matched.
✅ Native iOS Metal screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 611 seconds

Build and Run Timing

MetricDuration
Simulator Boot96000 ms
Simulator Boot (Run)0 ms
App Install19000 ms
App Launch33000 ms
Test Execution1071000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 78ms / native 5ms = 15.6x speedup
SIMD float-mul (64K x300)java 70ms / native 2ms = 35.0x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode171.000 ms
Base64 CN1 decode171.000 ms
Base64 native encode327.000 ms
Base64 encode ratio (CN1/native)0.523x (47.7% faster)
Base64 native decode488.000 ms
Base64 decode ratio (CN1/native)0.350x (65.0% faster)
Base64 SIMD encode91.000 ms
Base64 encode ratio (SIMD/CN1)0.532x (46.8% faster)
Base64 SIMD decode68.000 ms
Base64 decode ratio (SIMD/CN1)0.398x (60.2% faster)
Base64 encode ratio (SIMD/native)0.278x (72.2% faster)
Base64 decode ratio (SIMD/native)0.139x (86.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)18.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.056x (94.4% faster)
Image applyMask (SIMD off)44.000 ms
Image applyMask (SIMD on)32.000 ms
Image applyMask ratio (SIMD on/off)0.727x (27.3% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)30.000 ms
Image modifyAlpha ratio (SIMD on/off)0.909x (9.1% faster)
Image modifyAlpha removeColor (SIMD off)53.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.585x (41.5% faster)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 144 screenshots: 144 matched.
✅ Native Apple TV (tvOS, Metal) screenshot tests passed.

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 143 screenshots: 143 matched.
✅ Native iOS screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 264 seconds

Build and Run Timing

MetricDuration
Simulator Boot60000 ms
Simulator Boot (Run)0 ms
App Install12000 ms
App Launch1000 ms
Test Execution732000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 81ms / native 3ms = 27.0x speedup
SIMD float-mul (64K x300)java 67ms / native 4ms = 16.7x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode161.000 ms
Base64 CN1 decode142.000 ms
Base64 native encode458.000 ms
Base64 encode ratio (CN1/native)0.352x (64.8% faster)
Base64 native decode215.000 ms
Base64 decode ratio (CN1/native)0.660x (34.0% faster)
Base64 SIMD encode48.000 ms
Base64 encode ratio (SIMD/CN1)0.298x (70.2% faster)
Base64 SIMD decode45.000 ms
Base64 decode ratio (SIMD/CN1)0.317x (68.3% faster)
Base64 encode ratio (SIMD/native)0.105x (89.5% faster)
Base64 decode ratio (SIMD/native)0.209x (79.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)6.000 ms
Image createMask (SIMD on)2.000 ms
Image createMask ratio (SIMD on/off)0.333x (66.7% faster)
Image applyMask (SIMD off)46.000 ms
Image applyMask (SIMD on)39.000 ms
Image applyMask ratio (SIMD on/off)0.848x (15.2% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)34.000 ms
Image modifyAlpha ratio (SIMD on/off)1.030x (3.0% slower)
Image modifyAlpha removeColor (SIMD off)34.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.912x (8.8% faster)

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
CopilotAI review requested due to automatic review settings July 24, 2026 15:44
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 148 screenshots: 148 matched.
✅ Native Mac screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 250 seconds

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 57ms / native 3ms = 19.0x speedup
SIMD float-mul (64K x300)java 55ms / native 3ms = 18.3x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode170.000 ms
Base64 CN1 decode149.000 ms
Base64 native encode664.000 ms
Base64 encode ratio (CN1/native)0.256x (74.4% faster)
Base64 native decode410.000 ms
Base64 decode ratio (CN1/native)0.363x (63.7% faster)
Base64 SIMD encode57.000 ms
Base64 encode ratio (SIMD/CN1)0.335x (66.5% faster)
Base64 SIMD decode52.000 ms
Base64 decode ratio (SIMD/CN1)0.349x (65.1% faster)
Base64 encode ratio (SIMD/native)0.086x (91.4% faster)
Base64 decode ratio (SIMD/native)0.127x (87.3% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)8.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.125x (87.5% faster)
Image applyMask (SIMD off)95.000 ms
Image applyMask (SIMD on)62.000 ms
Image applyMask ratio (SIMD on/off)0.653x (34.7% faster)
Image modifyAlpha (SIMD off)52.000 ms
Image modifyAlpha (SIMD on)46.000 ms
Image modifyAlpha ratio (SIMD on/off)0.885x (11.5% faster)
Image modifyAlpha removeColor (SIMD off)56.000 ms
Image modifyAlpha removeColor (SIMD on)57.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)1.018x (1.8% slower)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 217 screenshots: 217 matched.
✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

CopilotAI review requested due to automatic review settings July 24, 2026 17:37

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

@shai-almog
shai-almog merged commit 2f22507 into masterJul 26, 2026
41 checks passed
@shai-almog
shai-almog deleted the fix-android-spotbugs-calendar-branch branch July 26, 2026 13:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Enforce Android SpotBugs and default to API 36 - #5451

Merged
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch
Jul 26, 2026
Merged

Enforce Android SpotBugs and default to API 36#5451
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch

Conversation

@shai-almog

@shai-almogshai-almog commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • remove the redundant Android calendar column branch reported by SpotBugs
  • make the Android Maven verification fail on every non-whitelisted SpotBugs finding
  • retain XML report generation for the CI quality summary
  • raise the Gradle 8 Android compile and target SDK floor from API 33 to API 36
  • update the developer guide to describe the API 36 default

SpotBugs fix

Events.CALENDAR_ID and Instances.CALENDAR_ID resolve to the same Android Calendar Provider column name, so selecting between them produced identical bytecode branches and triggered DB_DUPLICATE_BRANCHES.

The Android module generated SpotBugs reports but did not run the plugin's check goal, so findings outside the exclusion filter did not fail Maven verification. The configuration also makes SpotBugs execution and analysis errors fail the build instead of silently producing an incomplete report.

Android API 36

The open-source Gradle 8 builder selects the highest installed Android platform but previously allowed API 33 as its minimum. It now requires API 36 as the default floor while continuing to honor explicit android.targetSDKVersion overrides. Generated projects also guarantee that compileSdk is never lower than targetSdk, independently of the selected Build Tools package.

Cloud builds receive the matching default in codenameone/BuildDaemon#157.

Validation

  • Java 8 Android Maven verify with the compile-android profile
  • SpotBugs: BugInstance size is 0
  • SpotBugs: Error size is 0
  • AndroidGradleBuilderSdkVersionTest: 3 tests passed
  • Maven: BUILD SUCCESS

CopilotAI review requested due to automatic review settings July 24, 2026 13:34
@shai-almogshai-almog changed the title Fix Android SpotBugs calendar warningEnforce Android SpotBugs and default to API 36Jul 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Updates the Android build and QA pipeline to eliminate a SpotBugs duplicate-branch warning in calendar queries and ensure SpotBugs findings fail Maven verification while still emitting CI-consumable XML reports.

Changes:

  • Simplifies Android Calendar Provider filtering to remove a redundant column-selection branch flagged by SpotBugs.
  • Tightens SpotBugs enforcement in the Android Maven module by failing verification on non-excluded findings.
  • Raises the Android SDK floor used by the Gradle-based Android builder and aligns the developer documentation.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

FileDescription
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.javaRaises the minimum Android platform API used by the builder.
maven/android/pom.xmlMakes SpotBugs failures block mvn verify and adds the check goal while keeping XML output.
docs/developer-guide/Advanced-Topics-Under-The-Hood.asciidocUpdates docs to reflect the new Android SDK floor.
Ports/Android/src/com/codename1/impl/android/AndroidCalendarSource.javaRemoves SpotBugs-triggering duplicate branches by using a single calendar id column constant.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
Comment threadPorts/Android/src/com/codename1/impl/android/AndroidCalendarSource.java Outdated
CopilotAI review requested due to automatic review settings July 24, 2026 13:50

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 385ms / native 180ms = 2.1x speedup
SIMD float-mul (64K x300)java 147ms / native 179ms = 0.8x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode80.000 ms
Base64 CN1 decode86.000 ms
Base64 native encode338.000 ms
Base64 encode ratio (CN1/native)0.237x (76.3% faster)
Base64 native decode271.000 ms
Base64 decode ratio (CN1/native)0.317x (68.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

CopilotAI review requested due to automatic review settings July 24, 2026 14:13
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

Static Analysis

  • SpotBugs[Report archive]
    • ByteCodeTranslator: 0 findings (no issues)
    • android: 0 findings (no issues)
    • codenameone-maven-plugin: 0 findings (no issues)
    • core-unittests: 0 findings (no issues)
    • ios: 0 findings (no issues)
  • PMD: 0 findings (no issues) [Report archive]
  • Checkstyle: 0 findings (no issues) [Report archive]

Generated automatically by the PR CI workflow.

CopilotAI review requested due to automatic review settings July 24, 2026 15:18
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 149 screenshots: 149 matched.
✅ Native iOS Metal screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 611 seconds

Build and Run Timing

MetricDuration
Simulator Boot96000 ms
Simulator Boot (Run)0 ms
App Install19000 ms
App Launch33000 ms
Test Execution1071000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 78ms / native 5ms = 15.6x speedup
SIMD float-mul (64K x300)java 70ms / native 2ms = 35.0x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode171.000 ms
Base64 CN1 decode171.000 ms
Base64 native encode327.000 ms
Base64 encode ratio (CN1/native)0.523x (47.7% faster)
Base64 native decode488.000 ms
Base64 decode ratio (CN1/native)0.350x (65.0% faster)
Base64 SIMD encode91.000 ms
Base64 encode ratio (SIMD/CN1)0.532x (46.8% faster)
Base64 SIMD decode68.000 ms
Base64 decode ratio (SIMD/CN1)0.398x (60.2% faster)
Base64 encode ratio (SIMD/native)0.278x (72.2% faster)
Base64 decode ratio (SIMD/native)0.139x (86.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)18.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.056x (94.4% faster)
Image applyMask (SIMD off)44.000 ms
Image applyMask (SIMD on)32.000 ms
Image applyMask ratio (SIMD on/off)0.727x (27.3% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)30.000 ms
Image modifyAlpha ratio (SIMD on/off)0.909x (9.1% faster)
Image modifyAlpha removeColor (SIMD off)53.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.585x (41.5% faster)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 144 screenshots: 144 matched.
✅ Native Apple TV (tvOS, Metal) screenshot tests passed.

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 143 screenshots: 143 matched.
✅ Native iOS screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 264 seconds

Build and Run Timing

MetricDuration
Simulator Boot60000 ms
Simulator Boot (Run)0 ms
App Install12000 ms
App Launch1000 ms
Test Execution732000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 81ms / native 3ms = 27.0x speedup
SIMD float-mul (64K x300)java 67ms / native 4ms = 16.7x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode161.000 ms
Base64 CN1 decode142.000 ms
Base64 native encode458.000 ms
Base64 encode ratio (CN1/native)0.352x (64.8% faster)
Base64 native decode215.000 ms
Base64 decode ratio (CN1/native)0.660x (34.0% faster)
Base64 SIMD encode48.000 ms
Base64 encode ratio (SIMD/CN1)0.298x (70.2% faster)
Base64 SIMD decode45.000 ms
Base64 decode ratio (SIMD/CN1)0.317x (68.3% faster)
Base64 encode ratio (SIMD/native)0.105x (89.5% faster)
Base64 decode ratio (SIMD/native)0.209x (79.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)6.000 ms
Image createMask (SIMD on)2.000 ms
Image createMask ratio (SIMD on/off)0.333x (66.7% faster)
Image applyMask (SIMD off)46.000 ms
Image applyMask (SIMD on)39.000 ms
Image applyMask ratio (SIMD on/off)0.848x (15.2% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)34.000 ms
Image modifyAlpha ratio (SIMD on/off)1.030x (3.0% slower)
Image modifyAlpha removeColor (SIMD off)34.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.912x (8.8% faster)

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
CopilotAI review requested due to automatic review settings July 24, 2026 15:44
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 148 screenshots: 148 matched.
✅ Native Mac screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 250 seconds

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 57ms / native 3ms = 19.0x speedup
SIMD float-mul (64K x300)java 55ms / native 3ms = 18.3x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode170.000 ms
Base64 CN1 decode149.000 ms
Base64 native encode664.000 ms
Base64 encode ratio (CN1/native)0.256x (74.4% faster)
Base64 native decode410.000 ms
Base64 decode ratio (CN1/native)0.363x (63.7% faster)
Base64 SIMD encode57.000 ms
Base64 encode ratio (SIMD/CN1)0.335x (66.5% faster)
Base64 SIMD decode52.000 ms
Base64 decode ratio (SIMD/CN1)0.349x (65.1% faster)
Base64 encode ratio (SIMD/native)0.086x (91.4% faster)
Base64 decode ratio (SIMD/native)0.127x (87.3% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)8.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.125x (87.5% faster)
Image applyMask (SIMD off)95.000 ms
Image applyMask (SIMD on)62.000 ms
Image applyMask ratio (SIMD on/off)0.653x (34.7% faster)
Image modifyAlpha (SIMD off)52.000 ms
Image modifyAlpha (SIMD on)46.000 ms
Image modifyAlpha ratio (SIMD on/off)0.885x (11.5% faster)
Image modifyAlpha removeColor (SIMD off)56.000 ms
Image modifyAlpha removeColor (SIMD on)57.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)1.018x (1.8% slower)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 217 screenshots: 217 matched.
✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

CopilotAI review requested due to automatic review settings July 24, 2026 17:37

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

@shai-almog
shai-almog merged commit 2f22507 into masterJul 26, 2026
41 checks passed
@shai-almog
shai-almog deleted the fix-android-spotbugs-calendar-branch branch July 26, 2026 13:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@shai-almog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Enforce Android SpotBugs and default to API 36 - #5451

Merged
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch
Jul 26, 2026
Merged

Enforce Android SpotBugs and default to API 36#5451
shai-almog merged 6 commits into
masterfrom
fix-android-spotbugs-calendar-branch

Conversation

@shai-almog

@shai-almogshai-almog commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • remove the redundant Android calendar column branch reported by SpotBugs
  • make the Android Maven verification fail on every non-whitelisted SpotBugs finding
  • retain XML report generation for the CI quality summary
  • raise the Gradle 8 Android compile and target SDK floor from API 33 to API 36
  • update the developer guide to describe the API 36 default

SpotBugs fix

Events.CALENDAR_ID and Instances.CALENDAR_ID resolve to the same Android Calendar Provider column name, so selecting between them produced identical bytecode branches and triggered DB_DUPLICATE_BRANCHES.

The Android module generated SpotBugs reports but did not run the plugin's check goal, so findings outside the exclusion filter did not fail Maven verification. The configuration also makes SpotBugs execution and analysis errors fail the build instead of silently producing an incomplete report.

Android API 36

The open-source Gradle 8 builder selects the highest installed Android platform but previously allowed API 33 as its minimum. It now requires API 36 as the default floor while continuing to honor explicit android.targetSDKVersion overrides. Generated projects also guarantee that compileSdk is never lower than targetSdk, independently of the selected Build Tools package.

Cloud builds receive the matching default in codenameone/BuildDaemon#157.

Validation

  • Java 8 Android Maven verify with the compile-android profile
  • SpotBugs: BugInstance size is 0
  • SpotBugs: Error size is 0
  • AndroidGradleBuilderSdkVersionTest: 3 tests passed
  • Maven: BUILD SUCCESS

CopilotAI review requested due to automatic review settings July 24, 2026 13:34
@shai-almogshai-almog changed the title Fix Android SpotBugs calendar warningEnforce Android SpotBugs and default to API 36Jul 24, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Updates the Android build and QA pipeline to eliminate a SpotBugs duplicate-branch warning in calendar queries and ensure SpotBugs findings fail Maven verification while still emitting CI-consumable XML reports.

Changes:

  • Simplifies Android Calendar Provider filtering to remove a redundant column-selection branch flagged by SpotBugs.
  • Tightens SpotBugs enforcement in the Android Maven module by failing verification on non-excluded findings.
  • Raises the Android SDK floor used by the Gradle-based Android builder and aligns the developer documentation.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

FileDescription
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.javaRaises the minimum Android platform API used by the builder.
maven/android/pom.xmlMakes SpotBugs failures block mvn verify and adds the check goal while keeping XML output.
docs/developer-guide/Advanced-Topics-Under-The-Hood.asciidocUpdates docs to reflect the new Android SDK floor.
Ports/Android/src/com/codename1/impl/android/AndroidCalendarSource.javaRemoves SpotBugs-triggering duplicate branches by using a single calendar id column constant.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
Comment threadPorts/Android/src/com/codename1/impl/android/AndroidCalendarSource.java Outdated
CopilotAI review requested due to automatic review settings July 24, 2026 13:50

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 151 screenshots: 151 matched.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 11.37% (12198/107277 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 10.24% (60552/591483), branch 5.31% (2884/54275), complexity 5.03% (2846/56573), method 7.53% (2181/28950), class 11.89% (492/4138)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6327 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.ClassReader – 0.00% (0/1519 lines covered)
      • kotlin.collections.kotlin.collections.CollectionsKt___CollectionsKt – 0.00% (0/1148 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.MethodWriter – 0.00% (0/923 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/730 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/623 lines covered)
      • org.jacoco.agent.rt.internal_b6258fc.asm.org.jacoco.agent.rt.internal_b6258fc.asm.Frame – 0.00% (0/564 lines covered)
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysJvmKt – 0.00% (0/495 lines covered)

Benchmark Results

Detailed Performance Metrics

MetricDuration
SIMD kernel backendscalar fallback (no native SIMD)
SIMD int-add (64K x300)java 385ms / native 180ms = 2.1x speedup
SIMD float-mul (64K x300)java 147ms / native 179ms = 0.8x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathgated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode80.000 ms
Base64 CN1 decode86.000 ms
Base64 native encode338.000 ms
Base64 encode ratio (CN1/native)0.237x (76.3% faster)
Base64 native decode271.000 ms
Base64 decode ratio (CN1/native)0.317x (68.3% faster)
Image encode benchmark statusskipped (SIMD unsupported)

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

CopilotAI review requested due to automatic review settings July 24, 2026 14:13
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Comment threaddocs/developer-guide/Advanced-Topics-Under-The-Hood.asciidoc Outdated
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 181 screenshots: 181 matched.
✅ JavaScript-port screenshot tests passed.

@github-actions

github-actionsBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

Static Analysis

  • SpotBugs[Report archive]
    • ByteCodeTranslator: 0 findings (no issues)
    • android: 0 findings (no issues)
    • codenameone-maven-plugin: 0 findings (no issues)
    • core-unittests: 0 findings (no issues)
    • ios: 0 findings (no issues)
  • PMD: 0 findings (no issues) [Report archive]
  • Checkstyle: 0 findings (no issues) [Report archive]

Generated automatically by the PR CI workflow.

CopilotAI review requested due to automatic review settings July 24, 2026 15:18
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 149 screenshots: 149 matched.
✅ Native iOS Metal screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 611 seconds

Build and Run Timing

MetricDuration
Simulator Boot96000 ms
Simulator Boot (Run)0 ms
App Install19000 ms
App Launch33000 ms
Test Execution1071000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 78ms / native 5ms = 15.6x speedup
SIMD float-mul (64K x300)java 70ms / native 2ms = 35.0x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode171.000 ms
Base64 CN1 decode171.000 ms
Base64 native encode327.000 ms
Base64 encode ratio (CN1/native)0.523x (47.7% faster)
Base64 native decode488.000 ms
Base64 decode ratio (CN1/native)0.350x (65.0% faster)
Base64 SIMD encode91.000 ms
Base64 encode ratio (SIMD/CN1)0.532x (46.8% faster)
Base64 SIMD decode68.000 ms
Base64 decode ratio (SIMD/CN1)0.398x (60.2% faster)
Base64 encode ratio (SIMD/native)0.278x (72.2% faster)
Base64 decode ratio (SIMD/native)0.139x (86.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)18.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.056x (94.4% faster)
Image applyMask (SIMD off)44.000 ms
Image applyMask (SIMD on)32.000 ms
Image applyMask ratio (SIMD on/off)0.727x (27.3% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)30.000 ms
Image modifyAlpha ratio (SIMD on/off)0.909x (9.1% faster)
Image modifyAlpha removeColor (SIMD off)53.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.585x (41.5% faster)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 144 screenshots: 144 matched.
✅ Native Apple TV (tvOS, Metal) screenshot tests passed.

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 143 screenshots: 143 matched.
✅ Native iOS screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 264 seconds

Build and Run Timing

MetricDuration
Simulator Boot60000 ms
Simulator Boot (Run)0 ms
App Install12000 ms
App Launch1000 ms
Test Execution732000 ms

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 81ms / native 3ms = 27.0x speedup
SIMD float-mul (64K x300)java 67ms / native 4ms = 16.7x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode161.000 ms
Base64 CN1 decode142.000 ms
Base64 native encode458.000 ms
Base64 encode ratio (CN1/native)0.352x (64.8% faster)
Base64 native decode215.000 ms
Base64 decode ratio (CN1/native)0.660x (34.0% faster)
Base64 SIMD encode48.000 ms
Base64 encode ratio (SIMD/CN1)0.298x (70.2% faster)
Base64 SIMD decode45.000 ms
Base64 decode ratio (SIMD/CN1)0.317x (68.3% faster)
Base64 encode ratio (SIMD/native)0.105x (89.5% faster)
Base64 decode ratio (SIMD/native)0.209x (79.1% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)6.000 ms
Image createMask (SIMD on)2.000 ms
Image createMask ratio (SIMD on/off)0.333x (66.7% faster)
Image applyMask (SIMD off)46.000 ms
Image applyMask (SIMD on)39.000 ms
Image applyMask ratio (SIMD on/off)0.848x (15.2% faster)
Image modifyAlpha (SIMD off)33.000 ms
Image modifyAlpha (SIMD on)34.000 ms
Image modifyAlpha ratio (SIMD on/off)1.030x (3.0% slower)
Image modifyAlpha removeColor (SIMD off)34.000 ms
Image modifyAlpha removeColor (SIMD on)31.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)0.912x (8.8% faster)

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Comment threadmaven/android/pom.xml
Comment threadmaven/android/pom.xml
CopilotAI review requested due to automatic review settings July 24, 2026 15:44
@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 148 screenshots: 148 matched.
✅ Native Mac screenshot tests passed.

Benchmark Results

  • VM Translation Time: 0 seconds
  • Compilation Time: 250 seconds

Detailed Performance Metrics

MetricDuration
SIMD kernel backendSSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300)java 57ms / native 3ms = 19.0x speedup
SIMD float-mul (64K x300)java 55ms / native 3ms = 18.3x speedup
SIMD kernel correctnessPASS (native result == scalar reference)
Base64 payload size8192 bytes
Base64 benchmark iterations6000
Base64 SIMD byte pathactive (NEON-accelerated)
Base64 CN1 encode170.000 ms
Base64 CN1 decode149.000 ms
Base64 native encode664.000 ms
Base64 encode ratio (CN1/native)0.256x (74.4% faster)
Base64 native decode410.000 ms
Base64 decode ratio (CN1/native)0.363x (63.7% faster)
Base64 SIMD encode57.000 ms
Base64 encode ratio (SIMD/CN1)0.335x (66.5% faster)
Base64 SIMD decode52.000 ms
Base64 decode ratio (SIMD/CN1)0.349x (65.1% faster)
Base64 encode ratio (SIMD/native)0.086x (91.4% faster)
Base64 decode ratio (SIMD/native)0.127x (87.3% faster)
Image encode benchmark iterations100
Image createMask (SIMD off)8.000 ms
Image createMask (SIMD on)1.000 ms
Image createMask ratio (SIMD on/off)0.125x (87.5% faster)
Image applyMask (SIMD off)95.000 ms
Image applyMask (SIMD on)62.000 ms
Image applyMask ratio (SIMD on/off)0.653x (34.7% faster)
Image modifyAlpha (SIMD off)52.000 ms
Image modifyAlpha (SIMD on)46.000 ms
Image modifyAlpha ratio (SIMD on/off)0.885x (11.5% faster)
Image modifyAlpha removeColor (SIMD off)56.000 ms
Image modifyAlpha removeColor (SIMD on)57.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off)1.018x (1.8% slower)

@shai-almog

shai-almog commented Jul 24, 2026

Copy link
Copy Markdown
CollaboratorAuthor

Compared 217 screenshots: 217 matched.
✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

CopilotAI review requested due to automatic review settings July 24, 2026 17:37

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

@shai-almog
shai-almog merged commit 2f22507 into masterJul 26, 2026
41 checks passed
@shai-almog
shai-almog deleted the fix-android-spotbugs-calendar-branch branch July 26, 2026 13:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@shai-almog