Skip to content

Commit

Permalink
Using contracts in Kotlin
Browse files Browse the repository at this point in the history
  • Loading branch information
jesperancinha committed Jan 17, 2024
1 parent e51c077 commit 299934b
Show file tree
Hide file tree
Showing 8 changed files with 137 additions and 1 deletion.
8 changes: 8 additions & 0 deletions jeorg-kotlin-coroutines/coroutines-crums-group-1/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-core-jvm</artifactId>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-test</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package org.jesperancinha.ktd

import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract

class DSLContractsSmartCasting {
fun showContract(id: Long?): Long? {
if (isValidIDE(id)) {
doWithId(id)
}
return id
}

fun doWithId(id: Long): Long {
println("Made contract with id $id")
return id
}

@OptIn(ExperimentalContracts::class)
fun isValidIDE(id: Long?): Boolean {
contract { returns(true) implies (id != null) }
return id != null && id != 0L
}

companion object {
@JvmStatic
fun main(args: Array<String> = emptyArray()) {
println("${DSLContractsSmartCasting().showContract(123)}")
println("${DSLContractsSmartCasting().showContract(null)}")
}
}
}
class ContractsExtension {
fun showContract(id: Long?): Long? {
if (id.isValidID()) {
doWithId(id!!)
}
return id
}

fun doWithId(id: Long): Long {
println("Made contract with id $id")
return id
}

@OptIn(ExperimentalContracts::class)
fun Long?.isValidID(): Boolean {
contract { returns(true) implies (this@isValidID != null) }
return this != null && this != 0L
}

companion object {
@JvmStatic
fun main(args: Array<String> = emptyArray()) {
DSLContractsSmartCasting.main()
println("${DSLContractsSmartCasting().showContract(123)}")
println("${DSLContractsSmartCasting().showContract(null)}")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,8 @@ object Main {
TrainStationManager.main()
NeuralNetworksCancelling.main()
StructuredConcurrency.main()
ValidationUsersEmail.main()
ContractsExtension.main()
org.jesperancinha.ktd.java.ValidationUsersEmail.main(emptyArray())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.jesperancinha.ktd

import jakarta.validation.Validation
import jakarta.validation.constraints.Email


data class User (
@field:Email(message = "Please insert a valid email")
val email:String
)

class ValidationUsersEmail {
companion object {
@JvmStatic
fun main(args: Array<String> = emptyArray()) {
val factory = Validation.buildDefaultValidatorFactory()
val validator = factory.validator
val validate1 = validator.validate(User("bad"))
println(validate1)
val validate2 = validator.validate(User("user@someemail.com"))
println(validate2)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.jesperancinha.ktd.java;

import jakarta.validation.constraints.Email;

public class User {

@Email(message = "Please insert a valid email")
private String email;

public User(String email) {
this.email = email;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.jesperancinha.ktd.java;

import static jakarta.validation.Validation.buildDefaultValidatorFactory;

public class ValidationUsersEmail {
public static void main(String[] args) {
try(var factory = buildDefaultValidatorFactory()) {
var validator = factory.getValidator();
var validate1 = validator.validate(new User("bad"));
System.out.println(validate1);
var validate2 = validator.validate(new User("user@someemail.com"));
System.out.println(validate2);
}
}
}
1 change: 0 additions & 1 deletion jeorg-kotlin-masters/jeorg-kotlin-constructor/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish/jakarta.el -->
<dependency>
Expand Down
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
<slf4j-log4j12.version>2.0.5</slf4j-log4j12.version>
<kotlinx-coroutines-reactor.version>1.7.3</kotlinx-coroutines-reactor.version>
<kotlin-reflect.version>1.9.22</kotlin-reflect.version>
<hibernate-validator.version>8.0.1.Final</hibernate-validator.version>
</properties>

<modules>
Expand Down Expand Up @@ -177,6 +178,11 @@
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j-log4j12.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId>
Expand Down

0 comments on commit 299934b

Please sign in to comment.