Intern canonical classes and parameters names in BinaryClassSignatureParser
Otherwise, a lot of duplicated strings are generated
This commit is contained in:
+9
-3
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.load.java.structure.impl.classFiles
|
package org.jetbrains.kotlin.load.java.structure.impl.classFiles
|
||||||
|
|
||||||
import com.intellij.util.containers.ContainerUtil
|
import com.intellij.util.containers.ContainerUtil
|
||||||
|
import com.intellij.util.containers.StringInterner
|
||||||
import org.jetbrains.kotlin.builtins.PrimitiveType
|
import org.jetbrains.kotlin.builtins.PrimitiveType
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClassifierType
|
import org.jetbrains.kotlin.load.java.structure.JavaClassifierType
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaType
|
import org.jetbrains.kotlin.load.java.structure.JavaType
|
||||||
@@ -36,6 +37,8 @@ import java.text.StringCharacterIterator
|
|||||||
*/
|
*/
|
||||||
class BinaryClassSignatureParser {
|
class BinaryClassSignatureParser {
|
||||||
|
|
||||||
|
private val canonicalNameInterner = StringInterner()
|
||||||
|
|
||||||
fun parseTypeParametersDeclaration(signature: CharacterIterator, context: ClassifierResolutionContext): List<JavaTypeParameter> {
|
fun parseTypeParametersDeclaration(signature: CharacterIterator, context: ClassifierResolutionContext): List<JavaTypeParameter> {
|
||||||
if (signature.current() != '<') {
|
if (signature.current() != '<') {
|
||||||
return emptyList()
|
return emptyList()
|
||||||
@@ -96,7 +99,9 @@ class BinaryClassSignatureParser {
|
|||||||
signature.next()
|
signature.next()
|
||||||
}
|
}
|
||||||
|
|
||||||
return PlainJavaClassifierType({ context.resolveTypeParameter(id.toString()) }, emptyList())
|
val parameterName = canonicalNameInterner.intern(id.toString())
|
||||||
|
|
||||||
|
return PlainJavaClassifierType({ context.resolveTypeParameter(parameterName) }, emptyList())
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseParameterizedClassRefSignature(
|
private fun parseParameterizedClassRefSignature(
|
||||||
@@ -131,9 +136,10 @@ class BinaryClassSignatureParser {
|
|||||||
}
|
}
|
||||||
signature.next()
|
signature.next()
|
||||||
|
|
||||||
|
val internedCanonicalName = canonicalNameInterner.intern(canonicalName.toString())
|
||||||
return PlainJavaClassifierType(
|
return PlainJavaClassifierType(
|
||||||
{ context.resolveByInternalName(canonicalName.toString()) },
|
{ context.resolveByInternalName(internedCanonicalName) },
|
||||||
argumentGroups.reversed().flattenTo(arrayListOf()).compact()
|
argumentGroups.reversed().flattenTo(arrayListOf()).compact()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user