From fdbe8fef2fe7b3e6af30136a2cef847837edaa17 Mon Sep 17 00:00:00 2001 From: Eugenio Marletti Date: Fri, 27 Apr 2018 19:07:41 +0200 Subject: [PATCH 1/5] Update kotlin-metadata library from 1.2.1 to 1.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It no longer depends on Kotlin compiler-embeddable! 🎉 --- .../arrow-annotations-processor/build.gradle | 2 +- .../common/utils/ClassOrPackageDataWrapper.kt | 18 +++++++++--------- .../java/arrow/common/utils/ProcessorUtils.kt | 7 ++++--- .../java/arrow/derive/DerivingFileGenerator.kt | 4 ++-- .../java/arrow/derive/DerivingProcessor.kt | 2 +- .../higherkinds/HigherKindsFileGenerator.kt | 2 +- .../arrow/instances/InstanceFileGenerator.kt | 4 ++-- .../java/arrow/instances/InstanceProcessor.kt | 2 +- .../main/java/arrow/optics/OpticsProcessor.kt | 2 +- .../main/java/arrow/renzu/RenzuGenerator.kt | 4 ++-- .../main/java/arrow/renzu/RenzuProcessor.kt | 2 +- 11 files changed, 25 insertions(+), 24 deletions(-) diff --git a/modules/core/arrow-annotations-processor/build.gradle b/modules/core/arrow-annotations-processor/build.gradle index ecb6a2ef30d..90c8ad40bbd 100644 --- a/modules/core/arrow-annotations-processor/build.gradle +++ b/modules/core/arrow-annotations-processor/build.gradle @@ -6,7 +6,7 @@ apply plugin: 'kotlin-kapt' dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" compile project(':arrow-annotations') - compile 'me.eugeniomarletti:kotlin-metadata:1.2.1' + compile 'me.eugeniomarletti.kotlin.metadata:kotlin-metadata:1.4.0' compileOnly 'com.google.auto.service:auto-service:1.0-rc4' kapt 'com.google.auto.service:auto-service:1.0-rc4' diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ClassOrPackageDataWrapper.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ClassOrPackageDataWrapper.kt index ef34c58e166..bdca120cf93 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ClassOrPackageDataWrapper.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ClassOrPackageDataWrapper.kt @@ -1,12 +1,12 @@ package arrow.common.utils -import org.jetbrains.kotlin.serialization.ClassData -import org.jetbrains.kotlin.serialization.PackageData -import org.jetbrains.kotlin.serialization.ProtoBuf.Constructor -import org.jetbrains.kotlin.serialization.ProtoBuf.Function -import org.jetbrains.kotlin.serialization.ProtoBuf.Property -import org.jetbrains.kotlin.serialization.ProtoBuf.TypeParameter -import org.jetbrains.kotlin.serialization.deserialization.NameResolver +import me.eugeniomarletti.kotlin.metadata.ClassData +import me.eugeniomarletti.kotlin.metadata.PackageData +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Constructor +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Function +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Property +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.TypeParameter +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.NameResolver sealed class ClassOrPackageDataWrapper { abstract val `package`: String @@ -19,7 +19,7 @@ sealed class ClassOrPackageDataWrapper { class Package( override val nameResolver: NameResolver, - val packageProto: org.jetbrains.kotlin.serialization.ProtoBuf.Package, + val packageProto: me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Package, override val `package`: String ) : ClassOrPackageDataWrapper() { override val constructorList: List get() = emptyList() @@ -31,7 +31,7 @@ sealed class ClassOrPackageDataWrapper { class Class( override val nameResolver: NameResolver, - val classProto: org.jetbrains.kotlin.serialization.ProtoBuf.Class, + val classProto: me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Class, override val `package`: String ) : ClassOrPackageDataWrapper() { override val constructorList: List get() = classProto.constructorList diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ProcessorUtils.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ProcessorUtils.kt index c97669fa178..9d1f9783cf4 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ProcessorUtils.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ProcessorUtils.kt @@ -3,9 +3,10 @@ package arrow.common.utils import me.eugeniomarletti.kotlin.metadata.* import me.eugeniomarletti.kotlin.metadata.jvm.getJvmMethodSignature import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.java.MethodElement -import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.deserialization.TypeTable -import org.jetbrains.kotlin.serialization.deserialization.supertypes +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.supertypes +import me.eugeniomarletti.kotlin.metadata.shadow.serialization.deserialization.getName import java.io.File import javax.lang.model.element.Element import javax.lang.model.element.ExecutableElement diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/derive/DerivingFileGenerator.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/derive/DerivingFileGenerator.kt index 4cb511896ff..aa399574c94 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/derive/DerivingFileGenerator.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/derive/DerivingFileGenerator.kt @@ -6,8 +6,8 @@ import arrow.common.utils.removeBackticks import arrow.higherkinds.HKMarkerPreFix import arrow.higherkinds.KindPostFix import me.eugeniomarletti.kotlin.metadata.modality -import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.deserialization.hasReceiver +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.hasReceiver import java.io.File fun argAsSeenFromReceiver(typeClassFirstTypeArg: String, abstractType: String, receiverType: String): String = diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/derive/DerivingProcessor.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/derive/DerivingProcessor.kt index c2ce19f4828..6bd5bd1bfb6 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/derive/DerivingProcessor.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/derive/DerivingProcessor.kt @@ -4,7 +4,7 @@ import arrow.common.utils.AbstractProcessor import arrow.common.utils.ClassOrPackageDataWrapper import arrow.common.utils.knownError import com.google.auto.service.AutoService -import org.jetbrains.kotlin.serialization.deserialization.TypeTable +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable import java.io.File import javax.annotation.processing.Processor import javax.annotation.processing.RoundEnvironment diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/higherkinds/HigherKindsFileGenerator.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/higherkinds/HigherKindsFileGenerator.kt index d4574d13a70..35258b9dcb4 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/higherkinds/HigherKindsFileGenerator.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/higherkinds/HigherKindsFileGenerator.kt @@ -3,7 +3,7 @@ package arrow.higherkinds import arrow.common.Package import arrow.common.utils.knownError import arrow.common.utils.typeConstraints -import org.jetbrains.kotlin.serialization.ProtoBuf +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf import java.io.File import javax.lang.model.element.Name diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/instances/InstanceFileGenerator.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/instances/InstanceFileGenerator.kt index 3a88c875919..cab67b36d09 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/instances/InstanceFileGenerator.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/instances/InstanceFileGenerator.kt @@ -3,8 +3,8 @@ package arrow.instances import arrow.common.Package import arrow.common.utils.* import me.eugeniomarletti.kotlin.metadata.modality -import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.deserialization.TypeTable +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable import java.io.File data class FunctionMapping( diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/instances/InstanceProcessor.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/instances/InstanceProcessor.kt index 853ba95fc82..9e88dbb832e 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/instances/InstanceProcessor.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/instances/InstanceProcessor.kt @@ -4,7 +4,7 @@ import arrow.common.utils.AbstractProcessor import arrow.common.utils.ClassOrPackageDataWrapper import arrow.common.utils.knownError import com.google.auto.service.AutoService -import org.jetbrains.kotlin.serialization.deserialization.TypeTable +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable import java.io.File import javax.annotation.processing.Processor import javax.annotation.processing.RoundEnvironment diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/optics/OpticsProcessor.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/optics/OpticsProcessor.kt index c5b361fd219..2e31b9ebfa9 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/optics/OpticsProcessor.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/optics/OpticsProcessor.kt @@ -9,7 +9,7 @@ import com.google.auto.service.AutoService import me.eugeniomarletti.kotlin.metadata.KotlinClassMetadata import me.eugeniomarletti.kotlin.metadata.isDataClass import me.eugeniomarletti.kotlin.metadata.kotlinMetadata -import org.jetbrains.kotlin.utils.addIfNotNull +import me.eugeniomarletti.kotlin.metadata.shadow.utils.addIfNotNull import java.io.File import javax.annotation.processing.Processor import javax.annotation.processing.RoundEnvironment diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt index 781f44e7fcc..925d18b3686 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt @@ -4,8 +4,8 @@ import arrow.common.messager.log import arrow.common.utils.* import arrow.instances.AnnotatedInstance import javaslang.Tuple2 -import org.jetbrains.kotlin.serialization.deserialization.TypeTable -import org.jetbrains.kotlin.serialization.deserialization.supertypes +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.supertypes import java.io.File import javax.lang.model.element.Name diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuProcessor.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuProcessor.kt index 11cdcbe1140..44fbab76be9 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuProcessor.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuProcessor.kt @@ -7,7 +7,7 @@ import arrow.instances.AnnotatedInstance import arrow.instances.instanceAnnotationClass import arrow.instances.instanceAnnotationName import com.google.auto.service.AutoService -import org.jetbrains.kotlin.serialization.deserialization.TypeTable +import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable import javax.annotation.processing.Processor import javax.annotation.processing.RoundEnvironment import javax.lang.model.SourceVersion From 157a3a69b6d2e9696d1d2cf0a6685be6a65edc02 Mon Sep 17 00:00:00 2001 From: Eugenio Marletti Date: Fri, 27 Apr 2018 19:11:56 +0200 Subject: [PATCH 2/5] Remove unused method (with unavailable dependency) --- .../src/main/java/arrow/common/utils/ProcessorUtils.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ProcessorUtils.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ProcessorUtils.kt index 9d1f9783cf4..dcd79291230 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ProcessorUtils.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/common/utils/ProcessorUtils.kt @@ -2,7 +2,6 @@ package arrow.common.utils import me.eugeniomarletti.kotlin.metadata.* import me.eugeniomarletti.kotlin.metadata.jvm.getJvmMethodSignature -import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.java.MethodElement import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.supertypes @@ -56,9 +55,6 @@ interface ProcessorUtils : KotlinMetadataUtils { ?: knownError("Arrow's annotation can't be used on $classElement") } - fun TypeElement.methods(): List = - enclosedElements.mapNotNull { it as? MethodElement } - fun ClassOrPackageDataWrapper.getFunction(methodElement: ExecutableElement) = getFunctionOrNull(methodElement, nameResolver, functionList) ?: knownError("Can't find annotated method ${methodElement.jvmMethodSignature}") From bfcf81222e6ae80fcf6fefe9f12644e85bd7c420 Mon Sep 17 00:00:00 2001 From: Eugenio Marletti Date: Fri, 27 Apr 2018 19:12:25 +0200 Subject: [PATCH 3/5] Replace unavailable dependency javaslang.Tuple2 with Pair @JorgeCastilloPrz can you take a look at this? It's split in a separate commit so it can be easily reverted, if necessary :D --- .../main/java/arrow/renzu/RenzuGenerator.kt | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt index 925d18b3686..bbc082913a5 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt @@ -3,7 +3,6 @@ package arrow.renzu import arrow.common.messager.log import arrow.common.utils.* import arrow.instances.AnnotatedInstance -import javaslang.Tuple2 import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.supertypes import java.io.File @@ -73,11 +72,11 @@ class RenzuGenerator( annotatedList: List, val isolateForTests: Boolean = false) { - private val typeclassTree: Map>> = + private val typeclassTree: Map>> = normalizeTypeclassTree(annotatedList.map { Instance(it) }) private fun normalizeTypeclassTree(instances: List) - : Map>> = + : Map>> = instances.fold(mapOf()) { acc, instance -> instance.implementedTypeclasses().fold(acc, { acc2, tc -> val typeclass = TypeClass(processor, tc.simpleName, tc) @@ -85,11 +84,11 @@ class RenzuGenerator( val value = acc2[typeclass] if (value != null) { - acc2.filterKeys { it != typeclass } + mapOf(typeclass to Tuple2( - value._1 + setOf(instance), - value._2 + parentTypeClasses)) + acc2.filterKeys { it != typeclass } + mapOf(typeclass to Pair( + value.first + setOf(instance), + value.second + parentTypeClasses)) } else { - acc2 + mapOf(typeclass to Tuple2( + acc2 + mapOf(typeclass to Pair( setOf(instance), parentTypeClasses.toSet())) } @@ -157,16 +156,16 @@ class RenzuGenerator( * [Applicative]<-[Something 2] * [Applicative]<-[Something 3] */ - private fun genDiagramRelations(typeclassTree: Map>>) + private fun genDiagramRelations(typeclassTree: Map>>) : List = typeclassTree.flatMap { - setOf(it.key.arrowModule) + it.value._1.map { it.arrowModule } + setOf(it.key.arrowModule) + it.value.first.map { it.arrowModule } }.toSet().flatMap { listOf("#.${normalizeModule(it)}: ${getModuleStyle(it)}") } + typeclassTree.flatMap { val typeClass = it.key - val instances = it.value._1 - val parentTypeClasses = it.value._2 + val instances = it.value.first + val parentTypeClasses = it.value.second parentTypeClasses.filter { typeClass.simpleName != it.simpleName }.map { "[${it.simpleName}]<-[${typeClass.simpleName}]" From c9e0e1f15b36281d5f02506c87f2b4a550903539 Mon Sep 17 00:00:00 2001 From: Eugenio Marletti Date: Fri, 27 Apr 2018 23:28:03 +0200 Subject: [PATCH 4/5] Use Tuple2 from arrow-core instead of Pair (it's what @JorgeCastilloPrz wants!) --- .../arrow-annotations-processor/build.gradle | 1 + .../main/java/arrow/renzu/RenzuGenerator.kt | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/modules/core/arrow-annotations-processor/build.gradle b/modules/core/arrow-annotations-processor/build.gradle index 90c8ad40bbd..539deeb0bb8 100644 --- a/modules/core/arrow-annotations-processor/build.gradle +++ b/modules/core/arrow-annotations-processor/build.gradle @@ -6,6 +6,7 @@ apply plugin: 'kotlin-kapt' dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" compile project(':arrow-annotations') + compile project(':arrow-core') compile 'me.eugeniomarletti.kotlin.metadata:kotlin-metadata:1.4.0' compileOnly 'com.google.auto.service:auto-service:1.0-rc4' kapt 'com.google.auto.service:auto-service:1.0-rc4' diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt index bbc082913a5..0de866ac4c7 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt @@ -2,6 +2,7 @@ package arrow.renzu import arrow.common.messager.log import arrow.common.utils.* +import arrow.core.Tuple2 import arrow.instances.AnnotatedInstance import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.supertypes @@ -72,11 +73,11 @@ class RenzuGenerator( annotatedList: List, val isolateForTests: Boolean = false) { - private val typeclassTree: Map>> = + private val typeclassTree: Map>> = normalizeTypeclassTree(annotatedList.map { Instance(it) }) private fun normalizeTypeclassTree(instances: List) - : Map>> = + : Map>> = instances.fold(mapOf()) { acc, instance -> instance.implementedTypeclasses().fold(acc, { acc2, tc -> val typeclass = TypeClass(processor, tc.simpleName, tc) @@ -84,11 +85,11 @@ class RenzuGenerator( val value = acc2[typeclass] if (value != null) { - acc2.filterKeys { it != typeclass } + mapOf(typeclass to Pair( - value.first + setOf(instance), - value.second + parentTypeClasses)) + acc2.filterKeys { it != typeclass } + mapOf(typeclass to Tuple2( + value.a + setOf(instance), + value.b + parentTypeClasses)) } else { - acc2 + mapOf(typeclass to Pair( + acc2 + mapOf(typeclass to Tuple2( setOf(instance), parentTypeClasses.toSet())) } @@ -156,16 +157,16 @@ class RenzuGenerator( * [Applicative]<-[Something 2] * [Applicative]<-[Something 3] */ - private fun genDiagramRelations(typeclassTree: Map>>) + private fun genDiagramRelations(typeclassTree: Map>>) : List = typeclassTree.flatMap { - setOf(it.key.arrowModule) + it.value.first.map { it.arrowModule } + setOf(it.key.arrowModule) + it.value.a.map { it.arrowModule } }.toSet().flatMap { listOf("#.${normalizeModule(it)}: ${getModuleStyle(it)}") } + typeclassTree.flatMap { val typeClass = it.key - val instances = it.value.first - val parentTypeClasses = it.value.second + val instances = it.value.a + val parentTypeClasses = it.value.b parentTypeClasses.filter { typeClass.simpleName != it.simpleName }.map { "[${it.simpleName}]<-[${typeClass.simpleName}]" From 4cf4d3ef6248b6b6be07a3fc8f0471365dd3facc Mon Sep 17 00:00:00 2001 From: Eugenio Marletti Date: Sat, 28 Apr 2018 11:45:18 +0200 Subject: [PATCH 5/5] Revert "Use Tuple2 from arrow-core instead of Pair" (it's @JorgeCastilloPrz's fault :P https://github.com/arrow-kt/arrow/pull/821#issuecomment-385148355) This reverts commit c9e0e1f15b36281d5f02506c87f2b4a550903539. --- .../arrow-annotations-processor/build.gradle | 1 - .../main/java/arrow/renzu/RenzuGenerator.kt | 21 +++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/modules/core/arrow-annotations-processor/build.gradle b/modules/core/arrow-annotations-processor/build.gradle index 539deeb0bb8..90c8ad40bbd 100644 --- a/modules/core/arrow-annotations-processor/build.gradle +++ b/modules/core/arrow-annotations-processor/build.gradle @@ -6,7 +6,6 @@ apply plugin: 'kotlin-kapt' dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" compile project(':arrow-annotations') - compile project(':arrow-core') compile 'me.eugeniomarletti.kotlin.metadata:kotlin-metadata:1.4.0' compileOnly 'com.google.auto.service:auto-service:1.0-rc4' kapt 'com.google.auto.service:auto-service:1.0-rc4' diff --git a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt index 0de866ac4c7..bbc082913a5 100644 --- a/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt +++ b/modules/core/arrow-annotations-processor/src/main/java/arrow/renzu/RenzuGenerator.kt @@ -2,7 +2,6 @@ package arrow.renzu import arrow.common.messager.log import arrow.common.utils.* -import arrow.core.Tuple2 import arrow.instances.AnnotatedInstance import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.TypeTable import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.supertypes @@ -73,11 +72,11 @@ class RenzuGenerator( annotatedList: List, val isolateForTests: Boolean = false) { - private val typeclassTree: Map>> = + private val typeclassTree: Map>> = normalizeTypeclassTree(annotatedList.map { Instance(it) }) private fun normalizeTypeclassTree(instances: List) - : Map>> = + : Map>> = instances.fold(mapOf()) { acc, instance -> instance.implementedTypeclasses().fold(acc, { acc2, tc -> val typeclass = TypeClass(processor, tc.simpleName, tc) @@ -85,11 +84,11 @@ class RenzuGenerator( val value = acc2[typeclass] if (value != null) { - acc2.filterKeys { it != typeclass } + mapOf(typeclass to Tuple2( - value.a + setOf(instance), - value.b + parentTypeClasses)) + acc2.filterKeys { it != typeclass } + mapOf(typeclass to Pair( + value.first + setOf(instance), + value.second + parentTypeClasses)) } else { - acc2 + mapOf(typeclass to Tuple2( + acc2 + mapOf(typeclass to Pair( setOf(instance), parentTypeClasses.toSet())) } @@ -157,16 +156,16 @@ class RenzuGenerator( * [Applicative]<-[Something 2] * [Applicative]<-[Something 3] */ - private fun genDiagramRelations(typeclassTree: Map>>) + private fun genDiagramRelations(typeclassTree: Map>>) : List = typeclassTree.flatMap { - setOf(it.key.arrowModule) + it.value.a.map { it.arrowModule } + setOf(it.key.arrowModule) + it.value.first.map { it.arrowModule } }.toSet().flatMap { listOf("#.${normalizeModule(it)}: ${getModuleStyle(it)}") } + typeclassTree.flatMap { val typeClass = it.key - val instances = it.value.a - val parentTypeClasses = it.value.b + val instances = it.value.first + val parentTypeClasses = it.value.second parentTypeClasses.filter { typeClass.simpleName != it.simpleName }.map { "[${it.simpleName}]<-[${typeClass.simpleName}]"