Skip to content

Commit 29cc568

Browse files
authored
Merge pull request #263 from Takhion/update-kotlin-metadata-lib
Update kotlin-metadata library from 1.1.0 to 1.2.0
2 parents 3abc0c4 + a2d967a commit 29cc568

File tree

5 files changed

+25
-65
lines changed

5 files changed

+25
-65
lines changed

kategory-annotations-processor/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ dependencies {
77
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlinVersion"
88
compile project(':kategory-annotations')
99
compile 'com.squareup:kotlinpoet:0.4.0'
10-
compile 'me.eugeniomarletti:kotlin-metadata:1.1.0'
10+
compile 'me.eugeniomarletti:kotlin-metadata:1.2.0'
1111
compileOnly 'com.google.auto.service:auto-service:1.0-rc3'
1212
kapt 'com.google.auto.service:auto-service:1.0-rc3'
1313

kategory-annotations-processor/src/main/java/kategory/common/messager/MessagerExtensions.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package kategory.common.messager
22

3-
import me.eugeniomarletti.kotlin.processing.KotlinProcessingUtils
3+
import me.eugeniomarletti.kotlin.processing.KotlinProcessingEnvironment
44
import javax.lang.model.element.AnnotationMirror
55
import javax.lang.model.element.AnnotationValue
66
import javax.lang.model.element.Element
@@ -9,25 +9,25 @@ import javax.tools.Diagnostic.Kind.MANDATORY_WARNING
99
import javax.tools.Diagnostic.Kind.NOTE
1010
import javax.tools.Diagnostic.Kind.WARNING
1111

12-
fun KotlinProcessingUtils.log(message: CharSequence,
12+
fun KotlinProcessingEnvironment.log(message: CharSequence,
1313
element: Element? = null,
1414
annotationMirror: AnnotationMirror? = null,
1515
annotationValue: AnnotationValue? = null
1616
) = messager.printMessage(NOTE, message, element, annotationMirror, annotationValue)
1717

18-
fun KotlinProcessingUtils.logW(message: CharSequence,
18+
fun KotlinProcessingEnvironment.logW(message: CharSequence,
1919
element: Element? = null,
2020
annotationMirror: AnnotationMirror? = null,
2121
annotationValue: AnnotationValue? = null
2222
) = messager.printMessage(WARNING, message, element, annotationMirror, annotationValue)
2323

24-
fun KotlinProcessingUtils.logMW(message: CharSequence,
24+
fun KotlinProcessingEnvironment.logMW(message: CharSequence,
2525
element: Element? = null,
2626
annotationMirror: AnnotationMirror? = null,
2727
annotationValue: AnnotationValue? = null
2828
) = messager.printMessage(MANDATORY_WARNING, message, element, annotationMirror, annotationValue)
2929

30-
fun KotlinProcessingUtils.logE(message: CharSequence,
30+
fun KotlinProcessingEnvironment.logE(message: CharSequence,
3131
element: Element? = null,
3232
annotationMirror: AnnotationMirror? = null,
3333
annotationValue: AnnotationValue? = null

kategory-annotations-processor/src/main/java/kategory/common/utils/AbstractProcessor.kt

-4
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import me.eugeniomarletti.kotlin.processing.KotlinAbstractProcessor
55
import javax.annotation.processing.RoundEnvironment
66
import javax.lang.model.element.Element
77
import javax.lang.model.element.TypeElement
8-
import me.eugeniomarletti.kotlin.metadata.kaptGeneratedOption
9-
import java.io.File
108

119
class KnownException(message: String, val element: Element?) : RuntimeException(message) {
1210
override val message: String get() = super.message as String
@@ -16,8 +14,6 @@ class KnownException(message: String, val element: Element?) : RuntimeException(
1614

1715
abstract class AbstractProcessor : KotlinAbstractProcessor(), ProcessorUtils {
1816

19-
val generatedDir: File? get() = options[kaptGeneratedOption]?.let(::File)
20-
2117
override final fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
2218
if (!roundEnv.errorRaised()) {
2319
try {

kategory-annotations-processor/src/main/java/kategory/common/utils/ProcessorUtils.kt

+16-52
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import me.eugeniomarletti.kotlin.metadata.KotlinClassMetadata
55
import me.eugeniomarletti.kotlin.metadata.KotlinMetadata
66
import me.eugeniomarletti.kotlin.metadata.KotlinMetadataUtils
77
import me.eugeniomarletti.kotlin.metadata.KotlinPackageMetadata
8-
import me.eugeniomarletti.kotlin.metadata.getJvmMethodSignature
8+
import me.eugeniomarletti.kotlin.metadata.extractFullName
9+
import me.eugeniomarletti.kotlin.metadata.getPropertyOrNull
10+
import me.eugeniomarletti.kotlin.metadata.getValueParameterOrNull
11+
import me.eugeniomarletti.kotlin.metadata.jvm.getJvmMethodSignature
912
import me.eugeniomarletti.kotlin.metadata.kotlinMetadata
10-
import me.eugeniomarletti.kotlin.metadata.kotlinPropertyAnnotationsFunPostfix
1113
import org.jetbrains.kotlin.serialization.ProtoBuf
1214
import javax.lang.model.element.Element
1315
import javax.lang.model.element.ExecutableElement
@@ -31,71 +33,33 @@ interface ProcessorUtils : KotlinMetadataUtils {
3133
}
3234

3335
fun ClassOrPackageDataWrapper.getFunction(methodElement: ExecutableElement) =
34-
methodElement.jvmMethodSignature.let { methodSignature ->
35-
functionList
36-
.firstOrNull { methodSignature == it.getJvmMethodSignature(nameResolver) }
37-
?: knownError("Can't find annotated method $methodSignature")
38-
}
36+
getFunctionOrNull(methodElement, nameResolver, functionList)
37+
?: knownError("Can't find annotated method ${methodElement.jvmMethodSignature}")
3938
}
4039

4140
fun knownError(message: String, element: Element? = null): Nothing = throw KnownException(message, element)
4241

43-
fun String.plusIfNotBlank(
44-
postfix: String = "",
45-
prefix: String = ""
46-
) = if (this.isNotBlank()) prefix + this + postfix else this
47-
48-
val String.escapedClassName
49-
get() = split('/', '.').joinToString("`.`").plusIfNotBlank(prefix = "`", postfix = "`")
50-
5142
val ProtoBuf.Class.Kind.isCompanionOrObject get() = when (this) {
5243
ProtoBuf.Class.Kind.OBJECT,
5344
ProtoBuf.Class.Kind.COMPANION_OBJECT -> true
5445
else -> false
5546
}
5647

5748
fun ClassOrPackageDataWrapper.getParameter(function: ProtoBuf.Function, parameterElement: VariableElement) =
58-
parameterElement.simpleName.toString().let { parameterName ->
59-
function.valueParameterList
60-
.firstOrNull { parameterName == nameResolver.getString(it.name) }
61-
?: knownError("Can't find annotated parameter $parameterName in ${function.getJvmMethodSignature(nameResolver)}")
62-
}
49+
getValueParameterOrNull(nameResolver, function, parameterElement)
50+
?: knownError("Can't find annotated parameter ${parameterElement.simpleName} in ${function.getJvmMethodSignature(nameResolver)}")
6351

6452
fun ClassOrPackageDataWrapper.getPropertyOrNull(methodElement: ExecutableElement) =
65-
methodElement.simpleName.toString()
66-
.takeIf { it.endsWith(kotlinPropertyAnnotationsFunPostfix) }
67-
?.substringBefore(kotlinPropertyAnnotationsFunPostfix)
68-
?.let { propertyName -> propertyList.firstOrNull { propertyName == nameResolver.getString(it.name) } }
53+
getPropertyOrNull(methodElement, nameResolver, this::propertyList)
6954

7055
fun ProtoBuf.Type.extractFullName(
7156
classData: ClassOrPackageDataWrapper,
7257
outputTypeAlias: Boolean = true,
7358
failOnGeneric: Boolean = true
74-
): String {
75-
val nameResolver = classData.nameResolver
76-
77-
if (failOnGeneric && !hasClassName()) knownError("Generic $implicitAnnotationName types are not yet supported")
78-
79-
val name = when {
80-
hasTypeParameter() -> classData.getTypeParameter(typeParameter)!!.name
81-
hasTypeParameterName() -> typeParameterName
82-
outputTypeAlias && hasAbbreviatedType() -> abbreviatedType.typeAliasName
83-
else -> className
84-
}.let { nameResolver.getString(it).escapedClassName }
85-
86-
val argumentList = if (outputTypeAlias && hasAbbreviatedType()) abbreviatedType.argumentList else argumentList
87-
val arguments = argumentList
88-
.takeIf { it.isNotEmpty() }
89-
?.joinToString(prefix = "<", postfix = ">") {
90-
when {
91-
it.hasType() -> it.type.extractFullName(classData, outputTypeAlias, failOnGeneric)
92-
!failOnGeneric -> "*"
93-
else -> knownError("Wildcard $implicitAnnotationName types are not yet supported")
94-
}
95-
}
96-
?: ""
97-
98-
val nullability = if (nullable) "?" else ""
99-
100-
return name + arguments + nullability
101-
}
59+
): String =
60+
extractFullName(
61+
nameResolver = classData.nameResolver,
62+
getTypeParameter = { classData.getTypeParameter(it)!! },
63+
outputTypeAlias = outputTypeAlias,
64+
throwOnGeneric = if (!failOnGeneric) null else KnownException("Generic $implicitAnnotationName types are not yet supported", null)
65+
)

kategory-annotations-processor/src/main/java/kategory/implicits/ImplicitsFileGenerator.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import kategory.implicits.AnnotatedImplicits.Provider
88
import kategory.implicits.AnnotatedImplicits.Provider.Function
99
import kategory.implicits.AnnotatedImplicits.Provider.Property
1010
import kategory.common.utils.ClassOrPackageDataWrapper
11-
import kategory.common.utils.escapedClassName
1211
import kategory.common.utils.extractFullName
1312
import kategory.common.utils.knownError
14-
import kategory.common.utils.plusIfNotBlank
15-
import me.eugeniomarletti.kotlin.metadata.getJvmMethodSignature
13+
import me.eugeniomarletti.kotlin.metadata.escapedClassName
14+
import me.eugeniomarletti.kotlin.metadata.jvm.getJvmMethodSignature
15+
import me.eugeniomarletti.kotlin.metadata.plusIfNotBlank
1616
import org.jetbrains.kotlin.serialization.ProtoBuf
1717
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
1818
import java.io.File

0 commit comments

Comments
 (0)