Skip to content

Dotty creates unnecessary fields in anonymous classes, leading to memory leaks #2883

Closed
@smarter

Description

@smarter

Given:

class Wrapper(val value: Int)

abstract class Foo(val x: Int)

class Test {
  def foo(wrapper: Wrapper): Unit = {
    new Foo(wrapper.value) {}
  }
}

Dotty generates:

private static final class Test$$anon$1
extends Foo {
    private final Wrapper wrapper$1;

    public Test$$anon$1(Wrapper wrapper$2) {
        this.wrapper$1 = wrapper$2;
        super(wrapper$2.value());
    }
}

But Scala 2.12 does:

public final class Test$$anon$1
extends Foo {
    public Test$$anon$1(Test $outer, Wrapper wrapper$1) {
        super(wrapper$1.value());
    }
}

This is similar to #2869

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