diff --git a/.circleci/config.yml b/.circleci/config.yml
index a3411de30..c95ebbe2d 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1,23 +1,10 @@
version: 2
-references:
- accept_licenses : &accept_licenses
- run:
- name: Accept licenses
- command: yes | sdkmanager --licenses || true
- workspace: &workspace
- ~/work
-
- android_config: &android_config
- working_directory: *workspace
- docker:
- - image: cimg/android:2022.09.1
-
jobs:
build:
working_directory: ~/work
docker:
- - image: circleci/openjdk:8-jdk
+ - image: cimg/openjdk:17.0
steps:
- checkout
- restore_cache:
@@ -39,17 +26,6 @@ jobs:
destination: libs
- store_test_results:
path: build/test-results
- check-android-api-level:
- <<: *android_config
- steps:
- - checkout
- - *accept_licenses
- - run:
- name: Android Lint
- command: ./gradlew -Pandroid lintDebug --max-workers=1
- - store_artifacts:
- path: build/reports/lint-results-debug.html
- destination: lint-results.html
package:
working_directory: ~/work
docker:
@@ -76,5 +52,4 @@ workflows:
build_and_package:
jobs:
- build
- - check-android-api-level
- package
diff --git a/build.gradle b/build.gradle
index dc76b9b1a..c91ce3fe7 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,4 +1,7 @@
buildscript {
+ ext{
+ kotlinVersion = "1.8.22"
+ }
repositories {
google()
mavenCentral()
@@ -8,24 +11,22 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.2.1'
- classpath "me.champeau.jmh:jmh-gradle-plugin:0.6.7"
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22"
+ classpath 'com.android.tools.build:gradle:8.1.0'
+ classpath "me.champeau.jmh:jmh-gradle-plugin:0.7.1"
}
}
-/**
- * If `android` is true, the project will be configured as an Android rather than a Java library. This isn't used
- * for building archives (such as an APK), but is useful for performing Android checks like lint.
- */
-if (!project.hasProperty("android")) {
- apply plugin: 'java'
- apply plugin: 'checkstyle'
- apply plugin: 'jacoco'
- apply plugin: 'me.champeau.jmh'
-} else {
- apply plugin: 'com.android.library'
+plugins {
+ id 'java-library'
+ id 'org.jetbrains.kotlin.jvm' version '1.8.22'
+ id 'me.champeau.jmh' version '0.7.1'
+ id 'jacoco'
+ id 'checkstyle'
}
+apply plugin: 'com.android.lint'
+
repositories {
google()
mavenCentral()
@@ -37,19 +38,40 @@ sourceSets {
test.java.srcDirs = ['src/test/java']
test.resources.srcDirs = ['src/test/resources']
}
-compileJava.options.encoding = "UTF-8"
-compileTestJava.options.encoding = "UTF-8"
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+java {
+ toolchain {
+ languageVersion = JavaLanguageVersion.of(8)
+ }
+}
compileJava {
options.compilerArgs << "-Xlint:deprecation"
+ options.encoding = 'UTF-8'
}
compileTestJava {
options.compilerArgs << "-Xlint:deprecation"
+ options.encoding = 'UTF-8'
+}
+
+compileKotlin {
+ kotlinOptions.jvmTarget = '1.8'
+}
+
+compileTestKotlin {
+ kotlinOptions.jvmTarget = '1.8'
}
-targetCompatibility = '1.8'
-sourceCompatibility = '1.8'
+lint {
+ htmlReport = true
+ abortOnError = true
+ warningsAsErrors = false
+ checkDependencies = true
+}
tasks.register('installLocal') {
def lines = []
@@ -77,96 +99,69 @@ tasks.register('installLocal') {
}
}
-if (!project.hasProperty("android")) {
- jar {
- baseName = 'javarosa'
- // Be sure to update version in pom.xml to match
- // snapshot release = x.x.x-SNAPSHOT
- // production release = x.x.x
- version = '4.3.0-SNAPSHOT'
- archiveName = baseName + '-' + version + '.jar'
+jar {
+ archiveBaseName = 'javarosa'
+ // Be sure to update version in pom.xml to match
+ // snapshot release = x.x.x-SNAPSHOT
+ // production release = x.x.x
+ archiveVersion = '4.3.0-SNAPSHOT'
- manifest {
- attributes 'Manifest-Version': "$jar.version"
- }
+ manifest {
+ attributes 'Manifest-Version': archiveVersion
}
+}
- // TODO: does not build UML diagrams
- javadoc {
- failOnError = false
- }
+// TODO: does not build UML diagrams
+javadoc {
+ failOnError = false
+}
- jacocoTestReport {
- reports {
- xml.enabled true
- }
+jacocoTestReport {
+ reports {
+ xml.required = true
}
+}
// Required to use fileExtensions property in checkstyle file
- checkstyle {
- toolVersion = '7.6.1'
- }
+checkstyle {
+ toolVersion = '7.6.1'
+}
- jmhJar.doFirst {
- new File("build/resources/test").mkdirs()
- }
+jmhJar.doFirst {
+ new File("build/resources/test").mkdirs()
+}
- jmh {
- excludes = ["(BenchmarkTemplate)"]
- threads = 1
- fork = 1
- warmup = '2s'
- warmupIterations = 10
- warmupBatchSize = 1
- warmupForks = 1
- iterations = 20
- timeOnIteration = '2s'
- timeUnit = 's'
- benchmarkMode = ['avgt', 'ss']
- includeTests = true
- resultFormat = 'CSV'
- forceGC = true
-
- duplicateClassesStrategy = DuplicatesStrategy.WARN
- }
-} else {
- android {
- namespace 'com.example'
-
- compileSdkVersion 30
- defaultConfig {
- minSdkVersion 21
- targetSdkVersion 30
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
- compileOptions {
- coreLibraryDesugaringEnabled true
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
- buildTypes {
- release {
- minifyEnabled false
- }
- }
- }
+jmh {
+ excludes = ["(BenchmarkTemplate)"]
+ threads = 1
+ fork = 1
+ warmup = '2s'
+ warmupIterations = 10
+ warmupBatchSize = 1
+ warmupForks = 1
+ iterations = 20
+ timeOnIteration = '2s'
+ timeUnit = 's'
+ benchmarkMode = ['avgt', 'ss']
+ includeTests = true
+ resultFormat = 'CSV'
+ forceGC = true
+
+ duplicateClassesStrategy = DuplicatesStrategy.WARN
}
dependencies {
// Be sure to update dependencies in pom.xml to match
+ implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.8.22'
implementation 'joda-time:joda-time:2.10.13'
implementation 'org.slf4j:slf4j-api:1.7.33'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.1'
// Upgrade to version higher than 1.4 when Collect minSDK >= 26
implementation 'org.apache.commons:commons-csv:1.4'
-
// Upgrade to version higher than 2.5 when Collect minSDK >= 26
implementation 'commons-io:commons-io:2.5'
- implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.6.10'
compileOnly 'net.sf.kxml:kxml2:2.3.0'
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 8049c684f..b93c46a5f 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/pom.xml b/pom.xml
index b514fcd46..6ca8e1ea8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,8 @@
UTF-8
+ 1.8
+ 1.8.22
@@ -74,7 +76,7 @@
org.jetbrains.kotlin
kotlin-stdlib
- 1.6.10
+ ${kotlin.version}
org.slf4j
@@ -106,9 +108,33 @@
maven-compiler-plugin
3.8.0
- 1.8
- 1.8
+ ${java.version}
+ ${java.version}
+
+
+ default-compile
+ none
+
+
+ default-testCompile
+ none
+
+
+ java-compile
+ compile
+
+ compile
+
+
+
+ java-test-compile
+ test-compile
+
+ testCompile
+
+
+
org.apache.maven.plugins
@@ -204,7 +230,7 @@
org.jetbrains.kotlin
kotlin-maven-plugin
- 1.6.10
+ ${kotlin.version}
compile
@@ -212,7 +238,28 @@
compile
+
+
+
+ ${project.basedir}/src/main/java
+
+
+
+ test-compile
+ compile
+
+ test-compile
+
+
+
+
+ ${project.basedir}/src/test/java
+
+
+
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 000000000..7c02b9ffa
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,3 @@
+plugins {
+ id 'org.gradle.toolchains.foojay-resolver-convention' version "0.6.0"
+}
\ No newline at end of file
diff --git a/src/main/java/org/javarosa/kotlintest/ThisOrThat.kt b/src/main/java/org/javarosa/kotlintest/ThisOrThat.kt
new file mode 100644
index 000000000..fbcd84bfd
--- /dev/null
+++ b/src/main/java/org/javarosa/kotlintest/ThisOrThat.kt
@@ -0,0 +1,5 @@
+package org.javarosa.kotlintest
+
+enum class ThisOrThat {
+ THIS(), THAT(), OTHER()
+}
\ No newline at end of file
diff --git a/src/test/java/org/javarosa/core/model/utils/test/LocalizerTest.java b/src/test/java/org/javarosa/core/model/utils/test/LocalizerTest.java
index 43ad40185..e74e135a7 100644
--- a/src/test/java/org/javarosa/core/model/utils/test/LocalizerTest.java
+++ b/src/test/java/org/javarosa/core/model/utils/test/LocalizerTest.java
@@ -853,10 +853,11 @@ private void runAsync(Runnable test) {
try {
t.join(50);
} catch (InterruptedException e) {
-
+ System.out.println("t.getState() = " + t.getState());
}
+ //DEBUG on circleci
if(t.isAlive()) {
- throw new RuntimeException("Failed to return from recursive argument processing");
+ throw new RuntimeException("Failed to return from recursive argument processing"+ "\nThreadState: "+t.getState());
}
}
diff --git a/src/test/java/org/javarosa/kotlintest/KotlinGradleSetupTest.kt b/src/test/java/org/javarosa/kotlintest/KotlinGradleSetupTest.kt
new file mode 100644
index 000000000..a8316bea5
--- /dev/null
+++ b/src/test/java/org/javarosa/kotlintest/KotlinGradleSetupTest.kt
@@ -0,0 +1,14 @@
+package org.javarosa.kotlintest
+
+import junit.framework.TestCase
+import org.javarosa.kotlintest.ThisOrThat.THAT
+import org.javarosa.kotlintest.ThisOrThat.THIS
+import org.junit.Test
+
+class KotlinGradleSetupTest {
+ @Test
+ fun `can compile Kotlin in directory`() {
+ TestCase.assertNotSame(THIS, THAT)
+ TestCase.assertSame(THIS, THIS)
+ }
+}