Skip to content

Commit 1a7e3c8

Browse files
authored
Merge pull request #14 from dwijnand/no-auto-apply
Implement ExplicitNonNullaryApply
2 parents 2c80b75 + 1607ad8 commit 1a7e3c8

16 files changed

+610
-1
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ skip in publish := true
1212

1313
val rewrites = project.settings(
1414
moduleName := "scala-rewrites",
15-
libraryDependencies += "ch.epfl.scala" %% "scalafix-core" % scalafixVersion,
15+
libraryDependencies += "ch.epfl.scala" %% "scalafix-rules" % scalafixVersion,
1616
)
1717

1818
val input = project.settings(
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package fix.scala213;
2+
3+
interface ExplicitNonNullaryApplyI {
4+
String foo();
5+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
rule = fix.scala213.ExplicitNonNullaryApply
3+
*/
4+
package fix.scala213
5+
6+
class ExplicitNonNullaryApply {
7+
val enna = new ExplicitNonNullaryApply()
8+
9+
def prop = ""
10+
def meth() = ""
11+
12+
def id[A](x: A) = x
13+
14+
15+
def def_prop_p = prop
16+
def def_meth_p = meth
17+
def def_meth_m = meth()
18+
19+
def def_id = id("")
20+
def def_id_ta = id[String]("")
21+
22+
23+
def def_this_prop_p = this.prop
24+
def def_this_meth_p = this.meth
25+
def def_this_meth_m = this.meth()
26+
//def def_this_meth_m_in = this meth ()
27+
28+
def def_this_id_m = this.id("")
29+
def def_this_id_m_ta = this.id[String]("")
30+
def def_this_id_m_in = this id ""
31+
def def_this_id_m_in_ta = this id[String] ""
32+
33+
34+
def def_enna_prop_p = enna.prop
35+
def def_enna_meth_p = enna.meth
36+
def def_enna_meth_m = enna.meth()
37+
//def def_enna_meth_m_in = enna meth ()
38+
39+
def def_enna_id_m = enna.id("")
40+
def def_enna_id_m_ta = enna.id[String]("")
41+
def def_enna_id_m_in = enna id ""
42+
def def_enna_id_m_in_ta = enna id[String] ""
43+
44+
45+
def def_this_enna_prop_p = this.enna.prop
46+
def def_this_enna_meth_p = this.enna.meth
47+
def def_this_enna_meth_m = this.enna.meth()
48+
//def def_this_enna_meth_m_in = this.enna meth ()
49+
50+
def def_this_enna_id_m = this.enna.id("")
51+
def def_this_enna_id_m_ta = this.enna.id[String]("")
52+
def def_this_enna_id_m_in = this.enna id ""
53+
def def_this_enna_id_m_in_ta = this.enna id[String] ""
54+
55+
56+
def def_enna_this_prop_p = ExplicitNonNullaryApply.this.prop
57+
def def_enna_this_meth_p = ExplicitNonNullaryApply.this.meth
58+
def def_enna_this_meth_m = ExplicitNonNullaryApply.this.meth()
59+
//def def_enna_this_meth_m_in = ExplicitNonNullaryApply.this meth ()
60+
61+
def def_enna_this_id_m = ExplicitNonNullaryApply.this.id("")
62+
def def_enna_this_id_m_ta = ExplicitNonNullaryApply.this.id[String]("")
63+
def def_enna_this_id_m_in = ExplicitNonNullaryApply.this id ""
64+
def def_enna_this_id_m_in_ta = ExplicitNonNullaryApply.this id[String] ""
65+
66+
67+
def def_enna_enna_prop_p = enna.enna.prop
68+
def def_enna_enna_meth_p = enna.enna.meth
69+
def def_enna_enna_meth_m = enna.enna.meth()
70+
//def def_enna_enna_meth_m_in = enna.enna meth ()
71+
72+
def def_enna_enna_id_m = enna.enna.id("")
73+
def def_enna_enna_id_m_ta = enna.enna.id[String]("")
74+
def def_enna_enna_id_m_in = enna.enna id ""
75+
def def_enna_enna_id_m_in_ta = enna.enna id[String] ""
76+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
rule = fix.scala213.ExplicitNonNullaryApply
3+
*/
4+
package fix.scala213
5+
6+
import ExplicitNonNullaryApplyJavaDefs._
7+
8+
class ExplicitNonNullaryApplyJava {
9+
???.##
10+
???.getClass()
11+
???.getClass
12+
???.hashCode()
13+
???.hashCode
14+
???.toString()
15+
???.toString
16+
???.asInstanceOf[Int]
17+
???.isInstanceOf[Int]
18+
19+
any.##
20+
any.getClass()
21+
any.getClass
22+
any.hashCode()
23+
any.hashCode
24+
any.toString()
25+
any.toString
26+
any.asInstanceOf[Int]
27+
any.isInstanceOf[Int]
28+
29+
ref.##
30+
ref.getClass()
31+
ref.getClass
32+
ref.hashCode()
33+
ref.hashCode
34+
ref.toString()
35+
ref.toString
36+
ref.asInstanceOf[Int]
37+
ref.isInstanceOf[Int]
38+
39+
obj.##
40+
obj.getClass()
41+
obj.getClass
42+
obj.hashCode()
43+
obj.hashCode
44+
obj.toString()
45+
obj.toString
46+
obj.asInstanceOf[Int]
47+
obj.isInstanceOf[Int]
48+
49+
str.##
50+
str.getClass()
51+
str.getClass
52+
str.hashCode()
53+
str.hashCode
54+
str.toString()
55+
str.toString
56+
str.asInstanceOf[Int]
57+
str.isInstanceOf[Int]
58+
59+
cm.toString()
60+
cm.toString
61+
cp.toString()
62+
cp.toString
63+
64+
cm.run()
65+
cm.run
66+
cp.run()
67+
cp.run
68+
69+
cm.foo()
70+
cm.foo
71+
cp.foo()
72+
cp.foo
73+
74+
vcm.toString()
75+
vcm.toString
76+
vcp.toString()
77+
vcp.toString
78+
79+
ccm.toString()
80+
ccm.toString
81+
ccp.toString()
82+
ccp.toString
83+
84+
vccm.toString()
85+
vccm.toString
86+
vccp.toString()
87+
vccp.toString
88+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**/
2+
package fix.scala213
3+
4+
object ExplicitNonNullaryApplyJavaDefs {
5+
class CM extends Runnable with ExplicitNonNullaryApplyI { override def toString() = ""; def run() = (); def foo() = "" }
6+
class CP extends Runnable with ExplicitNonNullaryApplyI { override def toString = ""; def run = (); def foo = "" }
7+
8+
case class CCM() extends Runnable with ExplicitNonNullaryApplyI { override def toString() = ""; def run() = (); def foo() = "" }
9+
case class CCP() extends Runnable with ExplicitNonNullaryApplyI { override def toString = ""; def run = (); def foo = "" }
10+
11+
class VCM(val x: String) extends AnyVal { override def toString() = "" }
12+
class VCP(val x: String) extends AnyVal { override def toString = "" }
13+
14+
case class VCCM(x: String) extends AnyVal { override def toString() = "" }
15+
case class VCCP(x: String) extends AnyVal { override def toString = "" }
16+
17+
val any: Any = ""
18+
val ref: AnyRef = ""
19+
val obj: Object = ""
20+
val str: String = ""
21+
22+
val cm: CM = new CM()
23+
val cp: CP = new CP()
24+
val vcm: VCM = new VCM("")
25+
val vcp: VCP = new VCP("")
26+
val ccm: CCM = CCM()
27+
val ccp: CCP = CCP()
28+
val vccm: VCCM = VCCM("")
29+
val vccp: VCCP = VCCP("")
30+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
rule = fix.scala213.ExplicitNonNullaryApply
3+
*/
4+
package fix.scala213
5+
6+
class ExplicitNonNullaryApplyOver {
7+
class Meth { def d() = "" }
8+
class Prop { def d = "" }
9+
10+
class Meth2Prop extends Meth { override def d = "" }
11+
class Prop2Meth extends Prop { override def d() = "" }
12+
13+
val meth2prop = new Meth2Prop
14+
val prop2meth = new Prop2Meth
15+
16+
meth2prop.d()
17+
meth2prop.d // <- should call with parens
18+
prop2meth.d()
19+
prop2meth.d // <- should call with parens
20+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
rule = fix.scala213.ExplicitNonNullaryApply
3+
*/
4+
package fix.scala213
5+
6+
object NoAutoApply {
7+
object buz {
8+
override def toString(): String = ""
9+
def empty[T]() = List.empty[T]
10+
}
11+
val x: Iterator[Int] = ???
12+
def foo() = println(1)
13+
def bar = 32
14+
foo
15+
println(foo)
16+
foo()
17+
bar
18+
x.next
19+
class buz() {
20+
def qux() = List(1)
21+
}
22+
new buz().qux.toIterator.next
23+
new java.util.ArrayList[Int]().toString
24+
val builder = List.newBuilder[Int]
25+
builder.result()
26+
//builder result ()
27+
builder.result
28+
fix.scala213.NoAutoApply.buz.empty[String]
29+
var opt: Option[() => Int] = None
30+
opt = None
31+
println(1.toString)
32+
println(buz.toString) // not inserted
33+
List(builder) map (_.result)
34+
builder.##
35+
def lzy(f: => Int) = {
36+
var k = f _
37+
k = () => 3
38+
}
39+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package fix.scala213;
2+
3+
interface ExplicitNonNullaryApplyI {
4+
String foo();
5+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package fix.scala213
2+
3+
class ExplicitNonNullaryApply {
4+
val enna = new ExplicitNonNullaryApply()
5+
6+
def prop = ""
7+
def meth() = ""
8+
9+
def id[A](x: A) = x
10+
11+
12+
def def_prop_p = prop
13+
def def_meth_p = meth()
14+
def def_meth_m = meth()
15+
16+
def def_id = id("")
17+
def def_id_ta = id[String]("")
18+
19+
20+
def def_this_prop_p = this.prop
21+
def def_this_meth_p = this.meth()
22+
def def_this_meth_m = this.meth()
23+
//def def_this_meth_m_in = this meth ()
24+
25+
def def_this_id_m = this.id("")
26+
def def_this_id_m_ta = this.id[String]("")
27+
def def_this_id_m_in = this id ""
28+
def def_this_id_m_in_ta = this id[String] ""
29+
30+
31+
def def_enna_prop_p = enna.prop
32+
def def_enna_meth_p = enna.meth()
33+
def def_enna_meth_m = enna.meth()
34+
//def def_enna_meth_m_in = enna meth ()
35+
36+
def def_enna_id_m = enna.id("")
37+
def def_enna_id_m_ta = enna.id[String]("")
38+
def def_enna_id_m_in = enna id ""
39+
def def_enna_id_m_in_ta = enna id[String] ""
40+
41+
42+
def def_this_enna_prop_p = this.enna.prop
43+
def def_this_enna_meth_p = this.enna.meth()
44+
def def_this_enna_meth_m = this.enna.meth()
45+
//def def_this_enna_meth_m_in = this.enna meth ()
46+
47+
def def_this_enna_id_m = this.enna.id("")
48+
def def_this_enna_id_m_ta = this.enna.id[String]("")
49+
def def_this_enna_id_m_in = this.enna id ""
50+
def def_this_enna_id_m_in_ta = this.enna id[String] ""
51+
52+
53+
def def_enna_this_prop_p = ExplicitNonNullaryApply.this.prop
54+
def def_enna_this_meth_p = ExplicitNonNullaryApply.this.meth()
55+
def def_enna_this_meth_m = ExplicitNonNullaryApply.this.meth()
56+
//def def_enna_this_meth_m_in = ExplicitNonNullaryApply.this meth ()
57+
58+
def def_enna_this_id_m = ExplicitNonNullaryApply.this.id("")
59+
def def_enna_this_id_m_ta = ExplicitNonNullaryApply.this.id[String]("")
60+
def def_enna_this_id_m_in = ExplicitNonNullaryApply.this id ""
61+
def def_enna_this_id_m_in_ta = ExplicitNonNullaryApply.this id[String] ""
62+
63+
64+
def def_enna_enna_prop_p = enna.enna.prop
65+
def def_enna_enna_meth_p = enna.enna.meth()
66+
def def_enna_enna_meth_m = enna.enna.meth()
67+
//def def_enna_enna_meth_m_in = enna.enna meth ()
68+
69+
def def_enna_enna_id_m = enna.enna.id("")
70+
def def_enna_enna_id_m_ta = enna.enna.id[String]("")
71+
def def_enna_enna_id_m_in = enna.enna id ""
72+
def def_enna_enna_id_m_in_ta = enna.enna id[String] ""
73+
}

0 commit comments

Comments
 (0)