Skip to content

Commit a9b9328

Browse files
authored
Merge pull request #155 from jeffgbutler/master
Better Use of Kotlin Self Type
2 parents b23d9a3 + 1c1f875 commit a9b9328

File tree

7 files changed

+88
-85
lines changed

7 files changed

+88
-85
lines changed

.travis.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,3 @@ addons:
1717
organization: "mybatis"
1818
token:
1919
secure: "Hci6OzYOkzcy6CUWlJTe5zLHRFRUO0KVe5o/V3RvtWndz3/4CHmWkP/dZjMxYliUiOZ+UR9uQhVH6dqcKSR94vb++CiDDxorkzqWiWlMEZMaWflvOe/dQsvKwPGZ/QO32RR+Boh0b3VrWZIOsu84wpYAMyZmncXJ0Y2QvmodiqtChYvV+8F6ZimNCfkGZRJhRfKnAbqFsPlB/c9TQc6hW0Dg9rWtjsbQFVtnkIhu48NdVtylPidHUSQWj0JsVQRvWUmBkoMr7lFSImyCW2r7X5vrVIccH6LTPk1Q5V4A8UgCtHhSnQcAFmFi/cxpUqIRgfjvB3azjp/Z9PrzZUFLgRzo3piKZkuQpI5a9xAANH7xcfiZfqztapLx6glW1c5oHRvk771dLcm5+he6JxKIKBBt8BFGOpkXG5NyvDOGHA4bo36oz6VL2L7oVRrS0KdgfFBmQFCuB0cRH3sQGGE4TjyghJUWLnYDRvQGz1IiX94xPUf/+MOHrMeLs/QIROOKJRTMyNC9u+ZQJeQK+i20b4A7euFP8fwzvQRJm3EgEuQf501raPUUDv+Kh4YskDg86fDHxJrmrpM4UsFe6V/WDPFGZc1zRJJRI5yeiaVg5M0KAt5SYfrV1YcjU5ExvKj7x9vyQ3pcfpLlKIKyFKBJMRryMQLNCn+frEJbxlrxJDE="
20-
21-
script:
22-
- mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package org.jacoco:jacoco-maven-plugin:report
23-
- if [ "$TRAVIS_JDK_VERSION" == "openjdk8" ]; then mvn sonar:sonar -Dsonar.projectKey=mybatis_mybatis-dynamic-sql; fi

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinBaseBuilders.kt

Lines changed: 82 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -24,85 +24,90 @@ import org.mybatis.dynamic.sql.util.Buildable
2424
import org.mybatis.dynamic.sql.where.AbstractWhereDSL
2525

2626
abstract class KotlinBaseBuilder<M, W : AbstractWhereDSL<W>, B : KotlinBaseBuilder<M, W, B>> : Buildable<M> {
27-
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>): B {
28-
getWhere().where(column, condition)
29-
return getThis()
30-
}
31-
32-
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B {
33-
getWhere().where(column, condition, collect)
34-
return getThis()
35-
}
36-
37-
fun applyWhere(whereApplier: WhereApplier): B {
38-
getWhere().applyWhere(whereApplier)
39-
return getThis()
40-
}
41-
42-
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>): B {
43-
getWhere().and(column, condition)
44-
return getThis()
45-
}
46-
47-
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B {
48-
getWhere().and(column, condition, collect)
49-
return getThis()
50-
}
51-
52-
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>): B {
53-
getWhere().or(column, condition)
54-
return getThis()
55-
}
56-
57-
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B {
58-
getWhere().or(column, condition, collect)
59-
return getThis()
60-
}
27+
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>): B =
28+
applySelf {
29+
getWhere().where(column, condition)
30+
}
31+
32+
fun <T> where(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B =
33+
applySelf {
34+
getWhere().where(column, condition, collect)
35+
}
36+
37+
fun applyWhere(whereApplier: WhereApplier): B =
38+
applySelf {
39+
getWhere().applyWhere(whereApplier)
40+
}
41+
42+
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>): B =
43+
applySelf {
44+
getWhere().and(column, condition)
45+
}
46+
47+
fun <T> and(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B =
48+
applySelf {
49+
getWhere().and(column, condition, collect)
50+
}
51+
52+
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>): B =
53+
applySelf {
54+
getWhere().or(column, condition)
55+
}
56+
57+
fun <T> or(column: BindableColumn<T>, condition: VisitableCondition<T>, collect: CriteriaReceiver): B =
58+
applySelf {
59+
getWhere().or(column, condition, collect)
60+
}
61+
62+
protected fun applySelf(block: B.() -> Unit): B =
63+
self().apply { block() }
64+
65+
protected abstract fun self(): B
6166

6267
protected abstract fun getWhere(): W
63-
protected abstract fun getThis(): B
6468
}
6569

66-
abstract class KotlinBaseJoiningBuilder<T : AbstractQueryExpressionDSL<T, SelectModel>, W: AbstractWhereDSL<W>, B : KotlinBaseJoiningBuilder<T, W, B>>(private val dsl: AbstractQueryExpressionDSL<T, SelectModel>) :
67-
KotlinBaseBuilder<SelectModel, W, B>() {
68-
69-
fun join(table: SqlTable, receiver: JoinReceiver) =
70-
apply {
71-
dsl.join(table, receiver)
72-
}
73-
74-
fun join(table: SqlTable, alias: String, receiver: JoinReceiver) =
75-
apply {
76-
dsl.join(table, alias, receiver)
77-
}
78-
79-
fun fullJoin(table: SqlTable, receiver: JoinReceiver) =
80-
apply {
81-
dsl.fullJoin(table, receiver)
82-
}
83-
84-
fun fullJoin(table: SqlTable, alias: String, receiver: JoinReceiver) =
85-
apply {
86-
dsl.fullJoin(table, alias, receiver)
87-
}
88-
89-
fun leftJoin(table: SqlTable, receiver: JoinReceiver) =
90-
apply {
91-
dsl.leftJoin(table, receiver)
92-
}
93-
94-
fun leftJoin(table: SqlTable, alias: String, receiver: JoinReceiver) =
95-
apply {
96-
dsl.leftJoin(table, alias, receiver)
97-
}
98-
99-
fun rightJoin(table: SqlTable, receiver: JoinReceiver) =
100-
apply {
101-
dsl.rightJoin(table, receiver)
102-
}
103-
104-
fun rightJoin(table: SqlTable, alias: String, receiver: JoinReceiver) =
105-
apply {
106-
dsl.rightJoin(table, alias, receiver)
107-
}
70+
abstract class KotlinBaseJoiningBuilder<T : AbstractQueryExpressionDSL<T, SelectModel>, W : AbstractWhereDSL<W>, B : KotlinBaseJoiningBuilder<T, W, B>>(
71+
private val dsl: AbstractQueryExpressionDSL<T, SelectModel>
72+
) : KotlinBaseBuilder<SelectModel, W, B>() {
73+
74+
fun join(table: SqlTable, receiver: JoinReceiver): B =
75+
applySelf {
76+
dsl.join(table, receiver)
77+
}
78+
79+
fun join(table: SqlTable, alias: String, receiver: JoinReceiver): B =
80+
applySelf {
81+
dsl.join(table, alias, receiver)
82+
}
83+
84+
fun fullJoin(table: SqlTable, receiver: JoinReceiver): B =
85+
applySelf {
86+
dsl.fullJoin(table, receiver)
87+
}
88+
89+
fun fullJoin(table: SqlTable, alias: String, receiver: JoinReceiver): B =
90+
applySelf {
91+
dsl.fullJoin(table, alias, receiver)
92+
}
93+
94+
fun leftJoin(table: SqlTable, receiver: JoinReceiver): B =
95+
applySelf {
96+
dsl.leftJoin(table, receiver)
97+
}
98+
99+
fun leftJoin(table: SqlTable, alias: String, receiver: JoinReceiver): B =
100+
applySelf {
101+
dsl.leftJoin(table, alias, receiver)
102+
}
103+
104+
fun rightJoin(table: SqlTable, receiver: JoinReceiver): B =
105+
applySelf {
106+
dsl.rightJoin(table, receiver)
107+
}
108+
109+
fun rightJoin(table: SqlTable, alias: String, receiver: JoinReceiver): B =
110+
applySelf {
111+
dsl.rightJoin(table, alias, receiver)
112+
}
108113
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinCountBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ class KotlinCountBuilder(private val dsl: CountDSL<SelectModel>) :
3030

3131
override fun getWhere(): CountDSL<SelectModel>.CountWhereBuilder = dsl.where()
3232

33-
override fun getThis() = this
33+
override fun self() = this
3434
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinDeleteBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ class KotlinDeleteBuilder(private val dsl: DeleteDSL<DeleteModel>) :
3030

3131
override fun getWhere(): DeleteDSL<DeleteModel>.DeleteWhereBuilder = dsl.where()
3232

33-
override fun getThis(): KotlinDeleteBuilder = this
33+
override fun self() = this
3434
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinQueryBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,5 @@ class KotlinQueryBuilder(private val dsl: QueryExpressionDSL<SelectModel>) :
5454

5555
override fun getWhere(): QueryExpressionDSL<SelectModel>.QueryExpressionWhereBuilder = dsl.where()
5656

57-
override fun getThis() = this
57+
override fun self() = this
5858
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/KotlinUpdateBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@ class KotlinUpdateBuilder(private val dsl: UpdateDSL<UpdateModel>) :
3838

3939
override fun getWhere(): UpdateDSL<UpdateModel>.UpdateWhereBuilder = dsl.where()
4040

41-
override fun getThis(): KotlinUpdateBuilder = this
41+
override fun self() = this
4242
}

travis/after_success.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ if [ $TRAVIS_JDK_VERSION == "openjdk8" ] && [ $TRAVIS_REPO_SLUG == "mybatis/myba
3838
echo -e "Successfully ran coveralls under Travis job ${TRAVIS_JOB_NUMBER}"
3939

4040
if [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_BRANCH" == "master" ] && [[ "$commit_message" != *"[maven-release-plugin]"* ]]; then
41+
# Run Sonar Analysis
42+
./mvnw sonar:sonar -Dsonar.projectKey=mybatis_mybatis-dynamic-sql
4143
# Deploy to Sonatype
4244
./mvnw clean deploy -q --settings ./travis/settings.xml
4345
echo -e "Successfully deployed SNAPSHOT artifacts to Sonatype under Travis job ${TRAVIS_JOB_NUMBER}"

0 commit comments

Comments
 (0)