Skip to content

Incremental compilation doesn't recompile all usages of constructor #12401

Closed
@pikinier20

Description

@pikinier20

Compiler version

3.0.0-RC3 but also occurs on latest master

Minimized code

First file:

package main

class MainClass:
    val a = SecondClass(2)

object Main extends App:
    MainClass()

Second file:

package main

class SecondClass(a: Int)

Now compile the code.
Then change in second file:

package main

class SecondClass(a: Int)(b: String) // <--- Second param clause 

Output

Compilation passes although there's no second param specified in constructor invocation at SecondClass.
After running such code we get:

[error] (run-main-0) java.lang.NoSuchMethodError: 'void main.SecondClass.<init>(int)'
[error] java.lang.NoSuchMethodError: 'void main.SecondClass.<init>(int)'
[error]         at main.MainClass.<init>(MainClass.scala:4)
[error]         at main.Main$.<clinit>(MainClass.scala:7)
[error]         at main.Main.main(MainClass.scala)
[error]         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error]         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]         at java.base/java.lang.reflect.Method.invoke(Method.java:566)

Expectation

Incremental compilation should look for all usages of constructor and verify its corectness

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions