E03010: conflicts with a reference

Category: E03xxx Duplication checks · Reported in phase: REFERENCE_CHECKS · Classification: CONSTRUCT_REFERENCE_CONFLICT · All error codes

What went wrong

You've defined a local type (class, record, trait, function or text) with the same name as a type you've imported via 'references'. This creates ambiguity. A local construct named like a BUILT-IN type (a local class 'List', even beside 'references org.ek9.lang::List') is reported as E01090 instead - E03010 is the clash with a type referenced from another module.

Worked examples

Compilable examples demonstrating this error and the correct fix:

  • ek9 -q 832 (Why can't I have a local class with the same name as an ...)
  • ek9 -q 1392 (Why can't a variable, parameter or named capture have th...)

How to fix it

  • Rename your local type to be distinct
  • Or remove the reference and use fully qualified names when needed

Common causes

  • Importing a type then forgetting it's imported
  • Using generic names like 'Utils', 'Helper' that may conflict
  • A variable, parameter, loop variable or NAMED capture '(remote: 7)' named like something imported with 'references' - rename it

See also

  • E03010: LOCAL type vs REFERENCED type conflict
  • E03020: Two REFERENCES conflicting with each other
  • E01040: Duplicate LOCAL type definitions
  • E01090: a local construct named like a built-in type

Examples

Every example is compiled by the EK9 compiler: the first fails exactly as captioned, the others fix it.

Fails with E03010: conflicts with a reference

#!ek9
defines module error.e03010.bad

  //A reference says "use the one from that module" - even when that module is this one
  references
    error.e03010.bad::SharedClass
    error.e03010.bad::sharedFunction

  defines class

    SharedClass
      label as String: "local"
      default operator ?

  defines function

    sharedFunction()
      <- rtn as String: "local"

Fixed: Reference the other module's constructs and use them; do not define them again

#!ek9
defines module error.e03010.good

  references
    error.e03010.good.shared::SharedClass
    error.e03010.good.shared::sharedFunction

  defines function

    describe()
      <- rtn as String: `${sharedFunction()} ${SharedClass().label()}`

Fixed: Or keep your own definitions and drop the references

#!ek9
defines module error.e03010.good.local

  defines class

    SharedClass
      label as String: "local"
      default operator ?

  defines function

    sharedFunction()
      <- rtn as String: "local"

Fixed: The module that defines them, once

#!ek9
defines module error.e03010.good.shared

  defines class

    SharedClass
      text as String: "shared"

      label()
        <- rtn as String: text

      default operator ?

  defines function

    sharedFunction()
      <- rtn as String: "shared function"

Questions and answers

These Q&A entries show E03010 and its fix: