[code-reflection] RFR: Improved error message on OpenCLBackend if Reflect annotation is missing on transitive methods from kernel method

Nadeesh TV ntv at openjdk.org
Wed Dec 31 00:14:26 UTC 2025


**Description** 
Currently, if we miss the **@Reflec**t annotation on methods called from kernel functions, no method is generated for them in the corresponding backend. This causes an error like:

`> error: implicit declaration of function 'squareitWithoutReflectAnnotation' is invalid...
`
**Solution** 
- Improved the error message by adding:  *"Did you miss @Reflect annotation on the above function?"* for such cases.

   - Tried throwing an early error on the Java side, but calls to certain methods (e.g., `hat.buffer.S32Array.length()`) lack @Reflect annotations yet map to native functions later. Therefore, I could not find an easy early Java-side validation.

**Test** 
  -  A new test is added at **hat.test.TestMissingReflectAnnotation#testTransitiveMethoFromKernelWithoutReflectAnnotation**
  - Output of the test case

UNSUPPORTED (log once): buildComputeProgram: cl2Metal failed
buildStatus = failed
logLen = 234 log  = program_source:68:37: error: implicit declaration of function 'squareitWithoutReflectAnnotation' is invalid in OpenCL
        array->array[(long)HAT_GIX]=squareitWithoutReflectAnnotation(value);
                                    ^

Did you miss @Reflect annotation on the above function?

Class: hat.test.TestMissingReflectAnnotation
Testing: #testComputeMethodWithoutReflectAnnotation..................... [passed]
Testing: #testKernelMethodWithoutReflectAnnotation..................... [passed]
Testing: #testTransitiveMethoFromKernelWithoutReflectAnnotation..................... [passed]

passed: 3, failed: 0, unsupported: 0, precision-errors: 0

-------------

Commit messages:
 - Removed extra whitespace
 - Improved error message on OpenCLBackend if Reflect annotation is missing on transitive methods from kernel method

Changes: https://git.openjdk.org/babylon/pull/798/files
  Webrev: https://webrevs.openjdk.org/?repo=babylon&pr=798&range=00
  Stats: 60 lines in 2 files changed: 45 ins; 5 del; 10 mod
  Patch: https://git.openjdk.org/babylon/pull/798.diff
  Fetch: git fetch https://git.openjdk.org/babylon.git pull/798/head:pull/798

PR: https://git.openjdk.org/babylon/pull/798


More information about the babylon-dev mailing list