Clean code

This commit is contained in:
Mikhael Bogdanov
2017-05-12 15:44:13 +02:00
parent 45bfb2075d
commit 9e8495dc3d
5 changed files with 19 additions and 27 deletions
@@ -21,16 +21,12 @@ import org.jetbrains.org.objectweb.asm.commons.RemappingSignatureAdapter
import org.jetbrains.org.objectweb.asm.signature.SignatureReader import org.jetbrains.org.objectweb.asm.signature.SignatureReader
import org.jetbrains.org.objectweb.asm.signature.SignatureVisitor import org.jetbrains.org.objectweb.asm.signature.SignatureVisitor
class AsmTypeRemapper(val typeRemapper: TypeRemapper, val isDefaultGeneration: Boolean, val result: InlineResult) : Remapper() { class AsmTypeRemapper(val typeRemapper: TypeRemapper, val result: InlineResult) : Remapper() {
override fun map(type: String): String { override fun map(type: String): String {
return typeRemapper.map(type) return typeRemapper.map(type)
} }
override fun createRemappingSignatureAdapter(v: SignatureVisitor?): SignatureVisitor { override fun createRemappingSignatureAdapter(v: SignatureVisitor?): SignatureVisitor {
if (isDefaultGeneration) {
return super.createRemappingSignatureAdapter(v)
}
return object : RemappingSignatureAdapter(v, this) { return object : RemappingSignatureAdapter(v, this) {
override fun visitTypeVariable(name: String) { override fun visitTypeVariable(name: String) {
/*TODO try to erase absent type variable*/ /*TODO try to erase absent type variable*/
@@ -26,7 +26,7 @@ class RootInliningContext(
val callElement: KtElement, val callElement: KtElement,
override val callSiteInfo: InlineCallSiteInfo, override val callSiteInfo: InlineCallSiteInfo,
val reifiedTypeInliner: ReifiedTypeInliner, val reifiedTypeInliner: ReifiedTypeInliner,
val typeParameterMappings: TypeParameterMappings typeParameterMappings: TypeParameterMappings
) : InliningContext( ) : InliningContext(
null, expressionMap, state, nameGenerator, TypeRemapper.createRoot(typeParameterMappings), null, false null, expressionMap, state, nameGenerator, TypeRemapper.createRoot(typeParameterMappings), null, false
) )
@@ -76,12 +76,10 @@ open class InliningContext(
generator: NameGenerator, generator: NameGenerator,
newTypeMappings: MutableMap<String, String>, newTypeMappings: MutableMap<String, String>,
callSiteInfo: InlineCallSiteInfo callSiteInfo: InlineCallSiteInfo
): InliningContext { ): InliningContext = RegeneratedClassContext(
return RegeneratedClassContext( this, expressionMap, state, generator, TypeRemapper.createFrom(typeRemapper, newTypeMappings),
this, expressionMap, state, generator, TypeRemapper.createFrom(typeRemapper, newTypeMappings), lambdaInfo, callSiteInfo
lambdaInfo, callSiteInfo )
)
}
@JvmOverloads @JvmOverloads
fun subInline( fun subInline(
@@ -89,7 +87,6 @@ open class InliningContext(
additionalTypeMappings: Map<String, String?> = emptyMap(), additionalTypeMappings: Map<String, String?> = emptyMap(),
lambdaInfo: LambdaInfo? = this.lambdaInfo lambdaInfo: LambdaInfo? = this.lambdaInfo
): InliningContext { ): InliningContext {
//isInliningLambda && !this.isInliningLambda for root inline lambda
val isInliningLambda = lambdaInfo != null val isInliningLambda = lambdaInfo != null
return InliningContext( return InliningContext(
this, expressionMap, state, generator, this, expressionMap, state, generator,
@@ -123,7 +123,7 @@ class MethodInliner(
resultNode.access, resultNode.access,
resultNode.desc, resultNode.desc,
resultNode, resultNode,
AsmTypeRemapper(remapper, inliningContext.root.typeParameterMappings == null, result) AsmTypeRemapper(remapper, result)
) )
val markerShift = InlineCodegenUtil.calcMarkerShift(parameters, node) val markerShift = InlineCodegenUtil.calcMarkerShift(parameters, node)
@@ -231,8 +231,7 @@ class MethodInliner(
else if (isAnonymousConstructorCall(owner, name)) { //TODO add method else if (isAnonymousConstructorCall(owner, name)) { //TODO add method
//TODO add proper message //TODO add proper message
assert(transformationInfo is AnonymousObjectTransformationInfo) { assert(transformationInfo is AnonymousObjectTransformationInfo) {
"<init> call doesn't correspond to object transformation info: " + "<init> call doesn't correspond to object transformation info for '$owner.$name': $transformationInfo"
owner + "." + name + ", info " + transformationInfo
} }
val parent = inliningContext.parent val parent = inliningContext.parent
val shouldRegenerate = transformationInfo!!.shouldRegenerate(isSameModule) val shouldRegenerate = transformationInfo!!.shouldRegenerate(isSameModule)
@@ -258,7 +257,7 @@ class MethodInliner(
//TODO: add new inner class also for other contexts //TODO: add new inner class also for other contexts
if (inliningContext.parent is RegeneratedClassContext) { if (inliningContext.parent is RegeneratedClassContext) {
inliningContext.parent!!.typeRemapper.addAdditionalMappings( inliningContext.parent.typeRemapper.addAdditionalMappings(
transformationInfo!!.oldClassName, transformationInfo!!.newClassName transformationInfo!!.oldClassName, transformationInfo!!.newClassName
) )
} }
@@ -42,7 +42,7 @@ abstract class ObjectTransformer<out T : TransformationInfo>(@JvmField val trans
return RemappingClassBuilder( return RemappingClassBuilder(
classBuilder, classBuilder,
AsmTypeRemapper(inliningContext.typeRemapper, inliningContext.root.typeParameterMappings == null, transformationResult) AsmTypeRemapper(inliningContext.typeRemapper, transformationResult)
) )
} }
@@ -23,11 +23,11 @@ class TypeParameter(val oldName: String, val newName: String?, val isReified: Bo
//typeMapping data could be changed outside through method processing //typeMapping data could be changed outside through method processing
class TypeRemapper private constructor( class TypeRemapper private constructor(
private val typeMapping: MutableMap<String, String>, private val typeMapping: MutableMap<String, String>,
val parent: TypeRemapper?, val parent: TypeRemapper? = null,
val isInlineLambda: Boolean = false val isRootInlineLambda: Boolean = false
) { ) {
private var additionalMappings: MutableMap<String, String> = hashMapOf() private var additionalMappings = hashMapOf<String, String>()
private val typeParametersMapping: MutableMap<String, TypeParameter> = hashMapOf() private val typeParametersMapping = hashMapOf<String, TypeParameter>()
fun addMapping(type: String, newType: String) { fun addMapping(type: String, newType: String) {
typeMapping.put(type, newType) typeMapping.put(type, newType)
@@ -59,13 +59,13 @@ class TypeRemapper private constructor(
} }
fun mapTypeParameter(name: String): TypeParameter? { fun mapTypeParameter(name: String): TypeParameter? {
return typeParametersMapping[name] ?: if (!isInlineLambda) parent?.mapTypeParameter(name) else null return typeParametersMapping[name] ?: if (!isRootInlineLambda) parent?.mapTypeParameter(name) else null
} }
companion object { companion object {
@JvmStatic @JvmStatic
fun createRoot(formalTypeParameters: TypeParameterMappings?): TypeRemapper { fun createRoot(formalTypeParameters: TypeParameterMappings?): TypeRemapper {
return TypeRemapper(HashMap<String, String>(), null).apply { return TypeRemapper(HashMap<String, String>()).apply {
formalTypeParameters?.forEach { formalTypeParameters?.forEach {
registerTypeParameter(it) registerTypeParameter(it)
} }
@@ -74,13 +74,13 @@ class TypeRemapper private constructor(
@JvmStatic @JvmStatic
fun createFrom(mappings: MutableMap<String, String>): TypeRemapper { fun createFrom(mappings: MutableMap<String, String>): TypeRemapper {
return TypeRemapper(mappings, null) return TypeRemapper(mappings)
} }
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun createFrom(remapper: TypeRemapper, mappings: Map<String, String?>, isInlineLambda: Boolean = false): TypeRemapper { fun createFrom(parentRemapper: TypeRemapper, mappings: Map<String, String?>, isRootInlineLambda: Boolean = false): TypeRemapper {
return TypeRemapper(createNewAndMerge(remapper, mappings), remapper, isInlineLambda) return TypeRemapper(createNewAndMerge(parentRemapper, mappings), parentRemapper, isRootInlineLambda)
} }
private fun createNewAndMerge(remapper: TypeRemapper, additionalTypeMappings: Map<String, String?>): MutableMap<String, String> { private fun createNewAndMerge(remapper: TypeRemapper, additionalTypeMappings: Map<String, String?>): MutableMap<String, String> {