Remove unneeded name-handling code in ClassifierResolutionContext
The only place where a name with dots was passed to ClassifierResolutionContext.mapInternalNameToClassId was in BinaryClassSignatureParser.parseParameterizedClassRefSignature, where for some reason names can be both of internal (`a/b$c`) and canonical (`a/b.c`) form. Supporting both names in mapInternalNameToClassId was confusing because JVM internal names cannot contain dots. Replace dots with dollars in parseParameterizedClassRefSignature to get rid of the dot-name handling in mapInternalNameToClassId and rely on the correct (simplified) InnerClasses-based name resolution later instead. Also inline mapDescToClassId to its only usage.
This commit is contained in:
+2
-1
@@ -168,7 +168,8 @@ class BinaryJavaAnnotationVisitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitEnum(name: String?, desc: String, value: String) {
|
override fun visitEnum(name: String?, desc: String, value: String) {
|
||||||
addArgument(PlainJavaEnumValueAnnotationArgument(name, context.mapDescToClassId(desc), value))
|
val enumClassId = context.mapInternalNameToClassId(Type.getType(desc).internalName)
|
||||||
|
addArgument(PlainJavaEnumValueAnnotationArgument(name, enumClassId, value))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visit(name: String?, value: Any?) {
|
override fun visit(name: String?, value: Any?) {
|
||||||
|
|||||||
+2
-2
@@ -136,9 +136,9 @@ class BinaryClassSignatureParser {
|
|||||||
}
|
}
|
||||||
signature.next()
|
signature.next()
|
||||||
|
|
||||||
val internedCanonicalName = canonicalNameInterner.intern(canonicalName.toString())
|
val internalName = canonicalNameInterner.intern(canonicalName.toString().replace('.', '$'))
|
||||||
return PlainJavaClassifierType(
|
return PlainJavaClassifierType(
|
||||||
{ context.resolveByInternalName(internedCanonicalName) },
|
{ context.resolveByInternalName(internalName) },
|
||||||
argumentGroups.reversed().flattenTo(arrayListOf()).compact()
|
argumentGroups.reversed().flattenTo(arrayListOf()).compact()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
-16
@@ -26,8 +26,6 @@ import org.jetbrains.kotlin.util.javaslang.ImmutableHashMap
|
|||||||
import org.jetbrains.kotlin.util.javaslang.ImmutableMap
|
import org.jetbrains.kotlin.util.javaslang.ImmutableMap
|
||||||
import org.jetbrains.kotlin.util.javaslang.getOrNull
|
import org.jetbrains.kotlin.util.javaslang.getOrNull
|
||||||
|
|
||||||
import org.jetbrains.org.objectweb.asm.Type
|
|
||||||
|
|
||||||
typealias ClassIdToJavaClass = (ClassId) -> JavaClass?
|
typealias ClassIdToJavaClass = (ClassId) -> JavaClass?
|
||||||
|
|
||||||
class ClassifierResolutionContext private constructor(
|
class ClassifierResolutionContext private constructor(
|
||||||
@@ -63,19 +61,7 @@ class ClassifierResolutionContext private constructor(
|
|||||||
|
|
||||||
internal fun copyForMember() = ClassifierResolutionContext(classesByQName, typeParameters, innerClasses)
|
internal fun copyForMember() = ClassifierResolutionContext(classesByQName, typeParameters, innerClasses)
|
||||||
|
|
||||||
// See com.intellij.psi.impl.compiled.StubBuildingVisitor.createMapping(byte[])
|
|
||||||
internal fun mapInternalNameToClassId(internalName: String): ClassId {
|
internal fun mapInternalNameToClassId(internalName: String): ClassId {
|
||||||
if ('.' in internalName) {
|
|
||||||
val parts = internalName.split('.')
|
|
||||||
|
|
||||||
val outerClass = mapInternalNameToClassId(parts[0])
|
|
||||||
val nestedParts = parts.subList(1, parts.size)
|
|
||||||
|
|
||||||
return nestedParts.fold(outerClass) { classId, part ->
|
|
||||||
classId.createNestedClassId(Name.identifier(part))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('$' in internalName) {
|
if ('$' in internalName) {
|
||||||
val innerClassInfo = innerClasses.getOrNull(internalName)
|
val innerClassInfo = innerClasses.getOrNull(internalName)
|
||||||
if (innerClassInfo != null && Name.isValidIdentifier(innerClassInfo.simpleName)) {
|
if (innerClassInfo != null && Name.isValidIdentifier(innerClassInfo.simpleName)) {
|
||||||
@@ -88,6 +74,4 @@ class ClassifierResolutionContext private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun resolveByInternalName(c: String): Result = resolveClass(mapInternalNameToClassId(c))
|
internal fun resolveByInternalName(c: String): Result = resolveClass(mapInternalNameToClassId(c))
|
||||||
|
|
||||||
internal fun mapDescToClassId(desc: String): ClassId = mapInternalNameToClassId(Type.getType(desc).internalName)
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user