Skip to content

Final val of Java enum is not a constant value #21881

@som-snytt

Description

@som-snytt

Compiler version

3.5.2

Minimized code

class C: final val Seconds = java.util.concurrent.TimeUnit.SECONDS //inline val SecondSeconds = java.util.concurrent.TimeUnit.SECONDS // not a literal @OutputTimeUnit(Seconds) def f(): Unit = () @OutputTimeUnit(java.util.concurrent.TimeUnit.SECONDS) def ok(): Unit = ()

where

import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.concurrent.TimeUnit; @Inherited @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface OutputTimeUnit { /** * @return Time unit to use. */ TimeUnit value(); } 

Output

7 | @OutputTimeUnit(Seconds) | ^^^^^^^ | Annotation argument is not a constant

Expectation

Works as in Scala 2.

Spec says platform enum is a constant value expression; Seconds is a constant value definition.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions