Skip to content

Commit 865591b

Browse files
committed
Lock down methods in Names
Marking some methods as final. Once known to be overriden in scala-ide are instead marked with @deprecatedOveriding. This is to signal the new means of synchronization to subclasses.
1 parent d3c8a0b commit 865591b

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

src/reflect/scala/reflect/internal/Names.scala

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ trait Names extends api.Names {
2828
//
2929
// Discussion: https://groups.google.com/forum/#!search/biased$20scala-internals/scala-internals/0cYB7SkJ-nM/47MLhsgw8jwJ
3030
protected def synchronizeNames: Boolean = false
31-
private val nameLock: Object = new {}
31+
private val nameLock: Object = new Object
3232

3333
/** Memory to store all names sequentially. */
3434
var chrs: Array[Char] = new Array[Char](NAME_SIZE)
@@ -76,18 +76,19 @@ trait Names extends api.Names {
7676
}
7777

7878
/** Create a term name from the characters in cs[offset..offset+len-1]. */
79-
def newTermName(cs: Array[Char], offset: Int, len: Int): TermName =
79+
final def newTermName(cs: Array[Char], offset: Int, len: Int): TermName =
8080
newTermName(cs, offset, len, cachedString = null)
8181

82-
def newTermName(cs: Array[Char]): TermName = newTermName(cs, 0, cs.length)
83-
def newTypeName(cs: Array[Char]): TypeName = newTypeName(cs, 0, cs.length)
82+
final def newTermName(cs: Array[Char]): TermName = newTermName(cs, 0, cs.length)
83+
84+
final def newTypeName(cs: Array[Char]): TypeName = newTypeName(cs, 0, cs.length)
8485

8586
/** Create a term name from the characters in cs[offset..offset+len-1].
8687
* TODO - have a mode where name validation is performed at creation time
8788
* (e.g. if a name has the string "$class" in it, then fail if that
8889
* string is not at the very end.)
8990
*/
90-
protected def newTermName(cs: Array[Char], offset: Int, len: Int, cachedString: String): TermName = {
91+
final def newTermName(cs: Array[Char], offset: Int, len: Int, cachedString: String): TermName = {
9192
def body = {
9293
val h = hashValue(cs, offset, len) & HASH_MASK
9394
var n = termHashtable(h)
@@ -108,33 +109,35 @@ trait Names extends api.Names {
108109
if (synchronizeNames) nameLock.synchronized(body) else body
109110
}
110111

111-
protected def newTypeName(cs: Array[Char], offset: Int, len: Int, cachedString: String): TypeName =
112+
final def newTypeName(cs: Array[Char], offset: Int, len: Int, cachedString: String): TypeName =
112113
newTermName(cs, offset, len, cachedString).toTypeName
113114

114115
/** Create a term name from string. */
116+
@deprecatedOverriding("To synchronize, use `override def synchronizeNames = true`", "2.11.0") // overriden in https://github.com/scala-ide/scala-ide/blob/master/org.scala-ide.sdt.core/src/scala/tools/eclipse/ScalaPresentationCompiler.scala
115117
def newTermName(s: String): TermName = newTermName(s.toCharArray(), 0, s.length(), null)
116118

117119
/** Create a type name from string. */
120+
@deprecatedOverriding("To synchronize, use `override def synchronizeNames = true`", "2.11.0") // overriden in https://github.com/scala-ide/scala-ide/blob/master/org.scala-ide.sdt.core/src/scala/tools/eclipse/ScalaPresentationCompiler.scala
118121
def newTypeName(s: String): TypeName = newTermName(s).toTypeName
119122

120123
/** Create a term name from the UTF8 encoded bytes in bs[offset..offset+len-1]. */
121-
def newTermName(bs: Array[Byte], offset: Int, len: Int): TermName = {
124+
final def newTermName(bs: Array[Byte], offset: Int, len: Int): TermName = {
122125
val chars = Codec.fromUTF8(bs, offset, len)
123126
newTermName(chars, 0, chars.length)
124127
}
125128

126-
def newTermNameCached(s: String): TermName =
129+
final def newTermNameCached(s: String): TermName =
127130
newTermName(s.toCharArray(), 0, s.length(), cachedString = s)
128131

129-
def newTypeNameCached(s: String): TypeName =
132+
final def newTypeNameCached(s: String): TypeName =
130133
newTypeName(s.toCharArray(), 0, s.length(), cachedString = s)
131134

132135
/** Create a type name from the characters in cs[offset..offset+len-1]. */
133-
def newTypeName(cs: Array[Char], offset: Int, len: Int): TypeName =
136+
final def newTypeName(cs: Array[Char], offset: Int, len: Int): TypeName =
134137
newTermName(cs, offset, len, cachedString = null).toTypeName
135138

136139
/** Create a type name from the UTF8 encoded bytes in bs[offset..offset+len-1]. */
137-
def newTypeName(bs: Array[Byte], offset: Int, len: Int): TypeName =
140+
final def newTypeName(bs: Array[Byte], offset: Int, len: Int): TypeName =
138141
newTermName(bs, offset, len).toTypeName
139142

140143
/**

0 commit comments

Comments
 (0)