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