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) + } +}