From f7b38f77d0fcd330c43779c81ef3d593af400bf1 Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Tue, 14 Mar 2017 14:44:13 +0000 Subject: [PATCH 1/6] Kapt is no longer run automatically when build is run. --- node-schemas/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/node-schemas/build.gradle b/node-schemas/build.gradle index f3562e4d38..d67ea02d49 100644 --- a/node-schemas/build.gradle +++ b/node-schemas/build.gradle @@ -33,3 +33,6 @@ dependencies { // For H2 database support in persistence testCompile "com.h2database:h2:1.4.193" } + +// Remove the dependency on compile in kapt to avoid automatic kapt running - run :node-schemas:kaptKotlin explicitly. +project.afterEvaluate { compileKotlin.dependsOn.remove(kaptKotlin) } \ No newline at end of file From 4c74de5237338aef03ea5f9b072e3de92276ff05 Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Tue, 14 Mar 2017 16:53:05 +0000 Subject: [PATCH 2/6] Moved generated code out of directories that get cleaned. --- node-schemas/build.gradle | 11 +++++++++-- .../net/corda/node/services/vault/schemas/Models.java | 0 .../vault/schemas/VaultCashBalancesEntity.java | 0 .../services/vault/schemas/VaultStatesEntity.java | 0 .../services/vault/schemas/VaultTxnNoteEntity.java | 0 5 files changed, 9 insertions(+), 2 deletions(-) rename node-schemas/{build => }/generated/source/kapt/main/net/corda/node/services/vault/schemas/Models.java (100%) rename node-schemas/{build => }/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultCashBalancesEntity.java (100%) rename node-schemas/{build => }/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultStatesEntity.java (100%) rename node-schemas/{build => }/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultTxnNoteEntity.java (100%) diff --git a/node-schemas/build.gradle b/node-schemas/build.gradle index d67ea02d49..54ad9dcb1d 100644 --- a/node-schemas/build.gradle +++ b/node-schemas/build.gradle @@ -19,7 +19,7 @@ repositories { sourceSets { main { kotlin { - srcDir "${buildDir}/generated/source/kapt/main/" + srcDir "${projectDir}/generated/source/kapt/main/" } } } @@ -34,5 +34,12 @@ dependencies { testCompile "com.h2database:h2:1.4.193" } +task copyGenerated(type: Copy, dependsOn: [kaptKotlin]) { + from "${buildDir}/generated" + into "${projectDir}/generated" +} + // Remove the dependency on compile in kapt to avoid automatic kapt running - run :node-schemas:kaptKotlin explicitly. -project.afterEvaluate { compileKotlin.dependsOn.remove(kaptKotlin) } \ No newline at end of file +project.afterEvaluate { + compileKotlin.dependsOn.remove(kaptKotlin) +} \ No newline at end of file diff --git a/node-schemas/build/generated/source/kapt/main/net/corda/node/services/vault/schemas/Models.java b/node-schemas/generated/source/kapt/main/net/corda/node/services/vault/schemas/Models.java similarity index 100% rename from node-schemas/build/generated/source/kapt/main/net/corda/node/services/vault/schemas/Models.java rename to node-schemas/generated/source/kapt/main/net/corda/node/services/vault/schemas/Models.java diff --git a/node-schemas/build/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultCashBalancesEntity.java b/node-schemas/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultCashBalancesEntity.java similarity index 100% rename from node-schemas/build/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultCashBalancesEntity.java rename to node-schemas/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultCashBalancesEntity.java diff --git a/node-schemas/build/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultStatesEntity.java b/node-schemas/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultStatesEntity.java similarity index 100% rename from node-schemas/build/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultStatesEntity.java rename to node-schemas/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultStatesEntity.java diff --git a/node-schemas/build/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultTxnNoteEntity.java b/node-schemas/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultTxnNoteEntity.java similarity index 100% rename from node-schemas/build/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultTxnNoteEntity.java rename to node-schemas/generated/source/kapt/main/net/corda/node/services/vault/schemas/VaultTxnNoteEntity.java From d69a12dc15da72224be3776b8d33a26cc0e708d3 Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Tue, 14 Mar 2017 17:03:53 +0000 Subject: [PATCH 3/6] Added all generated files and added a buildKapt task to actually build kapt. --- node-schemas/build.gradle | 8 +- .../persistence/schemas/AttachmentEntity.java | 153 ++++++++++++++++++ .../services/persistence/schemas/Models.java | 16 ++ 3 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 node-schemas/generated/source/kapt/main/net/corda/node/services/persistence/schemas/AttachmentEntity.java create mode 100644 node-schemas/generated/source/kapt/main/net/corda/node/services/persistence/schemas/Models.java diff --git a/node-schemas/build.gradle b/node-schemas/build.gradle index 54ad9dcb1d..de58adc808 100644 --- a/node-schemas/build.gradle +++ b/node-schemas/build.gradle @@ -34,12 +34,16 @@ dependencies { testCompile "com.h2database:h2:1.4.193" } -task copyGenerated(type: Copy, dependsOn: [kaptKotlin]) { +// Generated files will be removed by gradle clean. Since we aren't running kapt every time we must preserve these files +// Note: The lines that actually invoke kapt are those in the project.afterEvaluate block. +task buildKapt(type: Copy) { from "${buildDir}/generated" into "${projectDir}/generated" } // Remove the dependency on compile in kapt to avoid automatic kapt running - run :node-schemas:kaptKotlin explicitly. project.afterEvaluate { - compileKotlin.dependsOn.remove(kaptKotlin) + compileKotlin.dependsOn.remove kaptKotlin + buildKapt.dependsOn kaptKotlin + buildKapt.mustRunAfter kaptKotlin } \ No newline at end of file diff --git a/node-schemas/generated/source/kapt/main/net/corda/node/services/persistence/schemas/AttachmentEntity.java b/node-schemas/generated/source/kapt/main/net/corda/node/services/persistence/schemas/AttachmentEntity.java new file mode 100644 index 0000000000..3a36c5c53e --- /dev/null +++ b/node-schemas/generated/source/kapt/main/net/corda/node/services/persistence/schemas/AttachmentEntity.java @@ -0,0 +1,153 @@ +// Generated file do not edit, generated by io.requery.processor.EntityProcessor +package net.corda.node.services.persistence.schemas; + +import io.requery.Persistable; +import io.requery.meta.AttributeBuilder; +import io.requery.meta.AttributeDelegate; +import io.requery.meta.Type; +import io.requery.meta.TypeBuilder; +import io.requery.proxy.EntityProxy; +import io.requery.proxy.Property; +import io.requery.proxy.PropertyState; +import io.requery.util.function.Function; +import io.requery.util.function.Supplier; +import java.lang.Object; +import java.lang.Override; +import java.lang.String; +import javax.annotation.Generated; +import net.corda.core.crypto.SecureHash; + +@Generated("io.requery.processor.EntityProcessor") +public class AttachmentEntity implements Attachment, Persistable { + public static final AttributeDelegate ATT_ID = new AttributeDelegate( + new AttributeBuilder("att_id", SecureHash.class) + .setProperty(new Property() { + @Override + public SecureHash get(AttachmentEntity entity) { + return entity.attId; + } + + @Override + public void set(AttachmentEntity entity, SecureHash value) { + entity.attId = value; + } + }) + .setPropertyName("getAttId") + .setPropertyState(new Property() { + @Override + public PropertyState get(AttachmentEntity entity) { + return entity.$attId_state; + } + + @Override + public void set(AttachmentEntity entity, PropertyState value) { + entity.$attId_state = value; + } + }) + .setKey(true) + .setGenerated(false) + .setLazy(false) + .setNullable(true) + .setUnique(false) + .build()); + + public static final AttributeDelegate CONTENT = new AttributeDelegate( + new AttributeBuilder("content", byte[].class) + .setProperty(new Property() { + @Override + public byte[] get(AttachmentEntity entity) { + return entity.content; + } + + @Override + public void set(AttachmentEntity entity, byte[] value) { + entity.content = value; + } + }) + .setPropertyName("getContent") + .setPropertyState(new Property() { + @Override + public PropertyState get(AttachmentEntity entity) { + return entity.$content_state; + } + + @Override + public void set(AttachmentEntity entity, PropertyState value) { + entity.$content_state = value; + } + }) + .setGenerated(false) + .setLazy(false) + .setNullable(true) + .setUnique(false) + .setConverter(new net.corda.core.schemas.requery.converters.BlobConverter()) + .build()); + + public static final Type $TYPE = new TypeBuilder(AttachmentEntity.class, "attachments") + .setBaseType(Attachment.class) + .setCacheable(true) + .setImmutable(false) + .setReadOnly(false) + .setStateless(false) + .setFactory(new Supplier() { + @Override + public AttachmentEntity get() { + return new AttachmentEntity(); + } + }) + .setProxyProvider(new Function>() { + @Override + public EntityProxy apply(AttachmentEntity entity) { + return entity.$proxy; + } + }) + .addAttribute(ATT_ID) + .addAttribute(CONTENT) + .build(); + + private PropertyState $attId_state; + + private PropertyState $content_state; + + private SecureHash attId; + + private byte[] content; + + private final transient EntityProxy $proxy = new EntityProxy(this, $TYPE); + + public AttachmentEntity() { + } + + @Override + public SecureHash getAttId() { + return $proxy.get(ATT_ID); + } + + public void setAttId(SecureHash attId) { + $proxy.set(ATT_ID, attId); + } + + @Override + public byte[] getContent() { + return $proxy.get(CONTENT); + } + + public void setContent(byte[] content) { + $proxy.set(CONTENT, content); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof AttachmentEntity && ((AttachmentEntity)obj).$proxy.equals(this.$proxy); + } + + @Override + public int hashCode() { + return $proxy.hashCode(); + } + + @Override + public String toString() { + return $proxy.toString(); + } +} diff --git a/node-schemas/generated/source/kapt/main/net/corda/node/services/persistence/schemas/Models.java b/node-schemas/generated/source/kapt/main/net/corda/node/services/persistence/schemas/Models.java new file mode 100644 index 0000000000..fb8e8d03fb --- /dev/null +++ b/node-schemas/generated/source/kapt/main/net/corda/node/services/persistence/schemas/Models.java @@ -0,0 +1,16 @@ +// Generated file do not edit, generated by io.requery.processor.EntityProcessor +package net.corda.node.services.persistence.schemas; + +import io.requery.meta.EntityModel; +import io.requery.meta.EntityModelBuilder; +import javax.annotation.Generated; + +@Generated("io.requery.processor.EntityProcessor") +public class Models { + public static final EntityModel PERSISTENCE = new EntityModelBuilder("persistence") + .addType(AttachmentEntity.$TYPE) + .build(); + + private Models() { + } +} From 03c04608446458525618373f15ae3b71d03c260e Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Thu, 16 Mar 2017 10:20:03 +0000 Subject: [PATCH 4/6] Fixed an issue with subprojects not correctly compiling due to incorrect sourceSet definition in build.gradle. --- node-schemas/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node-schemas/build.gradle b/node-schemas/build.gradle index de58adc808..21ec7ae360 100644 --- a/node-schemas/build.gradle +++ b/node-schemas/build.gradle @@ -18,7 +18,7 @@ repositories { sourceSets { main { - kotlin { + java { srcDir "${projectDir}/generated/source/kapt/main/" } } From 4775756fb0eb352a8ac6cbdc47e711b56d3f7b2d Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Thu, 16 Mar 2017 14:04:55 +0000 Subject: [PATCH 5/6] Entirely separated the generation step from the jar step allowing for separate running of kapt and packaging. --- node-schemas/build.gradle | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/node-schemas/build.gradle b/node-schemas/build.gradle index 21ec7ae360..56e61cfd6c 100644 --- a/node-schemas/build.gradle +++ b/node-schemas/build.gradle @@ -16,8 +16,15 @@ repositories { } } +// Kapt plugin is hardcoded in output directory and sourcesets. Use a separate sourceset to keep the generated +// files in git and outside of the build directory (to avoid cleaning issues) sourceSets { main { + kotlin { + srcDir "${buildDir}/generated/source/kapt/main/" + } + } + generated { java { srcDir "${projectDir}/generated/source/kapt/main/" } @@ -41,9 +48,24 @@ task buildKapt(type: Copy) { into "${projectDir}/generated" } +// Kapt hijacks anything named "compile" +task buildGenerated(type: JavaCompile) { + source = sourceSets.generated.allJava + classpath = sourceSets.generated.compileClasspath + sourceSets.main.compileClasspath + sourceSets.main.output + destinationDir = file("$buildDir/classes/generated") +} + // Remove the dependency on compile in kapt to avoid automatic kapt running - run :node-schemas:kaptKotlin explicitly. project.afterEvaluate { + jar.dependsOn.each { jar.dependsOn.remove it } + buildGenerated.dependsOn.each { buildGenerated.dependsOn.remove it } + jar.dependsOn buildGenerated + buildGenerated.dependsOn classes compileKotlin.dependsOn.remove kaptKotlin buildKapt.dependsOn kaptKotlin buildKapt.mustRunAfter kaptKotlin -} \ No newline at end of file +} + +jar { + from sourceSets.generated.output +} From b4a5902faff7a7849c66a9c2f5b11a4840a5ef0e Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Fri, 17 Mar 2017 12:17:50 +0000 Subject: [PATCH 6/6] Test build now compiles correctly with kapt removed from the build tree. --- node-schemas/build.gradle | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/node-schemas/build.gradle b/node-schemas/build.gradle index 56e61cfd6c..df382cb787 100644 --- a/node-schemas/build.gradle +++ b/node-schemas/build.gradle @@ -27,8 +27,13 @@ sourceSets { generated { java { srcDir "${projectDir}/generated/source/kapt/main/" + compileClasspath += sourceSets.main.compileClasspath + sourceSets.main.output } } + test { + compileClasspath += sourceSets.generated.output + sourceSets.main.compileClasspath + runtimeClasspath += compileClasspath + } } dependencies { @@ -60,8 +65,10 @@ project.afterEvaluate { jar.dependsOn.each { jar.dependsOn.remove it } buildGenerated.dependsOn.each { buildGenerated.dependsOn.remove it } jar.dependsOn buildGenerated + compileTestKotlin.dependsOn buildGenerated buildGenerated.dependsOn classes compileKotlin.dependsOn.remove kaptKotlin + compileTestKotlin.dependsOn.remove kaptTestKotlin buildKapt.dependsOn kaptKotlin buildKapt.mustRunAfter kaptKotlin }