diff --git a/langkit/generic_interface.py b/langkit/generic_interface.py index 43df650e5..6650afbda 100644 --- a/langkit/generic_interface.py +++ b/langkit/generic_interface.py @@ -287,7 +287,8 @@ def find_implementations_of_method( ) for m in class_members: if ( - m.original_name not in implementations + not m.is_internal + and m.original_name not in implementations and m.implements == method ): implementations[m.original_name] = m diff --git a/testsuite/tests/generic_interfaces/env_spec/foo.lkt b/testsuite/tests/generic_interfaces/env_spec/foo.lkt new file mode 100644 index 000000000..18e8fadc5 --- /dev/null +++ b/testsuite/tests/generic_interfaces/env_spec/foo.lkt @@ -0,0 +1,25 @@ +# Defining an env spec in a class implementing an interface used to cause a +# compilation error. + +import lexer_example + +grammar foo_grammar { + @main_rule main_rule <- BarNode("example") +} + +@generic_interface() +trait Interface { + fun method(): Bool +} + +class FooNode implements Node[FooNode] { +} + +class BarNode: FooNode implements Interface { + @exported + fun prop(): Bool implements Interface.method = true + + env_spec { + add_env() + } +} diff --git a/testsuite/tests/generic_interfaces/env_spec/test.out b/testsuite/tests/generic_interfaces/env_spec/test.out new file mode 100644 index 000000000..447c956ad --- /dev/null +++ b/testsuite/tests/generic_interfaces/env_spec/test.out @@ -0,0 +1,4 @@ +== foo.lkt == +Code generation was successful + +lkt_compile: Done diff --git a/testsuite/tests/generic_interfaces/env_spec/test.yaml b/testsuite/tests/generic_interfaces/env_spec/test.yaml new file mode 100644 index 000000000..4a499fbd3 --- /dev/null +++ b/testsuite/tests/generic_interfaces/env_spec/test.yaml @@ -0,0 +1 @@ +driver: lkt_compile