Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
d107a6c
Working
lauzadis Aug 27, 2024
2c3b746
Add a comment
lauzadis Aug 27, 2024
84cb888
ktlint
lauzadis Aug 27, 2024
b7b6c5b
cleaning up
lauzadis Aug 27, 2024
c4a13ed
Add a comment
lauzadis Aug 27, 2024
fb145a8
Undo changes to BuilderRenderer
lauzadis Aug 27, 2024
1d0a599
Disable plugin test package (for now)
lauzadis Aug 27, 2024
bf459be
Bump network timeout for downloading Gradle
lauzadis Aug 27, 2024
c8830bc
Update comment
lauzadis Aug 27, 2024
3fff3df
ktlint
lauzadis Aug 28, 2024
1a2966b
revert
lauzadis Aug 28, 2024
524858c
clean up
lauzadis Aug 28, 2024
22a6ffe
fill out test
lauzadis Aug 28, 2024
ed889da
Fix rendering schema
lauzadis Aug 28, 2024
e94033e
Merge branch 'feat-ddb-mapper' of github.com:awslabs/aws-sdk-kotlin i…
lauzadis Aug 28, 2024
d627e30
Merge branch 'feat-ddb-mapper' of github.com:awslabs/aws-sdk-kotlin i…
lauzadis Aug 28, 2024
9707eb8
PR feedback
lauzadis Aug 28, 2024
4edb573
ktlint
lauzadis Aug 28, 2024
d7547d3
rename plugin extension
lauzadis Aug 28, 2024
b876ada
use default `false` member for `mutable` `Member`
lauzadis Aug 28, 2024
00e93a5
Fix new attributes
lauzadis Aug 28, 2024
6bc65fa
Commonize and remove unnecessary test
lauzadis Aug 28, 2024
0cbd2a8
commonize GradleRunner
lauzadis Aug 28, 2024
4e4e473
revert UserTest
lauzadis Aug 28, 2024
d232651
Add more codegen options
lauzadis Aug 28, 2024
a4fe6bc
All codegen options are working
lauzadis Aug 29, 2024
e5cd349
ktlintFormat
lauzadis Aug 29, 2024
9b2d135
Add TestKit tests for all codegen options
lauzadis Aug 29, 2024
d6fb875
ktlint
lauzadis Aug 29, 2024
3cc951a
clean up
lauzadis Aug 29, 2024
a2bcaec
ktlint
lauzadis Aug 29, 2024
9b9de55
Update KDocs
lauzadis Aug 29, 2024
8abda74
Add more KDocs
lauzadis Aug 29, 2024
6c49b8f
Running unit tests
lauzadis Aug 29, 2024
8ebc112
ktlint
lauzadis Aug 29, 2024
b503c15
Add KDocs
lauzadis Aug 29, 2024
dc30dfb
Implicit -> empty string
lauzadis Aug 29, 2024
9a58f5c
ktlint
lauzadis Aug 29, 2024
29d77c9
Commit latest
lauzadis Sep 6, 2024
6ce008d
Merge branch 'feat-ddb-mapper' of github.com:awslabs/aws-sdk-kotlin i…
lauzadis Sep 6, 2024
ae26243
Fix merge
lauzadis Sep 6, 2024
633268a
Commit latest
lauzadis Sep 6, 2024
5cad5bb
Get tests passing again
lauzadis Sep 6, 2024
74a6157
ListConverter
lauzadis Sep 6, 2024
731a679
ktlintformat
lauzadis Sep 6, 2024
80b8107
revert old changes
lauzadis Sep 6, 2024
43dc70c
Remove Dependencies.ALL_FILES in annotation processor
lauzadis Sep 9, 2024
f7bdf42
start work on configurable unknown attributes behavior
lauzadis Sep 9, 2024
bf216d6
Delete AnnotatedClassProperty
lauzadis Sep 9, 2024
537463d
Latest
lauzadis Sep 9, 2024
b49ff7e
ktlintFormat
lauzadis Sep 9, 2024
9f55f5a
Remove logs
lauzadis Sep 9, 2024
329ac7b
Update comment
lauzadis Sep 9, 2024
8cc75cc
Simplification
lauzadis Sep 10, 2024
8b19546
Save latest changes
lauzadis Sep 10, 2024
57c5f13
temp. commit
lauzadis Sep 12, 2024
a43e506
Merge branch 'feat-ddb-mapper' of github.com:awslabs/aws-sdk-kotlin i…
lauzadis Sep 12, 2024
8b989b9
Fix merge
lauzadis Sep 12, 2024
7481db6
ktlint
lauzadis Sep 13, 2024
f287fd5
Latest
lauzadis Sep 16, 2024
ee115d5
ktlintFormat
lauzadis Sep 16, 2024
b0e6b2b
1st pass
lauzadis Sep 16, 2024
976e9eb
Commonize `SchemaAttributes` and compare using `TypeRef` instead of p…
lauzadis Sep 18, 2024
57b7fea
Extract `shouldRenderValueConverter` to extension function
lauzadis Sep 18, 2024
39651f5
Fix parenthesis and args hacks
lauzadis Sep 18, 2024
c9cdf85
ktlint
lauzadis Sep 18, 2024
fc763db
api changes
lauzadis Sep 18, 2024
1974963
ItemConverter implements Converter<T, Item> and generate usage of Ite…
lauzadis Sep 18, 2024
b075c92
ktlintFormat
lauzadis Sep 18, 2024
4afaf33
Fix compile
lauzadis Sep 18, 2024
fe84aa6
Clean up rendering value converter
lauzadis Sep 18, 2024
7f667b8
Zip
lauzadis Sep 18, 2024
232b858
Remove removeSuffix
lauzadis Sep 18, 2024
7144d0c
Remove comment
lauzadis Sep 18, 2024
295aa45
Merge branch 'feat-ddb-mapper' of github.com:awslabs/aws-sdk-kotlin i…
lauzadis Sep 18, 2024
f45548d
revert back to zip
lauzadis Sep 19, 2024
eaab8cd
remove unnecessary parens
lauzadis Sep 19, 2024
10044f6
Add KDocs
lauzadis Sep 19, 2024
dff75e4
isGenericFor
lauzadis Sep 19, 2024
87f8d03
refactor renderValueConverter as a non-extension function
lauzadis Sep 19, 2024
d1ff053
ktlintFormat
lauzadis Sep 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public class AnnotationsProcessor(private val environment: SymbolProcessorEnviro
private var invoked = false
private val logger = environment.logger
private val codeGenerator = environment.codeGenerator
private val codeGeneratorFactory = CodeGeneratorFactory(codeGenerator, logger)

override fun process(resolver: Resolver): List<KSAnnotated> {
if (invoked) {
Expand All @@ -42,6 +41,9 @@ public class AnnotationsProcessor(private val environment: SymbolProcessorEnviro
.filterIsInstance<KSClassDeclaration>()
.filter { it.validate() }

val dependencies = Dependencies(aggregating = true, *(annotatedClasses.mapNotNull { it.containingFile }.toTypedArray()))
val codeGeneratorFactory = CodeGeneratorFactory(environment.codeGenerator, logger, dependencies)

HighLevelRenderer(annotatedClasses, logger, codeGeneratorFactory, getCodegenAttributes()).render()

return invalid
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@ package aws.sdk.kotlin.hll.dynamodbmapper.codegen.annotations.rendering

import aws.sdk.kotlin.hll.codegen.core.CodeGeneratorFactory
import aws.sdk.kotlin.hll.codegen.rendering.RenderContext
import aws.sdk.kotlin.hll.codegen.util.plus
import aws.sdk.kotlin.hll.dynamodbmapper.codegen.annotations.AnnotationsProcessorOptions
import aws.sdk.kotlin.hll.dynamodbmapper.codegen.annotations.DestinationPackage
import aws.smithy.kotlin.runtime.collections.Attributes
import aws.smithy.kotlin.runtime.collections.emptyAttributes
import aws.smithy.kotlin.runtime.collections.get
import aws.smithy.kotlin.runtime.collections.*
import com.google.devtools.ksp.processing.KSPLogger
import com.google.devtools.ksp.symbol.KSClassDeclaration

Expand All @@ -25,24 +24,45 @@ internal class HighLevelRenderer(
private val codegenAttributes: Attributes = emptyAttributes(),
) {
internal fun render() {
annotatedClasses.forEach {
logger.info("Processing annotation on ${it.simpleName}")
annotatedClasses.forEach { annotated ->
logger.info("Processing annotation on ${annotated.simpleName}")

val codegenPkg = when (val dstPkg = codegenAttributes[AnnotationsProcessorOptions.DestinationPackageAttribute]) {
is DestinationPackage.Relative -> "${it.packageName.asString()}.${dstPkg.pkg}"
is DestinationPackage.Relative -> "${annotated.packageName.asString()}.${dstPkg.pkg}"
is DestinationPackage.Absolute -> dstPkg.pkg
}

val attributes = codegenAttributes + (SchemaAttributes.ShouldRenderValueConverterAttribute to annotated.shouldRenderValueConverter)

val renderCtx = RenderContext(
logger,
codegenFactory,
codegenPkg,
"dynamodb-mapper-annotation-processor",
codegenAttributes,
attributes,
)

val annotation = SchemaRenderer(it, renderCtx)
val annotation = SchemaRenderer(annotated, renderCtx)
annotation.render()
}
}

// Value converters must be generated for any DynamoDbItem which is referenced by another DynamoDbItem
private val KSClassDeclaration.shouldRenderValueConverter: Boolean
get() = annotatedClasses.any { otherClass ->
val name = requireNotNull(qualifiedName).asString()

otherClass.getAllProperties().any { prop ->
val propType = prop.type.resolve()
val propName = requireNotNull(propType.declaration.qualifiedName).asString()

// If the property OR any of its arguments reference the annotated type
propName == name ||
propType.arguments.any { arg ->
val argType = arg.type?.resolve()
val argName = requireNotNull(argType?.declaration?.qualifiedName).asString()
argName == name
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
package aws.sdk.kotlin.hll.dynamodbmapper.codegen.annotations.rendering

import aws.smithy.kotlin.runtime.collections.AttributeKey

/**
* Internal schema code generation attributes
*/
internal object SchemaAttributes {
/**
* Whether a value converter should be generated for the class being processed
*/
internal val ShouldRenderValueConverterAttribute: AttributeKey<Boolean> = AttributeKey("ShouldRenderValueConverter")
}
Loading