Skip to content

Evaluating Enum constructors should be a compile time error #48350

@bkonyi

Description

@bkonyi

Given the following enum declaration:

import 'dart:developer';                                                                                                                     
                                                                                                                                             
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart';
                                                                      
import 'common/service_test_common.dart';       
import 'common/test_helper.dart';                              
                                                                                                                                                                                                                                                                                           
class I1 {
  int interfaceMethod1() => 0;                              
  int get interfaceGetter1 => 0; 
  void set interfaceSetter1(int value) {}
}   
                                                                      
abstract class I2 {                                             
  int interfaceMethod2();                                                                                                                    
  int get interfaceGetter2;
  void set interfaceSetter2(int value);                                                                                                      
}                                                                                                                                            
                                                                      
mixin M on Object {             
  int mixedInMethod() => 42;                                                                                                                 
}                                      
                                                                      
enum E with M implements I1, I2 {
  e1,                                                           
  e2,                                  
  e3;                                 

  int interfaceMethod1() => 42;                                 
  int get interfaceGetter1 => 42;      
  void set interfaceSetter1(int value) {}
  int interfaceMethod2() => 42;
  int get interfaceGetter2 => 42;
  void set interfaceSetter2(int value) {}
}

Evaluating E(123, 'foo') via the VM service results in a valid instance of E being returned. I haven't tested with a simpler Enum declaration, but this is likely still an issue with simpler enums.

FYI @chloestefantsova @johnniwinther

Related to #47849 and #47870.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions