builder > A.scala B.scala compiling Set(A.scala, B.scala) Changes: Map() builder > A.scala compiling Set(A.scala) Changes: Map(object A -> List(Changed(Definition(A.x3))[method x3 changed from ()Int to ()java.lang.String flags: ])) invalidate B.scala because it references changed definition [Changed(Definition(A.x3))[method x3 changed from ()Int to ()java.lang.String flags: ]] compiling Set(B.scala) Changes: Map(object B -> List(Changed(Definition(B.x2))[method x2 changed from ()Int to ()java.lang.String flags: ])) invalidate A.scala because it references changed definition [Changed(Definition(B.x2))[method x2 changed from ()Int to ()java.lang.String flags: ]] compiling Set(A.scala, B.scala) Changes: Map(object A -> List(Changed(Definition(A.x0))[method x0 changed from ()Int to ()java.lang.String flags: ], Changed(Definition(A.x1))[method x1 changed from ()Int to ()java.lang.String flags: ], Changed(Definition(A.x2))[method x2 changed from ()Int to ()java.lang.String flags: ]), object B -> List(Changed(Definition(B.x0))[method x0 changed from ()Int to ()java.lang.String flags: ], Changed(Definition(B.x1))[method x1 changed from ()Int to ()java.lang.String flags: ]))