@@ -71,7 +71,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
71
71
protected var isScala : Boolean = _ // does class file describe a scala class?
72
72
protected var isScalaRaw : Boolean = _ // this class file is a scala class with no pickled info
73
73
protected var busy : Symbol = _ // lock to detect recursive reads
74
- protected var currentClass : Name = _ // JVM name of the current class
74
+ protected var currentClass : String = _ // JVM name of the current class
75
75
protected var classTParams = Map [Name ,Symbol ]()
76
76
protected var srcfile0 : Option [AbstractFile ] = None
77
77
protected def moduleClass : Symbol = staticModule.moduleClass
@@ -177,9 +177,9 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
177
177
}
178
178
}
179
179
180
- def getClassSymbol (name : Name ): Symbol = {
180
+ def getClassSymbol (name : String ): Symbol = {
181
181
name match {
182
- case name if nme.isModuleName(name ) => rootMirror getModuleByName name.dropModule
182
+ case name if name.endsWith(nme. MODULE_SUFFIX_STRING ) => rootMirror getModuleByName newTermName( name) .dropModule
183
183
case name => classNameToSymbol(name)
184
184
}
185
185
}
@@ -252,7 +252,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
252
252
values(index) match {
253
253
case sym : Symbol => sym
254
254
case _ =>
255
- val result = ClassfileParser .this .getClassSymbol(getClassName(index).name )
255
+ val result = ClassfileParser .this .getClassSymbol(getClassName(index).value )
256
256
recordAtIndex(result, index)
257
257
}
258
258
}
@@ -303,7 +303,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
303
303
val name = getClassName(index)
304
304
name.value.charAt(0 ) match {
305
305
case ARRAY_TAG => recordAtIndex(sigToType(null , name.value), index)
306
- case _ => recordAtIndex(classNameToSymbol(name.name ), index).tpe_*
306
+ case _ => recordAtIndex(classNameToSymbol(name.value ), index).tpe_*
307
307
}
308
308
}
309
309
}
@@ -404,13 +404,13 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
404
404
NoSymbol .newStubSymbol(name.toTypeName, msg)
405
405
}
406
406
407
- private def lookupClass (name : Name ) = try {
407
+ private def lookupClass (name : String ) = try {
408
408
def lookupTopLevel = {
409
- if (name containsChar '.' )
409
+ if (name contains '.' )
410
410
rootMirror getClassByName name
411
411
else
412
412
// FIXME - we shouldn't be doing ad hoc lookups in the empty package, getClassByName should return the class
413
- definitions.getMember(rootMirror.EmptyPackageClass , name.toTypeName )
413
+ definitions.getMember(rootMirror.EmptyPackageClass , newTypeName( name) )
414
414
}
415
415
416
416
// For inner classes we usually don't get here: `classNameToSymbol` already returns the symbol
@@ -421,21 +421,23 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
421
421
// what the logic below is for (see PR #5822 / scala/bug#9937).
422
422
val split = if (isScalaRaw) - 1 else name.lastIndexOf('$' )
423
423
if (split > 0 && split < name.length) {
424
- val outerName = name.subName (0 , split)
425
- val innerName = name.subName (split + 1 , name.length).toTypeName
424
+ val outerName = name.substring (0 , split)
425
+ val innerName = name.substring (split + 1 , name.length)
426
426
val outerSym = classNameToSymbol(outerName)
427
427
428
428
// If the outer class C cannot be found, look for a top-level class C$D
429
429
if (outerSym.isInstanceOf [StubSymbol ]) lookupTopLevel
430
430
else {
431
+ val innerNameAsName = newTypeName(innerName)
432
+
431
433
// We have a java-defined class name C$D and look for a member D of C. But we don't know if
432
434
// D is declared static or not, so we have to search both in class C and its companion.
433
435
val r = if (outerSym == clazz)
434
- staticScope.lookup(innerName ) orElse
435
- instanceScope.lookup(innerName )
436
+ staticScope.lookup(innerNameAsName ) orElse
437
+ instanceScope.lookup(innerNameAsName )
436
438
else
437
- lookupMemberAtTyperPhaseIfPossible(outerSym, innerName ) orElse
438
- lookupMemberAtTyperPhaseIfPossible(outerSym.companionModule, innerName )
439
+ lookupMemberAtTyperPhaseIfPossible(outerSym, innerNameAsName ) orElse
440
+ lookupMemberAtTyperPhaseIfPossible(outerSym.companionModule, innerNameAsName )
439
441
r orElse lookupTopLevel
440
442
}
441
443
} else
@@ -451,11 +453,11 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
451
453
// definitions.getMember can throw a FatalError, for example in pos/t5165b
452
454
if (settings.debug)
453
455
ex.printStackTrace()
454
- stubClassSymbol(name)
456
+ stubClassSymbol(newTypeName( name) )
455
457
}
456
458
457
459
/** Return the class symbol of the given name. */
458
- def classNameToSymbol (name : Name ): Symbol = {
460
+ def classNameToSymbol (name : String ): Symbol = {
459
461
if (innerClasses contains name)
460
462
innerClasses innerSymbol name
461
463
else
@@ -467,10 +469,10 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
467
469
468
470
val jflags = readClassFlags()
469
471
val classNameIndex = u2
470
- currentClass = pool.getClassName(classNameIndex).name
472
+ currentClass = pool.getClassName(classNameIndex).value
471
473
472
474
// Ensure that (top-level) classfiles are in the correct directory
473
- val isTopLevel = ! (currentClass containsChar '$' ) // Java class name; *don't* try to to use Scala name decoding (scala/bug#7532)
475
+ val isTopLevel = ! (currentClass contains '$' ) // Java class name; *don't* try to to use Scala name decoding (scala/bug#7532)
474
476
if (isTopLevel) {
475
477
val c = pool.getClassSymbol(classNameIndex)
476
478
// scala-dev#248: when a type alias (in a package object) shadows a class symbol, getClassSymbol returns a stub
@@ -633,10 +635,10 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
633
635
assert(sig.charAt(index) == ch, (sig.charAt(index), ch))
634
636
index += 1
635
637
}
636
- def subName (isDelimiter : Char => Boolean ): Name = {
638
+ def subName (isDelimiter : Char => Boolean ): String = {
637
639
val start = index
638
640
while (! isDelimiter(sig.charAt(index))) { index += 1 }
639
- newTermName (sigChars, start, index - start)
641
+ new String (sigChars, start, index - start)
640
642
}
641
643
def sig2type (tparams : immutable.Map [Name ,Symbol ], skiptvs : Boolean ): Type = {
642
644
val tag = sig.charAt(index); index += 1
@@ -708,7 +710,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
708
710
var tpe = processClassType(processInner(classSym.tpe_* ))
709
711
while (sig.charAt(index) == '.' ) {
710
712
accept('.' )
711
- val name = subName(c => c == ';' || c == '<' || c == '.' ).toTypeName
713
+ val name = newTypeName( subName(c => c == ';' || c == '<' || c == '.' ))
712
714
val clazz = tpe.member(name)
713
715
val dummyArgs = Nil // the actual arguments are added in processClassType
714
716
val inner = typeRef(pre = tpe, sym = clazz, args = dummyArgs)
@@ -745,7 +747,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
745
747
sig2type(tparams, skiptvs)
746
748
JavaMethodType (sym.newSyntheticValueParams(paramtypes.toList), restype)
747
749
case 'T' =>
748
- val n = subName(';' .== ).toTypeName
750
+ val n = newTypeName( subName(';' .== ))
749
751
index += 1
750
752
if (skiptvs) AnyTpe
751
753
else tparams(n).typeConstructor
@@ -769,15 +771,15 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
769
771
index += 1
770
772
val start = index
771
773
while (sig.charAt(index) != '>' ) {
772
- val tpname = subName(':' .== ).toTypeName
774
+ val tpname = newTypeName( subName(':' .== ))
773
775
val s = sym.newTypeParameter(tpname)
774
776
tparams = tparams + (tpname -> s)
775
777
sig2typeBounds(tparams, skiptvs = true )
776
778
newTParams += s
777
779
}
778
780
index = start
779
781
while (sig.charAt(index) != '>' ) {
780
- val tpname = subName(':' .== ).toTypeName
782
+ val tpname = newTypeName( subName(':' .== ))
781
783
val s = tparams(tpname)
782
784
s.setInfo(sig2typeBounds(tparams, skiptvs = false ))
783
785
}
@@ -999,8 +1001,8 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
999
1001
* and implicitly current class' superclasses.
1000
1002
*/
1001
1003
private def enterOwnInnerClasses (): Unit = {
1002
- def className (name : Name ): Name =
1003
- name.subName (name.lastPos ('.' ) + 1 , name.length)
1004
+ def className (name : String ): String =
1005
+ name.substring (name.lastIndexOf ('.' ) + 1 , name.length)
1004
1006
1005
1007
def enterClassAndModule (entry : InnerClassEntry , file : AbstractFile ): Unit = {
1006
1008
def jflags = entry.jflags
@@ -1048,8 +1050,8 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
1048
1050
decls unlink e
1049
1051
}
1050
1052
1051
- val cName = className(entry.externalName)
1052
- unlinkIfPresent(cName.toTermName )
1053
+ val cName = newTermName( className(entry.externalName) )
1054
+ unlinkIfPresent(cName)
1053
1055
unlinkIfPresent(cName.toTypeName)
1054
1056
}
1055
1057
@@ -1195,15 +1197,15 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
1195
1197
1196
1198
/** An entry in the InnerClasses attribute of this class file. */
1197
1199
case class InnerClassEntry (external : NameOrString , outer : NameOrString , name : NameOrString , jflags : JavaAccFlags ) {
1198
- def externalName = external.name
1199
- def outerName = outer.name
1200
+ def externalName = external.value
1201
+ def outerName = outer.value
1200
1202
def originalName = name.name
1201
1203
def isModule = originalName.isTermName
1202
1204
def scope = if (jflags.isStatic) staticScope else instanceScope
1203
1205
def enclosing = if (jflags.isStatic) enclModule else enclClass
1204
1206
1205
1207
// The name of the outer class, without its trailing $ if it has one.
1206
- private def strippedOuter = outerName.dropModule
1208
+ private def strippedOuter = outerName.stripSuffix(nme. MODULE_SUFFIX_STRING )
1207
1209
private def isInner = innerClasses contains strippedOuter
1208
1210
private def enclClass = if (isInner) innerClasses innerSymbol strippedOuter else classNameToSymbol(strippedOuter)
1209
1211
private def enclModule = enclClass.companionModule
@@ -1215,10 +1217,10 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
1215
1217
* If the given name is not an inner class, it returns the symbol found in `definitions`.
1216
1218
*/
1217
1219
object innerClasses {
1218
- private val inners = mutable.HashMap [Name , InnerClassEntry ]()
1220
+ private val inners = mutable.HashMap [String , InnerClassEntry ]()
1219
1221
1220
- def contains (name : Name ) = inners contains name
1221
- def getEntry (name : Name ) = inners get name
1222
+ def contains (name : String ) = inners contains name
1223
+ def getEntry (name : String ) = inners get name
1222
1224
def entries = inners.values
1223
1225
1224
1226
def add (entry : InnerClassEntry ): Unit = {
@@ -1228,7 +1230,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
1228
1230
}
1229
1231
inners(entry.externalName) = entry
1230
1232
}
1231
- def innerSymbol (externalName : Name ): Symbol = this getEntry externalName match {
1233
+ def innerSymbol (externalName : String ): Symbol = this getEntry externalName match {
1232
1234
case Some (entry) => innerSymbol(entry)
1233
1235
case _ => NoSymbol
1234
1236
}
@@ -1270,8 +1272,8 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
1270
1272
private final class ClassTypeCompleter (name : Name , jflags : JavaAccFlags , parent : NameOrString , ifaces : List [NameOrString ]) extends JavaTypeCompleter {
1271
1273
override def complete (sym : symbolTable.Symbol ): Unit = {
1272
1274
val info = if (sig != null ) sigToType(sym, sig) else {
1273
- val superTpe = if (parent == null ) definitions.AnyClass .tpe_* else getClassSymbol(parent.name ).tpe_*
1274
- var ifacesTypes = ifaces.filterNot(_ eq null ).map(x => getClassSymbol(x.name ).tpe_* )
1275
+ val superTpe = if (parent == null ) definitions.AnyClass .tpe_* else getClassSymbol(parent.value ).tpe_*
1276
+ var ifacesTypes = ifaces.filterNot(_ eq null ).map(x => getClassSymbol(x.value ).tpe_* )
1275
1277
ClassInfoType (superTpe :: ifacesTypes, instanceScope, clazz)
1276
1278
}
1277
1279
sym.setInfo(info)
@@ -1280,7 +1282,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
1280
1282
1281
1283
private final class MemberTypeCompleter (name : Name , jflags : JavaAccFlags , descriptor : String ) extends JavaTypeCompleter {
1282
1284
override def isJavaVarargsMethod : Boolean = jflags.isVarargs
1283
- override def javaThrownExceptions : List [Symbol ] = exceptions.map(e => classNameToSymbol(e.name ))
1285
+ override def javaThrownExceptions : List [Symbol ] = exceptions.map(e => classNameToSymbol(e.value ))
1284
1286
override def complete (sym : symbolTable.Symbol ): Unit = {
1285
1287
def descriptorInfo = sigToType(sym, descriptor)
1286
1288
val hasOuterParam = (name == nme.CONSTRUCTOR ) && (descriptorInfo match {
@@ -1337,7 +1339,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
1337
1339
for (e <- exceptions) {
1338
1340
// we call initialize due to the fact that we call Symbol.isMonomorphicType in addThrowsAnnotation
1339
1341
// and that method requires Symbol to be forced to give the right answers, see scala/bug#7107 for details
1340
- val cls = getClassSymbol(e.name )
1342
+ val cls = getClassSymbol(e.value )
1341
1343
sym withAnnotation AnnotationInfo .lazily {
1342
1344
val throwableTpe = cls.tpe_*
1343
1345
AnnotationInfo (appliedType(ThrowsClass , throwableTpe), List (Literal (Constant (throwableTpe))), Nil )
0 commit comments