mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-11-25 13:32:07 +01:00
Merge pull request #632 from Flowdalic/smack-gradle-bump
Bump to Gradle 8.10.2, require Java 11
This commit is contained in:
commit
f59d7f3257
136 changed files with 1161 additions and 1220 deletions
32
.github/workflows/ci.yml
vendored
32
.github/workflows/ci.yml
vendored
|
@ -6,13 +6,13 @@ jobs:
|
|||
build:
|
||||
name: Build Smack
|
||||
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
strategy:
|
||||
matrix:
|
||||
java:
|
||||
- 11
|
||||
- 17
|
||||
env:
|
||||
PRIMARY_JAVA_VERSION: 11
|
||||
PRIMARY_JAVA_VERSION: 17
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
@ -57,6 +57,17 @@ jobs:
|
|||
run: |
|
||||
sdkmanager "platforms;android-21"
|
||||
|
||||
# Workaround
|
||||
- name: Create gradle.properties
|
||||
run: |
|
||||
cat <<-EOF > gradle.properties
|
||||
# Workaround for https://github.com/CycloneDX/cyclonedx-gradle-plugin/issues/349
|
||||
# suggested at https://docs.gradle.org/current/userguide/upgrading_version_8.html#xml_parsing_now_requires_recent_parsers
|
||||
systemProp.javax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
|
||||
systemProp.javax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
|
||||
systemProp.javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
|
||||
EOF
|
||||
|
||||
# Testing
|
||||
- name: Gradle Check
|
||||
run: ./gradlew check --stacktrace
|
||||
|
@ -72,10 +83,19 @@ jobs:
|
|||
|
||||
# Test Coverage Report
|
||||
- name: Jacoco Test Coverage
|
||||
if: ${{ matrix.java == env.PRIMARY_JAVA_VERSION }}
|
||||
run: ./gradlew jacocoRootReport coveralls
|
||||
env:
|
||||
COVERALLS_REPO_TOKEN: S2ecSJja2cKJa9yv45C8ZFPohXuRrTXKd
|
||||
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
|
||||
if: |
|
||||
${{ matrix.java == env.PRIMARY_JAVA_VERSION }} &&
|
||||
${{ env.COVERALLS_REPO_TOKEN != '' }}
|
||||
run: |
|
||||
if [[ -z ${COVERALLS_REPO_TOKEN} ]]; then
|
||||
echo WARNING: COVERALLS_REPO_TOKEN is empty
|
||||
else
|
||||
echo COVERALLS_REPO_TOKEN is not empty
|
||||
fi
|
||||
./gradlew smack-java8-full:testCodeCoverageReport
|
||||
./gradlew smack-java8-full:coveralls
|
||||
|
||||
# Upload build artifacts
|
||||
- name: Upload build artifacts
|
||||
|
|
30
Makefile
Normal file
30
Makefile
Normal file
|
@ -0,0 +1,30 @@
|
|||
GRADLE ?= ./gradlew
|
||||
|
||||
.PHONY: all
|
||||
all: check jacocoRootReport javadocAll sinttest
|
||||
|
||||
.PHONY: codecov
|
||||
codecov:
|
||||
$(GRADLE) smack-java8-full:testCodeCoverageReport
|
||||
echo "Report available at smack-java8-full/build/reports/jacoco/testCodeCoverageReport/html/index.html"
|
||||
|
||||
.PHONY: check
|
||||
check:
|
||||
$(GRADLE) $@
|
||||
|
||||
.PHONY: eclipse
|
||||
eclipse:
|
||||
$(GRADLE) $@
|
||||
|
||||
.PHONY: sinttest
|
||||
sinttest:
|
||||
$(GRADLE) $@
|
||||
|
||||
.PHONY: jacocoRootReport
|
||||
jacocoRootReport:
|
||||
$(GRADLE) $@
|
||||
|
||||
.PHONY: javadocAll
|
||||
javadocAll:
|
||||
$(GRADLE) $@
|
||||
echo "Smack javadoc available at build/javadoc/index.html"
|
16
build-logic/build.gradle
Normal file
16
build-logic/build.gradle
Normal file
|
@ -0,0 +1,16 @@
|
|||
plugins {
|
||||
id 'groovy-gradle-plugin'
|
||||
}
|
||||
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "biz.aQute.bnd:biz.aQute.bnd.gradle:7.0.0"
|
||||
implementation "io.freefair.gradle:maven-plugin:8.10" // for io.freefair.agregate-javadoc
|
||||
implementation "me.champeau.jmh:jmh-gradle-plugin:0.7.2"
|
||||
implementation "net.ltgt.gradle:gradle-errorprone-plugin:4.0.1"
|
||||
implementation "gradle.plugin.org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.12.2"
|
||||
implementation "ru.vyarus:gradle-animalsniffer-plugin:1.7.1"
|
||||
}
|
1
build-logic/settings.gradle
Normal file
1
build-logic/settings.gradle
Normal file
|
@ -0,0 +1 @@
|
|||
rootProject.name = 'smack-build-logic'
|
|
@ -0,0 +1,6 @@
|
|||
compileJava {
|
||||
options.bootstrapClasspath = files(androidBootClasspath)
|
||||
}
|
||||
javadoc {
|
||||
classpath += files(androidBootClasspath)
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
plugins {
|
||||
id 'ru.vyarus.animalsniffer'
|
||||
id 'org.igniterealtime.smack.global-conventions'
|
||||
}
|
||||
dependencies {
|
||||
signature "net.sf.androidscents.signature:android-api-level-${smackMinAndroidSdk}:5.0.1_r2@signature"
|
||||
}
|
||||
animalsniffer {
|
||||
sourceSets = [sourceSets.main]
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
plugins {
|
||||
id 'application'
|
||||
}
|
||||
|
||||
application {
|
||||
applicationDefaultJvmArgs = ["-enableassertions"]
|
||||
}
|
||||
|
||||
run {
|
||||
// Pass all system properties down to the "application" run
|
||||
systemProperties System.getProperties()
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
ext {
|
||||
javaVersion = JavaVersion.VERSION_11
|
||||
javaMajor = javaVersion.getMajorVersion()
|
||||
smackMinAndroidSdk = 21
|
||||
|
||||
androidBootClasspath = { getAndroidRuntimeJar() }
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
def getAndroidRuntimeJar() {
|
||||
def androidApiLevel = ext.smackMinAndroidSdk
|
||||
def androidHome = getAndroidHome()
|
||||
def androidJar = new File("$androidHome/platforms/android-${androidApiLevel}/android.jar")
|
||||
if (androidJar.isFile()) {
|
||||
return androidJar
|
||||
} else {
|
||||
throw new Exception("Can't find android.jar for API level ${androidApiLevel}. Please install corresponding SDK platform package")
|
||||
}
|
||||
}
|
||||
def getAndroidJavadocOffline() {
|
||||
def androidHome = getAndroidHome()
|
||||
return androidHome.toString() + "/docs/reference"
|
||||
}
|
||||
|
||||
def getAndroidHome() {
|
||||
def androidHomeEnv = System.getenv("ANDROID_HOME")
|
||||
if (androidHomeEnv == null) {
|
||||
throw new Exception("ANDROID_HOME environment variable is not set")
|
||||
}
|
||||
def androidHome = new File(androidHomeEnv)
|
||||
if (!androidHome.isDirectory()) throw new Exception("Environment variable ANDROID_HOME is not pointing to a directory")
|
||||
return androidHome
|
||||
}
|
|
@ -0,0 +1,373 @@
|
|||
plugins {
|
||||
id 'biz.aQute.bnd.builder'
|
||||
id 'checkstyle'
|
||||
id 'com.github.kt3k.coveralls'
|
||||
id 'eclipse'
|
||||
id 'idea'
|
||||
id 'jacoco'
|
||||
id 'java'
|
||||
id 'java-library'
|
||||
id 'java-test-fixtures'
|
||||
id 'maven-publish'
|
||||
id 'net.ltgt.errorprone'
|
||||
id 'signing'
|
||||
|
||||
id 'jacoco-report-aggregation'
|
||||
id 'test-report-aggregation'
|
||||
|
||||
id 'org.igniterealtime.smack.global-conventions'
|
||||
id 'org.igniterealtime.smack.javadoc-conventions'
|
||||
}
|
||||
|
||||
version readVersionFile()
|
||||
|
||||
ext {
|
||||
isSnapshot = version.endsWith('-SNAPSHOT')
|
||||
gitCommit = getGitCommit()
|
||||
rootConfigDir = new File(rootDir, 'config')
|
||||
sonatypeCredentialsAvailable = project.hasProperty('sonatypeUsername') && project.hasProperty('sonatypePassword')
|
||||
isReleaseVersion = !isSnapshot
|
||||
isContinuousIntegrationEnvironment = Boolean.parseBoolean(System.getenv('CI'))
|
||||
signingRequired = !(isSnapshot || isContinuousIntegrationEnvironment)
|
||||
sonatypeSnapshotUrl = 'https://oss.sonatype.org/content/repositories/snapshots'
|
||||
sonatypeStagingUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2'
|
||||
builtDate = (new java.text.SimpleDateFormat("yyyy-MM-dd")).format(new Date())
|
||||
oneLineDesc = 'An Open Source XMPP (Jabber) client library'
|
||||
|
||||
jxmppVersion = '[1.1.0-beta1, 1.1.999]'
|
||||
miniDnsVersion = '[1.1.0-alpha3, 1.1.999]'
|
||||
junitVersion = '5.9.2'
|
||||
commonsIoVersion = '2.6'
|
||||
bouncyCastleVersion = '1.73'
|
||||
guavaVersion = '30.1-jre'
|
||||
mockitoVersion = '5.13.0'
|
||||
orgReflectionsVersion = '0.9.11'
|
||||
|
||||
if (project.hasProperty("useSonatype")) {
|
||||
useSonatype = project.getProperty("useSonatype").toBoolean()
|
||||
} else {
|
||||
// Default to true
|
||||
useSonatype = true
|
||||
}
|
||||
|
||||
gplLicensedProjects = [
|
||||
':smack-examples',
|
||||
':smack-omemo-signal',
|
||||
':smack-omemo-signal-integration-test',
|
||||
':smack-repl'
|
||||
].collect{ project(it) }
|
||||
}
|
||||
|
||||
group = 'org.igniterealtime.smack'
|
||||
|
||||
java {
|
||||
sourceCompatibility = javaVersion
|
||||
targetCompatibility = sourceCompatibility
|
||||
}
|
||||
|
||||
eclipse {
|
||||
classpath {
|
||||
downloadJavadoc = true
|
||||
}
|
||||
}
|
||||
|
||||
// Make all project's 'test' target depend on javadoc, so that
|
||||
// javadoc is also linted.
|
||||
test.dependsOn javadoc
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
// Some systems may not have set their platform default
|
||||
// converter to 'utf8', but we use unicode in our source
|
||||
// files. Therefore ensure that javac uses unicode
|
||||
options.encoding = "utf8"
|
||||
options.compilerArgs = [
|
||||
'-Xlint:all',
|
||||
// Set '-options' because a non-java7 javac will emit a
|
||||
// warning if source/target is set to 1.7 and
|
||||
// bootclasspath is *not* set.
|
||||
'-Xlint:-options',
|
||||
// TODO: Enable xlint serial
|
||||
'-Xlint:-serial',
|
||||
'-Werror',
|
||||
]
|
||||
}
|
||||
if (JavaVersion.current().isJava8Compatible()) {
|
||||
tasks.withType(Javadoc) {
|
||||
// The '-quiet' as second argument is actually a hack,
|
||||
// since the one parameter addStringOption doesn't seem to
|
||||
// work, we extra add '-quiet', which is added anyway by
|
||||
// gradle.
|
||||
// We disable 'missing' as we do most of javadoc checking via checkstyle.
|
||||
options.addStringOption('Xdoclint:all,-missing', '-quiet')
|
||||
// Abort on javadoc warnings.
|
||||
// See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
|
||||
// for information about the -Xwerror option.
|
||||
options.addStringOption('Xwerror', '-quiet')
|
||||
}
|
||||
}
|
||||
|
||||
if (JavaVersion.current().isJava9Compatible()) {
|
||||
tasks.withType(JavaCompile) {
|
||||
options.compilerArgs.addAll([
|
||||
'--release', javaMajor,
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
jacoco {
|
||||
toolVersion = "0.8.12"
|
||||
}
|
||||
|
||||
jacocoTestReport {
|
||||
dependsOn test
|
||||
reports {
|
||||
xml.required = true
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"
|
||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
|
||||
|
||||
testFixturesApi "org.junit.jupiter:junit-jupiter-api:$junitVersion"
|
||||
testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion"
|
||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
|
||||
// https://stackoverflow.com/a/77274251/194894
|
||||
testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.11.0"
|
||||
|
||||
// The smack-extensions subproject uses mockito in its fest
|
||||
// fixtures, and we want to have mockito also available in
|
||||
// test, so we use API here.
|
||||
testFixturesApi "org.mockito:mockito-core:${mockitoVersion}"
|
||||
|
||||
testImplementation 'com.jamesmurty.utils:java-xmlbuilder:1.2'
|
||||
|
||||
errorprone 'com.google.errorprone:error_prone_core:2.9.0'
|
||||
errorproneJavac('com.google.errorprone:javac:9+181-r4173-1')
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
|
||||
maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
|
||||
|
||||
// Enable full stacktraces of failed tests. Especially handy
|
||||
// for CI environments.
|
||||
testLogging {
|
||||
events "failed"
|
||||
exceptionFormat "full"
|
||||
}
|
||||
}
|
||||
|
||||
jar {
|
||||
manifest {
|
||||
attributes(
|
||||
'Implementation-Version': version,
|
||||
'Implementation-GitRevision': gitCommit,
|
||||
'Built-JDK': System.getProperty('java.version'),
|
||||
'Built-Gradle': gradle.gradleVersion,
|
||||
'Built-By': System.getProperty('user.name')
|
||||
)
|
||||
}
|
||||
|
||||
bundle {
|
||||
bnd(
|
||||
'-removeheaders': 'Tool, Bnd-*',
|
||||
'-exportcontents': '*',
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
checkstyle {
|
||||
toolVersion = '8.27'
|
||||
|
||||
if (project in gplLicensedProjects) {
|
||||
configProperties.checkstyleLicenseHeader = "${project.name}-gplv3-license-header"
|
||||
} else {
|
||||
configProperties.checkstyleLicenseHeader = "header"
|
||||
}
|
||||
}
|
||||
task sourcesJar(type: Jar, dependsOn: classes) {
|
||||
archiveClassifier = 'sources'
|
||||
from sourceSets.main.allSource
|
||||
}
|
||||
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||
archiveClassifier = 'javadoc'
|
||||
from javadoc.destinationDir
|
||||
}
|
||||
task testsJar(type: Jar) {
|
||||
archiveClassifier = 'tests'
|
||||
from sourceSets.test.output
|
||||
}
|
||||
configurations {
|
||||
testRuntime
|
||||
}
|
||||
artifacts {
|
||||
// Add a 'testRuntime' configuration including the tests so that
|
||||
// it can be consumed by other projects (smack-omemo-signal for
|
||||
// example). See http://stackoverflow.com/a/21946676/194894
|
||||
testRuntime testsJar
|
||||
}
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
mavenJava(MavenPublication) {
|
||||
from components.java
|
||||
artifact sourcesJar
|
||||
artifact javadocJar
|
||||
artifact testsJar
|
||||
pom {
|
||||
name = 'Smack'
|
||||
packaging = 'jar'
|
||||
inceptionYear = '2003'
|
||||
url = 'http://www.igniterealtime.org/projects/jxmpp/'
|
||||
afterEvaluate {
|
||||
description = project.description
|
||||
}
|
||||
|
||||
issueManagement {
|
||||
system = 'JIRA'
|
||||
url = 'http://issues.igniterealtime.org/browse/SMACK'
|
||||
}
|
||||
|
||||
scm {
|
||||
url = 'https://github.com/igniterealtime/Smack'
|
||||
connection = 'scm:git:https://github.com/igniterealtime/Smack.git'
|
||||
developerConnection = 'scm:git:https://github.com/igniterealtime/Smack.git'
|
||||
}
|
||||
|
||||
licenses {
|
||||
if (project in gplLicensedProjects) {
|
||||
license {
|
||||
name = 'GNU General Public License, version 3 or any later version'
|
||||
url = 'https://www.gnu.org/licenses/gpl.txt'
|
||||
distribution = 'repo'
|
||||
}
|
||||
} else {
|
||||
license {
|
||||
name = 'The Apache Software License, Version 2.0'
|
||||
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
|
||||
distribution = 'repo'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
developers {
|
||||
developer {
|
||||
id = 'flow'
|
||||
name = 'Florian Schmaus'
|
||||
email = 'flow@igniterealtime.org'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
repositories {
|
||||
if (sonatypeCredentialsAvailable && useSonatype) {
|
||||
maven {
|
||||
url isSnapshot ? sonatypeSnapshotUrl : sonatypeStagingUrl
|
||||
credentials {
|
||||
username = sonatypeUsername
|
||||
password = sonatypePassword
|
||||
}
|
||||
}
|
||||
}
|
||||
// Use
|
||||
// gradle publish -P customRepoUrl=https://www.igniterealtime.org/archiva/repository/maven -P customRepoUsername=bamboo -P customRepoPassword=hidden -P useSonatype=false
|
||||
// to deploy to this repo.
|
||||
if (project.hasProperty("customRepoUrl")) {
|
||||
maven {
|
||||
name 'customRepo'
|
||||
url customRepoUrl
|
||||
if (project.hasProperty("customRepoUsername")) {
|
||||
credentials {
|
||||
username customRepoUsername
|
||||
password customRepoPassword
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Workaround for gpg signatory not supporting the 'required' option
|
||||
// See https://github.com/gradle/gradle/issues/5064#issuecomment-381924984
|
||||
// Note what we use 'signing.gnupg.keyName' instead of 'signing.keyId'.
|
||||
tasks.withType(Sign) {
|
||||
onlyIf {
|
||||
project.hasProperty('signing.gnupg.keyName')
|
||||
}
|
||||
}
|
||||
signing {
|
||||
required { signingRequired }
|
||||
useGpgCmd()
|
||||
sign publishing.publications.mavenJava
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
options.errorprone {
|
||||
disableWarningsInGeneratedCode = true
|
||||
excludedPaths = ".*/jmh_generated/.*"
|
||||
error(
|
||||
"UnusedVariable",
|
||||
"UnusedMethod",
|
||||
"MethodCanBeStatic",
|
||||
)
|
||||
errorproneArgs = [
|
||||
// Disable MissingCasesInEnumSwitch error prone check
|
||||
// because this check is already done by javac as incomplete-switch.
|
||||
'-Xep:MissingCasesInEnumSwitch:OFF',
|
||||
'-Xep:StringSplitter:OFF',
|
||||
'-Xep:JavaTimeDefaultTimeZone:OFF',
|
||||
'-Xep:InlineMeSuggester:OFF',
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
// Work around https://github.com/gradle/gradle/issues/4046
|
||||
task copyJavadocDocFiles(type: Copy) {
|
||||
from('src/javadoc')
|
||||
into 'build/docs/javadoc'
|
||||
include '**/doc-files/*.*'
|
||||
}
|
||||
javadoc.dependsOn copyJavadocDocFiles
|
||||
|
||||
coveralls {
|
||||
jacocoReportPath 'build/reports/jacoco/testCodeCoverageReport/testCodeCoverageReport.xml'
|
||||
}
|
||||
|
||||
def getGitCommit() {
|
||||
def projectDirFile = new File("$projectDir")
|
||||
|
||||
def cmd = 'git describe --always --tags --dirty=+'
|
||||
def proc = cmd.execute(null, projectDirFile)
|
||||
|
||||
def exitStatus = proc.waitFor()
|
||||
if (exitStatus != 0) return "non-git build"
|
||||
|
||||
def gitCommit = proc.text.trim()
|
||||
assert !gitCommit.isEmpty()
|
||||
gitCommit
|
||||
}
|
||||
|
||||
def getAndroidRuntimeJar() {
|
||||
def androidHome = new File("$System.env.ANDROID_HOME")
|
||||
if (!androidHome.isDirectory()) throw new Exception("ANDROID_HOME not found or set")
|
||||
def androidJar = new File("$androidHome/platforms/android-$smackMinAndroidSdk/android.jar")
|
||||
if (androidJar.isFile()) {
|
||||
return androidJar
|
||||
} else {
|
||||
throw new Exception("Can't find android.jar for $smackMinAndroidSdk API. Please install corresponding SDK platform package")
|
||||
}
|
||||
}
|
||||
|
||||
def readVersionFile() {
|
||||
def versionFile = new File(rootDir, 'version')
|
||||
if (!versionFile.isFile()) {
|
||||
throw new Exception("Could not find version file")
|
||||
}
|
||||
if (versionFile.text.isEmpty()) {
|
||||
throw new Exception("Version file does not contain a version")
|
||||
}
|
||||
versionFile.text.trim()
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
plugins {
|
||||
// Javadoc linking requires repositories to bet configured. And
|
||||
// those are declared in global-conventions, hence we add it here.
|
||||
id 'org.igniterealtime.smack.global-conventions'
|
||||
}
|
||||
|
||||
if (JavaVersion.current().isJava8Compatible()) {
|
||||
tasks.withType(Javadoc) {
|
||||
// The '-quiet' as second argument is actually a hack,
|
||||
// since the one parameter addStringOption doesn't seem to
|
||||
// work, we extra add '-quiet', which is added anyway by
|
||||
// gradle.
|
||||
// We disable 'missing' as we do most of javadoc checking via checkstyle.
|
||||
options.addStringOption('Xdoclint:all,-missing', '-quiet')
|
||||
// Abort on javadoc warnings.
|
||||
// See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
|
||||
// for information about the -Xwerror option.
|
||||
options.addStringOption('Xwerror', '-quiet')
|
||||
}
|
||||
}
|
||||
|
||||
if (JavaVersion.current().isJava9Compatible()) {
|
||||
tasks.withType(Javadoc) {
|
||||
options.addStringOption('-release', javaMajor)
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(Javadoc) {
|
||||
options.charSet = "UTF-8"
|
||||
}
|
690
build.gradle
690
build.gradle
|
@ -1,346 +1,20 @@
|
|||
buildscript {
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'ru.vyarus.animalsniffer' version '1.5.0'
|
||||
id 'net.ltgt.errorprone' version '1.3.0'
|
||||
// Use e.g. "gradle <task> taskTree" to show its dependency tree.
|
||||
id 'com.dorongold.task-tree' version '1.5'
|
||||
id 'com.github.kt3k.coveralls' version '2.10.2'
|
||||
id 'biz.aQute.bnd.builder' version '6.4.0'
|
||||
// The scalastyle plugin of smack-repl wants the root project to
|
||||
// have a ideaProject task, so let's add one.
|
||||
id 'idea'
|
||||
|
||||
id 'org.igniterealtime.smack.javadoc-conventions'
|
||||
}
|
||||
|
||||
ext {
|
||||
java11Projects = [
|
||||
':smack-examples',
|
||||
javadocAllDir = new File(buildDir, 'javadoc')
|
||||
integrationTestProjects = [
|
||||
':smack-integration-test',
|
||||
':smack-omemo-signal-integration-test',
|
||||
':smack-repl',
|
||||
':smack-websocket-java11',
|
||||
].collect { project(it) }
|
||||
java11Projects += getRootProject()
|
||||
java8Projects = allprojects - java11Projects
|
||||
].collect{ project(it) }
|
||||
javadocAllProjects = subprojects - integrationTestProjects
|
||||
}
|
||||
|
||||
configure (java8Projects) {
|
||||
ext {
|
||||
javaCompatilibity = JavaVersion.VERSION_1_8
|
||||
}
|
||||
}
|
||||
|
||||
configure (java11Projects) {
|
||||
ext {
|
||||
javaCompatilibity = JavaVersion.VERSION_11
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
apply plugin: 'java-library'
|
||||
apply plugin: 'java-test-fixtures'
|
||||
apply plugin: 'eclipse'
|
||||
apply plugin: 'idea'
|
||||
apply plugin: 'jacoco'
|
||||
apply plugin: 'net.ltgt.errorprone'
|
||||
|
||||
version readVersionFile()
|
||||
|
||||
ext {
|
||||
isSnapshot = version.endsWith('-SNAPSHOT')
|
||||
gitCommit = getGitCommit()
|
||||
javadocAllDir = new File(buildDir, 'javadoc')
|
||||
documentationDir = new File(projectDir, 'documentation')
|
||||
releasedocsDir = new File(buildDir, 'releasedocs')
|
||||
rootConfigDir = new File(rootDir, 'config')
|
||||
sonatypeCredentialsAvailable = project.hasProperty('sonatypeUsername') && project.hasProperty('sonatypePassword')
|
||||
isReleaseVersion = !isSnapshot
|
||||
isContinuousIntegrationEnvironment = Boolean.parseBoolean(System.getenv('CI'))
|
||||
signingRequired = !(isSnapshot || isContinuousIntegrationEnvironment)
|
||||
sonatypeSnapshotUrl = 'https://oss.sonatype.org/content/repositories/snapshots'
|
||||
sonatypeStagingUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2'
|
||||
// Returns only the date in yyyy-MM-dd format, as otherwise, with
|
||||
// hh:mm:ss information, the manifest files would change with every
|
||||
// build, causing unnecessary rebuilds.
|
||||
builtDate = (new java.text.SimpleDateFormat("yyyy-MM-dd")).format(new Date())
|
||||
oneLineDesc = 'An Open Source XMPP (Jabber) client library'
|
||||
integrationTestProjects = [
|
||||
':smack-integration-test',
|
||||
':smack-omemo-signal-integration-test',
|
||||
].collect{ project(it) }
|
||||
javadocAllProjects = subprojects - integrationTestProjects
|
||||
// A dirty hack used for Gradle's jacoco plugin, since is not
|
||||
// hable to handle the case when a (sub)project has no unit
|
||||
// tests. :-(
|
||||
projectsWithoutUnitTests = [
|
||||
':smack-android',
|
||||
':smack-android-extensions',
|
||||
':smack-bosh',
|
||||
':smack-debug',
|
||||
':smack-debug-slf4j',
|
||||
':smack-java8',
|
||||
':smack-jingle-old',
|
||||
':smack-resolver-dnsjava',
|
||||
':smack-resolver-javax',
|
||||
':smack-resolver-minidns',
|
||||
':smack-omemo-signal-integration-test',
|
||||
].collect{ project(it) }
|
||||
projectsWithUnitTests = subprojects - projectsWithoutUnitTests
|
||||
androidProjects = [
|
||||
':smack-tcp',
|
||||
':smack-bosh',
|
||||
':smack-core',
|
||||
':smack-im',
|
||||
':smack-resolver-minidns',
|
||||
':smack-sasl-provided',
|
||||
':smack-extensions',
|
||||
':smack-experimental',
|
||||
':smack-omemo',
|
||||
':smack-omemo-signal',
|
||||
':smack-openpgp',
|
||||
':smack-xmlparser',
|
||||
':smack-xmlparser-xpp3',
|
||||
].collect{ project(it) }
|
||||
androidBootClasspathProjects = [
|
||||
':smack-android',
|
||||
':smack-android-extensions',
|
||||
].collect{ project(it) }
|
||||
androidOptionalProjects = [
|
||||
':smack-tcp',
|
||||
':smack-extensions',
|
||||
':smack-experimental',
|
||||
':smack-bosh',
|
||||
':smack-omemo',
|
||||
':smack-omemo-signal',
|
||||
].collect{ project(it) }
|
||||
gplLicensedProjects = [
|
||||
':smack-examples',
|
||||
':smack-omemo-signal',
|
||||
':smack-omemo-signal-integration-test',
|
||||
':smack-repl'
|
||||
].collect{ project(it) }
|
||||
// Lazily evaluate the Android bootClasspath and offline
|
||||
// Javadoc using a closure, so that targets which do not
|
||||
// require it are still able to succeed without an Android
|
||||
// SDK.
|
||||
androidBootClasspath = { getAndroidRuntimeJar() }
|
||||
androidJavadocOffline = { getAndroidJavadocOffline() }
|
||||
junit4Projects = [
|
||||
':smack-core',
|
||||
':smack-im',
|
||||
':smack-omemo',
|
||||
':smack-omemo-signal',
|
||||
':smack-openpgp',
|
||||
].collect { project(it) }
|
||||
|
||||
// When using dynamic versions for those, do *not* use [1.0,
|
||||
// 2.0), since this will also pull in 2.0-alpha1. Instead use
|
||||
// [1.0, 1.0.99].
|
||||
// See also:
|
||||
// - https://issues.apache.org/jira/browse/MNG-6232
|
||||
// - https://issues.igniterealtime.org/browse/SMACK-858
|
||||
jxmppVersion = '[1.1.0-beta1, 1.1.999]'
|
||||
miniDnsVersion = '[1.1.0-alpha3, 1.1.999]'
|
||||
smackMinAndroidSdk = 21
|
||||
junitVersion = '5.7.1'
|
||||
commonsIoVersion = '2.6'
|
||||
bouncyCastleVersion = '1.73'
|
||||
guavaVersion = '30.1-jre'
|
||||
mockitoVersion = '3.7.7'
|
||||
orgReflectionsVersion = '0.9.11'
|
||||
|
||||
if (project.hasProperty("useSonatype")) {
|
||||
useSonatype = project.getProperty("useSonatype").toBoolean()
|
||||
} else {
|
||||
// Default to true
|
||||
useSonatype = true
|
||||
}
|
||||
javaMajor = javaCompatilibity.getMajorVersion()
|
||||
}
|
||||
group = 'org.igniterealtime.smack'
|
||||
sourceCompatibility = javaCompatilibity
|
||||
targetCompatibility = sourceCompatibility
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
|
||||
maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
|
||||
|
||||
// Enable full stacktraces of failed tests. Especially handy
|
||||
// for environments like Travis.
|
||||
testLogging {
|
||||
events "failed"
|
||||
exceptionFormat "full"
|
||||
}
|
||||
}
|
||||
|
||||
ext.sharedManifest = manifest {
|
||||
attributes('Implementation-Version': version,
|
||||
'Implementation-GitRevision': ext.gitCommit,
|
||||
'Built-Date': ext.builtDate,
|
||||
'Built-JDK': System.getProperty('java.version'),
|
||||
'Built-Gradle': gradle.gradleVersion,
|
||||
'Built-By': System.getProperty('user.name')
|
||||
)
|
||||
}
|
||||
|
||||
eclipse {
|
||||
classpath {
|
||||
downloadJavadoc = true
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
// Some systems may not have set their platform default
|
||||
// converter to 'utf8', but we use unicode in our source
|
||||
// files. Therefore ensure that javac uses unicode
|
||||
options.encoding = 'UTF-8'
|
||||
options.compilerArgs = [
|
||||
'-Xlint:all',
|
||||
// Set '-options' because a non-java7 javac will emit a
|
||||
// warning if source/target is set to 1.7 and
|
||||
// bootclasspath is *not* set.
|
||||
// TODO implement a sound heuristic to determine a java7
|
||||
// rt.jar on the build host. And if none is found,
|
||||
// fallback to using a environment variable,
|
||||
// e.g. JAVA7_HOME. See SMACK-651.
|
||||
'-Xlint:-options',
|
||||
'-Werror',
|
||||
]
|
||||
options.errorprone {
|
||||
error(
|
||||
"UnusedVariable",
|
||||
"UnusedMethod",
|
||||
"MethodCanBeStatic",
|
||||
)
|
||||
errorproneArgs = [
|
||||
// Disable errorprone checks
|
||||
'-Xep:TypeParameterUnusedInFormals:OFF',
|
||||
// Disable errorpone StringSplitter check, as it
|
||||
// recommends using Splitter from Guava, which we don't
|
||||
// have (nor want to use in Smack).
|
||||
'-Xep:StringSplitter:OFF',
|
||||
'-Xep:JdkObsolete:OFF',
|
||||
// Disabled because sinttest re-uses BeforeClass from junit.
|
||||
// TODO: change sinttest so that it has it's own
|
||||
// BeforeClass and re-enable this check.
|
||||
'-Xep:JUnit4ClassAnnotationNonStatic:OFF',
|
||||
// Disabled but should be re-enabled at some point
|
||||
//'-Xep:InconsistentCapitalization:OFF',
|
||||
'-Xep:MixedMutabilityReturnType:OFF',
|
||||
// TODO: Re-enable once Smack's minimum Android SDK level is 26 or higher.
|
||||
'-Xep:JavaUtilDate:OFF',
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(ScalaCompile) {
|
||||
scalaCompileOptions.additionalParameters = [
|
||||
'-Xfatal-warnings',
|
||||
'-feature',
|
||||
]
|
||||
}
|
||||
|
||||
jacoco {
|
||||
toolVersion = "0.8.6"
|
||||
}
|
||||
|
||||
jacocoTestReport {
|
||||
dependsOn test
|
||||
getSourceDirectories().setFrom(project.files(sourceSets.main.allSource.srcDirs))
|
||||
getClassDirectories().setFrom(project.files(sourceSets.main.output))
|
||||
reports {
|
||||
xml.enabled true
|
||||
}
|
||||
}
|
||||
|
||||
if (JavaVersion.current().isJava8Compatible()) {
|
||||
tasks.withType(Javadoc) {
|
||||
// The '-quiet' as second argument is actually a hack,
|
||||
// since the one parameter addStringOption doesn't seem to
|
||||
// work, we extra add '-quiet', which is added anyway by
|
||||
// gradle.
|
||||
// TODO: This enables all doclint check but
|
||||
// 'missing'. Re-enable 'missing' once every public API in
|
||||
// Smack has a javadoc comment.
|
||||
options.addStringOption('Xdoclint:accessibility,html,reference,syntax', '-quiet')
|
||||
|
||||
// Treat warnings as errors.
|
||||
// See also https://bugs.openjdk.java.net/browse/JDK-8200363
|
||||
options.addStringOption('Xwerror', '-quiet')
|
||||
}
|
||||
}
|
||||
|
||||
if (JavaVersion.current().isJava9Compatible()) {
|
||||
tasks.withType(Javadoc) {
|
||||
options.addStringOption('-release', javaMajor)
|
||||
|
||||
// The -no-modules-directories javadoc option was removed in Java 13
|
||||
// See https://bugs.openjdk.java.net/browse/JDK-8215582
|
||||
if (JavaVersion.current() < JavaVersion.VERSION_13) {
|
||||
// Fix for javadoc search. If not set, the search result would direct to
|
||||
// javadoc/undefined/org/jivesoftware/smack/altconnections/HttpLookupMethod.html
|
||||
// instead of
|
||||
// javadoc/org/jivesoftware/smack/altconnections/HttpLookupMethod.html
|
||||
// https://stackoverflow.com/a/53732633/194894
|
||||
options.addBooleanOption("-no-module-directories", true)
|
||||
}
|
||||
}
|
||||
tasks.withType(JavaCompile) {
|
||||
options.compilerArgs.addAll([
|
||||
'--release', javaMajor,
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(Javadoc) {
|
||||
options.charSet = "UTF-8"
|
||||
options.encoding = 'UTF-8'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
testFixturesApi "org.junit.jupiter:junit-jupiter-api:$junitVersion"
|
||||
testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion"
|
||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
|
||||
// https://stackoverflow.com/a/77274251/194894
|
||||
testRuntimeOnly "org.junit.platform:junit-platform-launcher"
|
||||
|
||||
// The smack-extensions subproject uses mockito in its fest
|
||||
// fixtures, and we want to have mockito also available in
|
||||
// test, so we use API here.
|
||||
testFixturesApi "org.mockito:mockito-core:${mockitoVersion}"
|
||||
|
||||
// To mock final classes
|
||||
testImplementation "org.mockito:mockito-inline:${mockitoVersion}"
|
||||
testImplementation 'com.jamesmurty.utils:java-xmlbuilder:1.2'
|
||||
|
||||
errorprone 'com.google.errorprone:error_prone_core:2.5.1'
|
||||
errorproneJavac('com.google.errorprone:javac:9+181-r4173-1')
|
||||
}
|
||||
|
||||
// Make all project's 'test' target depend on javadoc, so that
|
||||
// javadoc is also linted.
|
||||
test { dependsOn javadoc }
|
||||
}
|
||||
|
||||
configure (junit4Projects) {
|
||||
dependencies {
|
||||
testImplementation "org.junit.vintage:junit-vintage-engine:$junitVersion"
|
||||
}
|
||||
}
|
||||
|
||||
// We need to evaluate the child projects first because
|
||||
// - javadocAll needs the smack-core child to have already resolved
|
||||
// the jXMPP/MiniDNS dependencies, so that we can the resolved
|
||||
// version to link to those project's javadoc.
|
||||
// - We use the child's project description as description for the
|
||||
// Maven POM.
|
||||
evaluationDependsOnChildren()
|
||||
task javadocAll(type: Javadoc) {
|
||||
source javadocAllProjects.collect {project ->
|
||||
|
@ -389,286 +63,6 @@ task javadocAll(type: Javadoc) {
|
|||
}
|
||||
}
|
||||
|
||||
import org.apache.tools.ant.filters.ReplaceTokens
|
||||
task prepareReleasedocs(type: Copy) {
|
||||
from 'resources/releasedocs'
|
||||
into releasedocsDir
|
||||
filter(ReplaceTokens, tokens: [version: version, releasedate: builtDate, targetCompatibility: targetCompatibility.toString()])
|
||||
}
|
||||
|
||||
task distributionZip(type: Zip, dependsOn: [javadocAll, prepareReleasedocs]) {
|
||||
classifier builtDate
|
||||
into ('javadoc') {
|
||||
from(javadocAllDir)
|
||||
}
|
||||
into ('releasedocs') {
|
||||
from(releasedocsDir)
|
||||
}
|
||||
into ('releasedocs/documentation') {
|
||||
from(documentationDir)
|
||||
}
|
||||
}
|
||||
|
||||
task maybeCheckForSnapshotDependencies {
|
||||
// Don't check for Snapshot dependencies if this is a snapshot.
|
||||
onlyIf { isReleaseVersion }
|
||||
// Run in the execution phase, not in configuration phase, as the
|
||||
// 'each' forces the runtime configuration to be resolved, which
|
||||
// causes "Cannot change dependencies of configuration after it
|
||||
// has been included in dependency resolution." errors.
|
||||
// See https://discuss.gradle.org/t/23153
|
||||
doLast {
|
||||
allprojects { project ->
|
||||
project.configurations.runtime.each {
|
||||
if (it.toString().contains("-SNAPSHOT"))
|
||||
throw new Exception("Release build contains snapshot dependencies: " + it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test { dependsOn maybeCheckForSnapshotDependencies }
|
||||
|
||||
jar {
|
||||
// Root project should not create empty jar artifact
|
||||
enabled = false
|
||||
}
|
||||
|
||||
// Disable upload archives for the root project
|
||||
uploadArchives.enabled = false
|
||||
|
||||
description = """\
|
||||
Smack ${version}
|
||||
${oneLineDesc}."""
|
||||
|
||||
subprojects {
|
||||
apply plugin: 'maven-publish'
|
||||
apply plugin: 'signing'
|
||||
apply plugin: 'checkstyle'
|
||||
apply plugin: 'biz.aQute.bnd.builder'
|
||||
|
||||
checkstyle {
|
||||
toolVersion = '8.27'
|
||||
}
|
||||
task sourcesJar(type: Jar, dependsOn: classes) {
|
||||
classifier = 'sources'
|
||||
from sourceSets.main.allSource
|
||||
}
|
||||
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||
classifier = 'javadoc'
|
||||
from javadoc.destinationDir
|
||||
}
|
||||
task testsJar(type: Jar, dependsOn: testClasses) {
|
||||
classifier = 'tests'
|
||||
from sourceSets.test.output
|
||||
}
|
||||
|
||||
artifacts {
|
||||
// See http://stackoverflow.com/a/21946676/194894
|
||||
testRuntime testsJar
|
||||
}
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
mavenJava(MavenPublication) {
|
||||
from components.java
|
||||
artifact sourcesJar
|
||||
artifact javadocJar
|
||||
artifact testsJar
|
||||
pom {
|
||||
name = 'Smack'
|
||||
packaging = 'jar'
|
||||
inceptionYear = '2003'
|
||||
url = 'http://www.igniterealtime.org/projects/smack/'
|
||||
description = project.description
|
||||
|
||||
issueManagement {
|
||||
system = 'JIRA'
|
||||
url = 'https://igniterealtime.org/issues/browse/SMACK'
|
||||
}
|
||||
|
||||
scm {
|
||||
url = 'https://github.com/igniterealtime/Smack'
|
||||
connection = 'scm:git:https://github.com/igniterealtime/Smack.git'
|
||||
developerConnection = 'scm:git:https://github.com/igniterealtime/Smack.git'
|
||||
}
|
||||
|
||||
developers {
|
||||
developer {
|
||||
id = 'flow'
|
||||
name = 'Florian Schmaus'
|
||||
email = 'flow@igniterealtime.org'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
repositories {
|
||||
if (sonatypeCredentialsAvailable && useSonatype) {
|
||||
maven {
|
||||
url isSnapshot ? sonatypeSnapshotUrl : sonatypeStagingUrl
|
||||
credentials {
|
||||
username = sonatypeUsername
|
||||
password = sonatypePassword
|
||||
}
|
||||
}
|
||||
}
|
||||
// Use
|
||||
// gradle publish -P customRepoUrl=https://www.igniterealtime.org/archiva/repository/maven -P customRepoUsername=bamboo -P customRepoPassword=hidden -P useSonatype=false
|
||||
// to deploy to this repo.
|
||||
if (project.hasProperty("customRepoUrl")) {
|
||||
maven {
|
||||
name 'customRepo'
|
||||
url customRepoUrl
|
||||
if (project.hasProperty("customRepoUsername")) {
|
||||
credentials {
|
||||
username customRepoUsername
|
||||
password customRepoPassword
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
rootProject.distributionZip {
|
||||
dependsOn build
|
||||
from(buildDir) {
|
||||
include "$libsDirName/*${version}.jar"
|
||||
include "$libsDirName/*${version}-javadoc.jar"
|
||||
include "$libsDirName/*${version}-sources.jar"
|
||||
}
|
||||
}
|
||||
|
||||
// Workaround for gpg signatory not supporting the 'required' option
|
||||
// See https://github.com/gradle/gradle/issues/5064#issuecomment-381924984
|
||||
// Note what we use 'signing.gnupg.keyName' instead of 'signing.keyId'.
|
||||
tasks.withType(Sign) {
|
||||
onlyIf {
|
||||
project.hasProperty('signing.gnupg.keyName')
|
||||
}
|
||||
}
|
||||
signing {
|
||||
useGpgCmd()
|
||||
required { signingRequired }
|
||||
sign publishing.publications.mavenJava
|
||||
}
|
||||
|
||||
// Work around https://github.com/gradle/gradle/issues/4046
|
||||
task copyJavadocDocFiles(type: Copy) {
|
||||
from('src/javadoc')
|
||||
into 'build/docs/javadoc'
|
||||
include '**/doc-files/*.*'
|
||||
}
|
||||
javadoc.dependsOn copyJavadocDocFiles
|
||||
|
||||
// Make sure root projects 'javadocAll' depends on the
|
||||
// subproject's javadoc, to ensure that all all doc-files/ are
|
||||
// generated and up-to-date. Obviously this means that the
|
||||
// javadocAll task will also create the individual javadoc's of the
|
||||
// subprojects.
|
||||
javadocAll.dependsOn javadoc
|
||||
}
|
||||
|
||||
// The smack-java8-full project generates the dot and png files of the
|
||||
// current state graph. Ensure they are generated before copied.
|
||||
configure (project(':smack-java8-full')) {
|
||||
copyJavadocDocFiles.dependsOn convertModularXmppClientToServerConnectionStateGraphDotToPng
|
||||
}
|
||||
|
||||
configure (androidProjects + androidBootClasspathProjects) {
|
||||
apply plugin: 'ru.vyarus.animalsniffer'
|
||||
dependencies {
|
||||
signature "net.sf.androidscents.signature:android-api-level-${smackMinAndroidSdk}:5.0.1_r2@signature"
|
||||
}
|
||||
animalsniffer {
|
||||
sourceSets = [sourceSets.main]
|
||||
}
|
||||
}
|
||||
|
||||
subprojects*.jar {
|
||||
manifest {
|
||||
from sharedManifest
|
||||
}
|
||||
bundle {
|
||||
bnd(
|
||||
'-removeheaders': 'Tool, Bnd-*',
|
||||
'-exportcontents': '*',
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
configure(subprojects - gplLicensedProjects) {
|
||||
checkstyle {
|
||||
configProperties.checkstyleLicenseHeader = "header"
|
||||
}
|
||||
publishing {
|
||||
publications {
|
||||
mavenJava(MavenPublication) {
|
||||
pom {
|
||||
licenses {
|
||||
license {
|
||||
name = 'The Apache Software License, Version 2.0'
|
||||
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
|
||||
distribution = 'repo'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
configure(gplLicensedProjects) {
|
||||
checkstyle {
|
||||
configProperties.checkstyleLicenseHeader = "${project.name}-gplv3-license-header"
|
||||
}
|
||||
publishing {
|
||||
publications {
|
||||
mavenJava(MavenPublication) {
|
||||
pom {
|
||||
licenses {
|
||||
license {
|
||||
name = 'GNU General Public License, version 3 or any later version'
|
||||
url = 'https://www.gnu.org/licenses/gpl.txt'
|
||||
distribution = 'repo'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
configure(androidBootClasspathProjects) {
|
||||
compileJava {
|
||||
options.bootstrapClasspath = files(androidBootClasspath)
|
||||
}
|
||||
javadoc {
|
||||
classpath += files(androidBootClasspath)
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: "com.github.kt3k.coveralls"
|
||||
coveralls {
|
||||
sourceDirs = files(subprojects.sourceSets.main.allSource.srcDirs).files.absolutePath
|
||||
}
|
||||
|
||||
task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) {
|
||||
dependsOn = projectsWithUnitTests.jacocoTestReport
|
||||
getSourceDirectories().setFrom(files(projectsWithUnitTests.sourceSets.main.allSource.srcDirs))
|
||||
getClassDirectories().setFrom(files(projectsWithUnitTests.sourceSets.main.output))
|
||||
getExecutionData().setFrom(files(projectsWithUnitTests.jacocoTestReport.executionData))
|
||||
reports {
|
||||
xml.enabled true
|
||||
xml.destination file("${buildDir}/reports/jacoco/test/jacocoTestReport.xml")
|
||||
}
|
||||
// We could remove the following setOnlyIf line, but then
|
||||
// jacocoRootReport would silently be SKIPPED if something with
|
||||
// the projectsWithUnitTests is wrong (e.g. a project is missing
|
||||
// in there).
|
||||
setOnlyIf { true }
|
||||
}
|
||||
|
||||
task integrationTest {
|
||||
description 'Verify correct functionality of Smack by running some integration tests.'
|
||||
dependsOn project(':smack-integration-test').tasks.run
|
||||
|
@ -676,7 +70,7 @@ task integrationTest {
|
|||
|
||||
task omemoSignalIntTest {
|
||||
description 'Run integration tests of the smack-omemo module in combination with smack-omemo-signal.'
|
||||
dependsOn project(':smack-omemo-signal-integration-test').tasks.run
|
||||
dependsOn 'smack-omemo-signal-integration-test:run'
|
||||
}
|
||||
|
||||
task sinttestAll {
|
||||
|
@ -687,70 +81,6 @@ task sinttestAll {
|
|||
]}
|
||||
}
|
||||
|
||||
def getGitCommit() {
|
||||
def projectDirFile = new File("$projectDir")
|
||||
def dotGit = new File(projectDirFile, ".git")
|
||||
if (!dotGit.isDirectory()) return 'non-git build'
|
||||
|
||||
def cmd = 'git describe --always --tags --dirty=+'
|
||||
def proc = cmd.execute(null, projectDirFile)
|
||||
proc.waitForOrKill(10 * 1000)
|
||||
|
||||
def gitCommit = proc.text.trim()
|
||||
assert !gitCommit.isEmpty()
|
||||
|
||||
def srCmd = 'git symbolic-ref --short HEAD'
|
||||
def srProc = srCmd.execute(null, projectDirFile)
|
||||
srProc.waitForOrKill(10 * 1000)
|
||||
if (srProc.exitValue() == 0) {
|
||||
// Only add the information if the git command was
|
||||
// successful. There may be no symbolic reference for HEAD if
|
||||
// e.g. in detached mode.
|
||||
def symbolicReference = srProc.text.trim()
|
||||
assert !symbolicReference.isEmpty()
|
||||
gitCommit += "-$symbolicReference"
|
||||
}
|
||||
|
||||
gitCommit
|
||||
}
|
||||
|
||||
def getAndroidRuntimeJar() {
|
||||
def androidApiLevel = ext.smackMinAndroidSdk
|
||||
def androidHome = getAndroidHome()
|
||||
def androidJar = new File("$androidHome/platforms/android-${androidApiLevel}/android.jar")
|
||||
if (androidJar.isFile()) {
|
||||
return androidJar
|
||||
} else {
|
||||
throw new Exception("Can't find android.jar for API level ${androidApiLevel}. Please install corresponding SDK platform package")
|
||||
}
|
||||
}
|
||||
|
||||
def getAndroidJavadocOffline() {
|
||||
def androidHome = getAndroidHome()
|
||||
return androidHome.toString() + "/docs/reference"
|
||||
}
|
||||
|
||||
def getAndroidHome() {
|
||||
def androidHomeEnv = System.getenv("ANDROID_HOME")
|
||||
if (androidHomeEnv == null) {
|
||||
throw new Exception("ANDROID_HOME environment variable is not set")
|
||||
}
|
||||
def androidHome = new File(androidHomeEnv)
|
||||
if (!androidHome.isDirectory()) throw new Exception("Environment variable ANDROID_HOME is not pointing to a directory")
|
||||
return androidHome
|
||||
}
|
||||
|
||||
def readVersionFile() {
|
||||
def versionFile = new File(rootDir, 'version')
|
||||
if (!versionFile.isFile()) {
|
||||
throw new Exception("Could not find version file")
|
||||
}
|
||||
if (versionFile.text.isEmpty()) {
|
||||
throw new Exception("Version file does not contain a version")
|
||||
}
|
||||
versionFile.text.trim()
|
||||
}
|
||||
|
||||
def getResolvedVersion(queriedProject = 'smack-core', component) {
|
||||
def configuration = project(queriedProject)
|
||||
.configurations
|
||||
|
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,5 +1,7 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
|
297
gradlew
vendored
297
gradlew
vendored
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env sh
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
@ -15,69 +15,104 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
|
||||
' "$PWD" ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
@ -87,9 +122,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
|||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
@ -98,88 +133,120 @@ Please set the JAVA_HOME variable in your environment to match the
|
|||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
JAVACMD=java
|
||||
if ! command -v java >/dev/null 2>&1
|
||||
then
|
||||
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=`save "$@"`
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
if ! command -v xargs >/dev/null 2>&1
|
||||
then
|
||||
die "xargs is not available"
|
||||
fi
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
|
|
37
gradlew.bat
vendored
37
gradlew.bat
vendored
|
@ -13,8 +13,10 @@
|
|||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
@rem SPDX-License-Identifier: Apache-2.0
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
|
@ -25,7 +27,8 @@
|
|||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
|
@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
|
|||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto execute
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
|
@ -56,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
|
@ -75,13 +78,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
|||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
set EXIT_CODE=%ERRORLEVEL%
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||
exit /b %EXIT_CODE%
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
|
11
repl
11
repl
|
@ -1,7 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
set -u
|
||||
set -o pipefail
|
||||
set -euo pipefail
|
||||
|
||||
JDWP=false
|
||||
JDWP_PORT=8000
|
||||
|
@ -37,12 +35,13 @@ echo "Compiling and computing classpath (May take a while)"
|
|||
# /smack/smack-repl/build/classes/main:/smack/smack-repl/build/
|
||||
# resources/main:/smack/smack-tcp/build/libs/smack-tcp-4.2.0-alpha4-SNAPSHOT.jar
|
||||
# So perform a "tail -n1" on the output of gradle
|
||||
GRADLE_CLASSPATH="$(gradle :smack-repl:printClasspath --quiet |\
|
||||
GRADLE_CLASSPATH="$(${GRADLE_BIN:-./gradlew} :smack-repl:printClasspath --quiet |\
|
||||
tail -n1)"
|
||||
echo "Finished, starting REPL"
|
||||
|
||||
java "${EXTRA_JAVA_ARGS[@]}" \
|
||||
exec java \
|
||||
"${EXTRA_JAVA_ARGS[@]}" \
|
||||
-Dscala.usejavacp=true \
|
||||
-classpath "${GRADLE_CLASSPATH}" \
|
||||
ammonite.Main \
|
||||
--predef "smack-repl/scala.repl"
|
||||
--predef smack-repl/scala.repl
|
||||
|
|
|
@ -1,221 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>Smack Readme</title>
|
||||
<style type="text/css">
|
||||
/* global font and body settings */
|
||||
body {
|
||||
font-size : 100%;
|
||||
background-color : #d3d6d9;
|
||||
padding: 0;
|
||||
margin: 0 0 30px 0;
|
||||
}
|
||||
body, td, th {
|
||||
font-family : arial, helvetica, sans-serif;
|
||||
font-size : 10pt;
|
||||
}
|
||||
pre, tt, code {
|
||||
font-family : courier new, monospace;
|
||||
font-size : 9pt;
|
||||
}
|
||||
#pageContainer {
|
||||
display: block;
|
||||
position: relative;
|
||||
clear: both;
|
||||
background-color: #fff;
|
||||
border: 1px solid #999;
|
||||
padding: 40px;
|
||||
margin: 30px;
|
||||
-moz-border-radius: 6px;
|
||||
}
|
||||
#pageHeader {
|
||||
display: block;
|
||||
position: relative;
|
||||
height: 80px;
|
||||
background-color: #e7eaee;
|
||||
border: 1px solid #cccccc;
|
||||
border-bottom: none;
|
||||
-moz-border-radius: 5px 5px 0 0;
|
||||
margin: 10px 0 0 0;
|
||||
}
|
||||
#pageBody {
|
||||
margin: 0 18px 0 20px;
|
||||
}
|
||||
/* anchors */
|
||||
a:link {
|
||||
color: #11568c;
|
||||
}
|
||||
a:visited {
|
||||
color: #571c8d;
|
||||
}
|
||||
a:hover {
|
||||
color: #7a1d42;
|
||||
text-decoration : underline;
|
||||
}
|
||||
a:active {
|
||||
color: #7a1d42;
|
||||
}
|
||||
/* page header elements (logo and navigation) */
|
||||
.navigation {
|
||||
display: block;
|
||||
position: relative;
|
||||
height: 20px;
|
||||
background-color: #335588;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
color: #ffffff;
|
||||
font-size: 11px;
|
||||
line-height: 18px;
|
||||
padding: 0 0 0 0;
|
||||
margin: 0 0 25px 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.navigation a {
|
||||
margin: 0 20px 0 20px;
|
||||
}
|
||||
.navigation a:link { color: #ffffff; }
|
||||
.navigation a:visited { color: #ffffff; }
|
||||
.navigation a:hover { color: #ffffff; }
|
||||
.navigation a:active { color: #ffffff; }
|
||||
/* headings */
|
||||
h1 {
|
||||
display: block;
|
||||
position: relative;
|
||||
font-size : 1.7em;
|
||||
font-weight : bold;
|
||||
color: #670e15;
|
||||
padding: 0;
|
||||
margin: 30px 0 0 20px;
|
||||
}
|
||||
h2 {
|
||||
font-size : 1.3em;
|
||||
font-weight : bold;
|
||||
margin: 40px 0 6px 0;
|
||||
padding: 0;
|
||||
color: #335588;
|
||||
}
|
||||
h3 {
|
||||
font-size : 1.0em;
|
||||
font-weight : bold;
|
||||
margin: 25px 0 3px 0;
|
||||
padding: 0;
|
||||
color: #334466;
|
||||
}
|
||||
|
||||
/* general elements */
|
||||
p {
|
||||
margin: 0 0 15px 0;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 5px 0 15px 15px;
|
||||
}
|
||||
li {
|
||||
padding-bottom : 4px;
|
||||
}
|
||||
tt {
|
||||
font-family : courier new, monospace;
|
||||
font-weight : bold;
|
||||
color : #060;
|
||||
}
|
||||
hr {
|
||||
display: block;
|
||||
height: 1px;
|
||||
background-color: #999999;
|
||||
border: none;
|
||||
margin: 40px 0 20px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="pageContainer">
|
||||
|
||||
<div id="pageHeader">
|
||||
<h1>Smack Readme</h1>
|
||||
</div>
|
||||
<div class="navigation">
|
||||
<a href="README.html">Readme</a>|<a href="changelog.html"><strong>Changelog</strong></a>
|
||||
</div>
|
||||
|
||||
<div id="pageBody">
|
||||
|
||||
<p>
|
||||
<table border=0>
|
||||
<tr>
|
||||
<td align="right">version:</td>
|
||||
<td><b>@version@</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">released:</td>
|
||||
<td><b>@releasedate@</b></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
Thank you for downloading Smack! This version of Smack is compatible
|
||||
with JVMs @targetCompatibility@ or higher. Using a build system which
|
||||
is able to consume Maven artifacts, like gradle or Maven, is highly
|
||||
recommended when using Smack.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>This is not the real README.</b> Please visit
|
||||
<center>
|
||||
<a href="https://www.igniterealtime.org/projects/smack/readme">https://www.igniterealtime.org/projects/smack/readme</a>
|
||||
</center>
|
||||
for the README of the current stable Smack version.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Smack tries to depend on as few as possible libraries. The only
|
||||
requirement is <a href="http://jxmpp.org">jXMPP</a>. For DNS
|
||||
resolution we recommend to
|
||||
use <a href="http://minidns.org">MiniDNS</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Start off by viewing the <a href="documentation/index.html">documentation</a>
|
||||
that can be found in the "documentation" directory included with this distribution.
|
||||
</p>
|
||||
Further information can be found on the <a href="http://www.igniterealtime.org/projects/smack">
|
||||
Smack website</a>. If you need help using or would like to make contributions or
|
||||
fixes to the code, please visit the
|
||||
<a href="https://community.igniterealtime.org">online forum</a>.
|
||||
</p>
|
||||
|
||||
<p><b>Changelog and Upgrading</b><p>
|
||||
|
||||
View the <a href="changelog.html">changelog</a> for a list of changes since the
|
||||
last release.
|
||||
|
||||
<p><b>License Agreements</b><p>
|
||||
<ul>
|
||||
<li>Use of the Smack source code is governed by the Apache License Version 2.0:
|
||||
<pre>
|
||||
Copyright 2002-2008 Jive Software.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
</pre></li>
|
||||
|
||||
<li>Smack contains icons and images licensed from INCORS GmbH. You are not licensed
|
||||
to use these icons outside of Smack.</li>
|
||||
|
||||
<li>Third-party source code is licensed as noted in their source files.
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,3 +1,7 @@
|
|||
pluginManagement {
|
||||
includeBuild('build-logic')
|
||||
}
|
||||
|
||||
// The name of the root project.
|
||||
// If we would not set the name, then gradle would use the directory
|
||||
// name of the root directory
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
id 'org.igniterealtime.smack.android-boot-classpath-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Extra Smack extensions for Android."""
|
||||
|
||||
|
@ -8,5 +14,5 @@ dependencies {
|
|||
api project(':smack-extensions')
|
||||
|
||||
// Add the Android jar to the Eclipse .classpath.
|
||||
compileClasspath files(androidBootClasspath)
|
||||
implementation files(androidBootClasspath)
|
||||
}
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
id 'org.igniterealtime.smack.android-boot-classpath-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack for Android.
|
||||
All the required dependencies to run Smack on Android.
|
||||
|
@ -16,13 +22,13 @@ dependencies {
|
|||
// used in non-Android projects.
|
||||
implementation "org.minidns:minidns-android21:$miniDnsVersion"
|
||||
|
||||
// androidProjects lists all projects that are checked to compile against android.jar
|
||||
// Filter out the optional Smack dependencies from androidProjects
|
||||
(androidProjects - androidOptionalProjects)
|
||||
.each { project ->
|
||||
api project
|
||||
}
|
||||
api project(':smack-core')
|
||||
api project(':smack-im')
|
||||
api project(':smack-resolver-minidns')
|
||||
api project(':smack-sasl-provided')
|
||||
api project(':smack-xmlparser')
|
||||
api project(':smack-xmlparser-xpp3')
|
||||
|
||||
// Add the Android jar to the Eclipse .classpath.
|
||||
compileClasspath files(androidBootClasspath)
|
||||
implementation files(androidBootClasspath)
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack BOSH API.
|
||||
This API is considered beta quality."""
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// Note that this is also declared in the main build.gradle for
|
||||
// subprojects, but since evaluationDependsOnChildren is enabled we
|
||||
// need to declare it here too to have bundle{bnd{...}} available
|
||||
apply plugin: 'biz.aQute.bnd.builder'
|
||||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack core components."""
|
||||
|
@ -16,6 +16,9 @@ dependencies {
|
|||
api "org.jxmpp:jxmpp-jid:$jxmppVersion"
|
||||
api "org.minidns:minidns-core:$miniDnsVersion"
|
||||
|
||||
// TODO: Migrate Junit4 tests to Junit5.
|
||||
testImplementation "org.junit.vintage:junit-vintage-engine:$junitVersion"
|
||||
|
||||
testFixturesImplementation project(':smack-xmlparser-stax')
|
||||
testFixturesImplementation project(':smack-xmlparser-xpp3')
|
||||
|
||||
|
@ -59,7 +62,7 @@ task createVersionResource(type: CreateFileTask) {
|
|||
outputFile = new File(projectDir, 'src/main/resources/org.jivesoftware.smack/version')
|
||||
}
|
||||
|
||||
compileJava.dependsOn(createVersionResource)
|
||||
processResources.dependsOn(createVersionResource)
|
||||
|
||||
jar {
|
||||
bundle {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2009 Jive Software, 2018-2022 Florian Schmaus.
|
||||
* Copyright 2009 Jive Software, 2018-2024 Florian Schmaus.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -19,6 +19,7 @@ package org.jivesoftware.smack;
|
|||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
@ -1067,6 +1068,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
|||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("TypeParameterUnusedInFormals")
|
||||
public <I extends IQ> I sendIqRequestAndWaitForResponse(IQ request)
|
||||
throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException {
|
||||
StanzaCollector collector = createStanzaCollectorAndSend(request);
|
||||
|
@ -1214,7 +1216,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
|||
}
|
||||
Stanza packet = (Stanza) sendTopLevelStreamElement;
|
||||
|
||||
final List<StanzaListener> listenersToNotify = new LinkedList<>();
|
||||
final List<StanzaListener> listenersToNotify = new ArrayList<>();
|
||||
synchronized (sendListeners) {
|
||||
for (ListenerWrapper listenerWrapper : sendListeners.values()) {
|
||||
if (listenerWrapper.filterMatches(packet)) {
|
||||
|
@ -1284,7 +1286,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
|||
|
||||
private static <MPB extends MessageOrPresenceBuilder<MP, MPB>, MP extends MessageOrPresence<MPB>> MP fireMessageOrPresenceInterceptors(
|
||||
MP messageOrPresence, Map<Consumer<MPB>, GenericInterceptorWrapper<MPB, MP>> interceptors) {
|
||||
List<Consumer<MPB>> interceptorsToInvoke = new LinkedList<>();
|
||||
List<Consumer<MPB>> interceptorsToInvoke = new ArrayList<>();
|
||||
synchronized (interceptors) {
|
||||
for (GenericInterceptorWrapper<MPB, MP> interceptorWrapper : interceptors.values()) {
|
||||
if (interceptorWrapper.filterMatches(messageOrPresence)) {
|
||||
|
@ -1319,7 +1321,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
|||
* @return the, potentially modified stanza, after the interceptors are run.
|
||||
*/
|
||||
private Stanza firePacketInterceptors(Stanza packet) {
|
||||
List<StanzaListener> interceptorsToInvoke = new LinkedList<>();
|
||||
List<StanzaListener> interceptorsToInvoke = new ArrayList<>();
|
||||
synchronized (interceptors) {
|
||||
for (InterceptorWrapper interceptorWrapper : interceptors.values()) {
|
||||
if (interceptorWrapper.filterMatches(packet)) {
|
||||
|
@ -1604,7 +1606,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
|||
// First handle the async recv listeners. Note that this code is very similar to what follows a few lines below,
|
||||
// the only difference is that asyncRecvListeners is used here and that the packet listeners are started in
|
||||
// their own thread.
|
||||
final Collection<StanzaListener> listenersToNotify = new LinkedList<>();
|
||||
final Collection<StanzaListener> listenersToNotify = new ArrayList<>();
|
||||
extractMatchingListeners(packet, asyncRecvListeners, listenersToNotify);
|
||||
for (final StanzaListener listener : listenersToNotify) {
|
||||
asyncGoLimited(new Runnable() {
|
||||
|
@ -1930,7 +1932,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
|||
// Default implementation does nothing
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
|
||||
@Override
|
||||
public <F extends XmlElement> F getFeature(QName qname) {
|
||||
return (F) streamFeatures.get(qname);
|
||||
|
@ -2175,6 +2177,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
|||
* {@link #maxAsyncRunnables}. Note that we use a {@code LinkedList} in order to avoid space blowups in case the
|
||||
* list ever becomes very big and shrinks again.
|
||||
*/
|
||||
@SuppressWarnings("JdkObsolete")
|
||||
private final Queue<Runnable> deferredAsyncRunnables = new LinkedList<>();
|
||||
|
||||
private int deferredAsyncRunnablesCount;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2018 Florian Schmaus
|
||||
* Copyright 2018-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -50,11 +50,13 @@ public class ScheduledAction implements Delayed {
|
|||
return smackReactor.cancel(this);
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public boolean isDue() {
|
||||
Date now = new Date();
|
||||
return now.after(releaseTime);
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public long getTimeToDueMillis() {
|
||||
long now = System.currentTimeMillis();
|
||||
return releaseTime.getTime() - now;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2018-2023 Florian Schmaus
|
||||
* Copyright 2018-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -144,6 +144,7 @@ public class SmackReactor {
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
ScheduledAction schedule(Runnable runnable, long delay, TimeUnit unit, ScheduledAction.Kind scheduledActionKind) {
|
||||
long releaseTimeEpoch = System.currentTimeMillis() + unit.toMillis(delay);
|
||||
Date releaseTimeDate = new Date(releaseTimeEpoch);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2003-2007 Jive Software, 2016-2019 Florian Schmaus.
|
||||
* Copyright 2003-2007 Jive Software, 2016-2024 Florian Schmaus.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -117,7 +117,7 @@ public final class StanzaCollector implements AutoCloseable {
|
|||
* @return the next stanza result, or <code>null</code> if there are no more
|
||||
* results.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
|
||||
public synchronized <P extends Stanza> P pollResult() {
|
||||
return (P) resultQueue.poll();
|
||||
}
|
||||
|
@ -134,6 +134,7 @@ public final class StanzaCollector implements AutoCloseable {
|
|||
* @return the next available packet.
|
||||
* @throws XMPPErrorException in case an error response.
|
||||
*/
|
||||
@SuppressWarnings("TypeParameterUnusedInFormals")
|
||||
public <P extends Stanza> P pollResultOrThrow() throws XMPPErrorException {
|
||||
P result = pollResult();
|
||||
if (result != null) {
|
||||
|
@ -150,7 +151,7 @@ public final class StanzaCollector implements AutoCloseable {
|
|||
* @return the next available packet.
|
||||
* @throws InterruptedException if the calling thread was interrupted.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
|
||||
// TODO: Consider removing this method as it is hardly ever useful.
|
||||
public synchronized <P extends Stanza> P nextResultBlockForever() throws InterruptedException {
|
||||
throwIfCancelled();
|
||||
|
@ -175,6 +176,7 @@ public final class StanzaCollector implements AutoCloseable {
|
|||
* @return the next available packet.
|
||||
* @throws InterruptedException if the calling thread was interrupted.
|
||||
*/
|
||||
@SuppressWarnings("TypeParameterUnusedInFormals")
|
||||
public <P extends Stanza> P nextResult() throws InterruptedException {
|
||||
return nextResult(connection.getReplyTimeout());
|
||||
}
|
||||
|
@ -191,7 +193,7 @@ public final class StanzaCollector implements AutoCloseable {
|
|||
* @return the next available stanza or <code>null</code> on timeout or connection error.
|
||||
* @throws InterruptedException if the calling thread was interrupted.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
|
||||
public <P extends Stanza> P nextResult(long timeout) throws InterruptedException {
|
||||
throwIfCancelled();
|
||||
P res = null;
|
||||
|
@ -223,6 +225,7 @@ public final class StanzaCollector implements AutoCloseable {
|
|||
* @throws NotConnectedException if the XMPP connection is not connected.
|
||||
* @see #nextResultOrThrow(long)
|
||||
*/
|
||||
@SuppressWarnings("TypeParameterUnusedInFormals")
|
||||
public <P extends Stanza> P nextResultOrThrow() throws NoResponseException, XMPPErrorException,
|
||||
InterruptedException, NotConnectedException {
|
||||
return nextResultOrThrow(connection.getReplyTimeout());
|
||||
|
@ -263,6 +266,7 @@ public final class StanzaCollector implements AutoCloseable {
|
|||
* @throws InterruptedException if the calling thread was interrupted.
|
||||
* @throws NotConnectedException if there was no response and the connection got disconnected.
|
||||
*/
|
||||
@SuppressWarnings("TypeParameterUnusedInFormals")
|
||||
public <P extends Stanza> P nextResultOrThrow(long timeout) throws NoResponseException,
|
||||
XMPPErrorException, InterruptedException, NotConnectedException {
|
||||
P result;
|
||||
|
|
|
@ -318,6 +318,7 @@ public interface XMPPConnection {
|
|||
* @throws InterruptedException if the calling thread was interrupted.
|
||||
* @since 4.3
|
||||
*/
|
||||
@SuppressWarnings("TypeParameterUnusedInFormals")
|
||||
<I extends IQ> I sendIqRequestAndWaitForResponse(IQ request)
|
||||
throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException;
|
||||
|
||||
|
@ -590,6 +591,7 @@ public interface XMPPConnection {
|
|||
* @return a stanza extensions of the feature or <code>null</code>
|
||||
* @since 4.4
|
||||
*/
|
||||
@SuppressWarnings("TypeParameterUnusedInFormals")
|
||||
<F extends XmlElement> F getFeature(QName qname);
|
||||
|
||||
/**
|
||||
|
|
|
@ -301,7 +301,7 @@ public final class ModularXmppClientToServerConnection extends AbstractXMPPConne
|
|||
currentStateVertex = StateDescriptorGraph.convertToStateGraph(initialStateDescriptorVertex, connectionInternal);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
|
||||
public <CM extends ModularXmppClientToServerConnectionModule<? extends ModularXmppClientToServerConnectionModuleDescriptor>> CM getConnectionModuleFor(
|
||||
Class<? extends ModularXmppClientToServerConnectionModuleDescriptor> descriptorClass) {
|
||||
return (CM) connectionModules.get(descriptorClass);
|
||||
|
|
|
@ -143,7 +143,9 @@ public final class ZlibXmppCompressionFactory extends XmppCompressionFactory {
|
|||
int bytesWritten = compressor.deflate(buffer, initialOutputBufferPosition, length, flushMode);
|
||||
|
||||
int newOutputBufferPosition = initialOutputBufferPosition + bytesWritten;
|
||||
outputBuffer.position(newOutputBufferPosition);
|
||||
// Workaround for Android API not matching Java >=9 API.
|
||||
// See https://issuetracker.google.com/issues/369219141
|
||||
((java.nio.Buffer) outputBuffer).position(newOutputBufferPosition);
|
||||
|
||||
totalBytesWritten += bytesWritten;
|
||||
|
||||
|
@ -156,7 +158,9 @@ public final class ZlibXmppCompressionFactory extends XmppCompressionFactory {
|
|||
increasedBufferSize = MINIMUM_OUTPUT_BUFFER_INCREASE;
|
||||
}
|
||||
ByteBuffer newCurrentOutputBuffer = ByteBuffer.allocate(increasedBufferSize);
|
||||
outputBuffer.flip();
|
||||
// Workaround for Android API not matching Java >=9 API.
|
||||
// See https://issuetracker.google.com/issues/369219141
|
||||
((java.nio.Buffer) outputBuffer).flip();
|
||||
newCurrentOutputBuffer.put(outputBuffer);
|
||||
outputBuffer = newCurrentOutputBuffer;
|
||||
}
|
||||
|
@ -202,7 +206,9 @@ public final class ZlibXmppCompressionFactory extends XmppCompressionFactory {
|
|||
throw new IOException(e);
|
||||
}
|
||||
|
||||
outputBuffer.position(inflateOutputBufferOffset + bytesInflated);
|
||||
// Workaround for Android API not matching Java >=9 API.
|
||||
// See https://issuetracker.google.com/issues/369219141
|
||||
((java.nio.Buffer) outputBuffer).position(inflateOutputBufferOffset + bytesInflated);
|
||||
|
||||
decompressorOutBytes += bytesInflated;
|
||||
|
||||
|
@ -212,7 +218,9 @@ public final class ZlibXmppCompressionFactory extends XmppCompressionFactory {
|
|||
|
||||
int increasedBufferSize = outputBuffer.capacity() * 2;
|
||||
ByteBuffer increasedOutputBuffer = ByteBuffer.allocate(increasedBufferSize);
|
||||
outputBuffer.flip();
|
||||
// Workaround for Android API not matching Java >=9 API.
|
||||
// See https://issuetracker.google.com/issues/369219141
|
||||
((java.nio.Buffer) outputBuffer).flip();
|
||||
increasedOutputBuffer.put(outputBuffer);
|
||||
outputBuffer = increasedOutputBuffer;
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ public class ConsoleDebugger extends AbstractDebugger {
|
|||
super(connection);
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
@Override
|
||||
protected void log(String logMessage) {
|
||||
String formatedDate;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2014-2018 Florian Schmaus
|
||||
* Copyright 2014-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -18,7 +18,7 @@ package org.jivesoftware.smack.initializer;
|
|||
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.util.LinkedList;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
@ -42,7 +42,7 @@ public abstract class UrlInitializer implements SmackInitializer {
|
|||
public List<Exception> initialize() {
|
||||
InputStream is = null;
|
||||
final ClassLoader classLoader = this.getClass().getClassLoader();
|
||||
final List<Exception> exceptions = new LinkedList<Exception>();
|
||||
final List<Exception> exceptions = new ArrayList<Exception>();
|
||||
final String providerUriString = getProvidersUri();
|
||||
if (providerUriString != null) {
|
||||
try {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2014-2021 Florian Schmaus
|
||||
* Copyright 2014-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -108,6 +108,7 @@ public class AbstractError {
|
|||
* @param <PE> type of the ExtensionElement.
|
||||
* @return the extension, or <code>null</code> if it doesn't exist.
|
||||
*/
|
||||
@SuppressWarnings("TypeParameterUnusedInFormals")
|
||||
public <PE extends XmlElement> PE getExtension(String elementName, String namespace) {
|
||||
return PacketUtil.extensionElementFrom(extensions, elementName, namespace);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright © 2014-2020 Florian Schmaus
|
||||
* Copyright © 2014-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -16,9 +16,9 @@
|
|||
*/
|
||||
package org.jivesoftware.smack.packet;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.namespace.QName;
|
||||
|
@ -31,7 +31,7 @@ public class Mechanisms implements ExtensionElement {
|
|||
public static final String NAMESPACE = "urn:ietf:params:xml:ns:xmpp-sasl";
|
||||
public static final QName QNAME = new QName(NAMESPACE, ELEMENT);
|
||||
|
||||
public final List<String> mechanisms = new LinkedList<String>();
|
||||
public final List<String> mechanisms = new ArrayList<String>();
|
||||
|
||||
public Mechanisms(String mechanism) {
|
||||
mechanisms.add(mechanism);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2015-2021 Florian Schmaus.
|
||||
* Copyright 2015-2024 Florian Schmaus.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -53,9 +53,7 @@ public final class StandardExtensionElement implements XmlElement {
|
|||
|
||||
/**
|
||||
* Constructs a new extension element with the given name and namespace and nothing else.
|
||||
* <p>
|
||||
* This is meant to construct extension elements used as simple flags in Stanzas.
|
||||
* <p>
|
||||
*
|
||||
* @param name the name of the extension element.
|
||||
* @param namespace the namespace of the extension element.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2019-2021 Florian Schmaus
|
||||
* Copyright 2019-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -36,7 +36,7 @@ public interface StanzaView extends XmlLangElement {
|
|||
/**
|
||||
* Returns who the stanza is being sent "to", or <code>null</code> if
|
||||
* the value is not set. The XMPP protocol often makes the "to"
|
||||
* attribute optional, so it does not always need to be set.<p>
|
||||
* attribute optional, so it does not always need to be set.
|
||||
*
|
||||
* @return who the stanza is being sent to, or <code>null</code> if the
|
||||
* value has not been set.
|
||||
|
@ -46,7 +46,7 @@ public interface StanzaView extends XmlLangElement {
|
|||
/**
|
||||
* Returns who the stanza is being sent "from" or <code>null</code> if
|
||||
* the value is not set. The XMPP protocol often makes the "from"
|
||||
* attribute optional, so it does not always need to be set.<p>
|
||||
* attribute optional, so it does not always need to be set.
|
||||
*
|
||||
* @return who the stanza is being sent from, or <code>null</code> if the
|
||||
* value has not been set.
|
||||
|
|
|
@ -17,9 +17,9 @@
|
|||
package org.jivesoftware.smack.provider;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
@ -39,11 +39,11 @@ import org.jivesoftware.smack.xml.XmlPullParser;
|
|||
public class ProviderFileLoader implements ProviderLoader {
|
||||
private static final Logger LOGGER = Logger.getLogger(ProviderFileLoader.class.getName());
|
||||
|
||||
private final Collection<IQProviderInfo> iqProviders = new LinkedList<IQProviderInfo>();
|
||||
private final Collection<ExtensionProviderInfo> extProviders = new LinkedList<ExtensionProviderInfo>();
|
||||
private final Collection<StreamFeatureProviderInfo> sfProviders = new LinkedList<StreamFeatureProviderInfo>();
|
||||
private final Collection<IQProviderInfo> iqProviders = new ArrayList<IQProviderInfo>();
|
||||
private final Collection<ExtensionProviderInfo> extProviders = new ArrayList<ExtensionProviderInfo>();
|
||||
private final Collection<StreamFeatureProviderInfo> sfProviders = new ArrayList<StreamFeatureProviderInfo>();
|
||||
|
||||
private List<Exception> exceptions = new LinkedList<Exception>();
|
||||
private List<Exception> exceptions = new ArrayList<Exception>();
|
||||
|
||||
public ProviderFileLoader(InputStream providerStream) {
|
||||
this(providerStream, ProviderFileLoader.class.getClassLoader());
|
||||
|
|
|
@ -97,6 +97,7 @@ import org.jivesoftware.smack.util.XmppElementUtil;
|
|||
* </extensionProvider>
|
||||
* </smackProviders></pre>
|
||||
*
|
||||
* <p>
|
||||
* If multiple provider entries attempt to register to handle the same element name and namespace,
|
||||
* the first entry loaded from the classpath will take precedence. Whenever a stanza extension
|
||||
* is found in a packet, parsing will be passed to the correct provider. Each provider
|
||||
|
@ -106,7 +107,8 @@ import org.jivesoftware.smack.util.XmppElementUtil;
|
|||
* set the properties of th class using the values in the stanza extension sub-element. When an
|
||||
* extension provider is not registered for an element name and namespace combination, Smack will
|
||||
* store all top-level elements of the sub-packet in DefaultPacketExtension object and then
|
||||
* attach it to the packet.<p>
|
||||
* attach it to the packet.
|
||||
* </p>
|
||||
*
|
||||
* @author Matt Tucker
|
||||
*/
|
||||
|
|
|
@ -271,6 +271,7 @@ public abstract class ScramMechanism extends SASLMechanism {
|
|||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("MixedMutabilityReturnType")
|
||||
private static Map<Character, String> parseAttributes(String string) throws SmackSaslException {
|
||||
if (string.length() == 0) {
|
||||
return Collections.emptyMap();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright © 2015-2021 Florian Schmaus
|
||||
* Copyright © 2015-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -184,13 +184,14 @@ public class MultiMap<K, V> {
|
|||
}
|
||||
|
||||
/**
|
||||
* Remove the given number of values for a given key. May return less values then requested.
|
||||
* Remove the given number of values for a given key. May return less values than requested.
|
||||
*
|
||||
* @param key the key to remove from.
|
||||
* @param num the number of values to remove.
|
||||
* @return a list of the removed values.
|
||||
* @since 4.4.0
|
||||
*/
|
||||
@SuppressWarnings("MixedMutabilityReturnType")
|
||||
public List<V> remove(K key, int num) {
|
||||
List<V> values = map.get(key);
|
||||
if (values == null) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2003-2007 Jive Software, 2019-2023 Florian Schmaus.
|
||||
* Copyright 2003-2007 Jive Software, 2019-2024 Florian Schmaus.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -25,7 +25,6 @@ import java.nio.charset.StandardCharsets;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
|
@ -87,7 +86,7 @@ public class PacketParserUtils {
|
|||
return parser;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
|
||||
public static <S extends Stanza> S parseStanza(String stanza) throws XmlPullParserException, SmackParsingException, IOException {
|
||||
return (S) parseStanza(getParserFor(stanza), XmlEnvironment.EMPTY);
|
||||
}
|
||||
|
@ -644,7 +643,7 @@ public class PacketParserUtils {
|
|||
assert parser.getEventType() == XmlPullParser.Event.START_ELEMENT;
|
||||
String name;
|
||||
final int initialDepth = parser.getDepth();
|
||||
List<String> methods = new LinkedList<>();
|
||||
List<String> methods = new ArrayList<>();
|
||||
outerloop: while (true) {
|
||||
XmlPullParser.Event eventType = parser.next();
|
||||
switch (eventType) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright © 2014-2021 Florian Schmaus
|
||||
* Copyright © 2014-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -32,7 +32,7 @@ public class PacketUtil {
|
|||
*
|
||||
* @return the extension element
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
|
||||
public static <PE extends XmlElement> PE extensionElementFrom(Collection<XmlElement> collection,
|
||||
String element, String namespace) {
|
||||
for (XmlElement packetExtension : collection) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2020 Florian Schmaus.
|
||||
* Copyright 2020-2024 Florian Schmaus.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -30,6 +30,7 @@ public final class Pair<F, S> {
|
|||
return new Pair<>(first, second);
|
||||
}
|
||||
|
||||
@SuppressWarnings("ReturnValueIgnored")
|
||||
public static <F extends Object, S extends Object> Pair<F, S> createAndInitHashCode(F first, S second) {
|
||||
Pair<F, S> pair = new Pair<>(first, second);
|
||||
pair.hashCode();
|
||||
|
|
|
@ -329,7 +329,10 @@ public class StringUtils {
|
|||
throw new AssertionError(e);
|
||||
}
|
||||
|
||||
return charBuffer.flip().toString();
|
||||
// Workaround for Android API not matching Java >=9 API.
|
||||
// See https://issuetracker.google.com/issues/369219141
|
||||
((java.nio.Buffer) charBuffer).flip();
|
||||
return charBuffer.toString();
|
||||
}
|
||||
|
||||
private static void randomString(Appendable appendable, Random random, char[] alphabet, int numRandomChars)
|
||||
|
|
|
@ -71,6 +71,7 @@ public class XmppElementUtil {
|
|||
return qname;
|
||||
}
|
||||
|
||||
@SuppressWarnings("MixedMutabilityReturnType")
|
||||
public static <E extends ExtensionElement> List<E> getElementsFrom(
|
||||
MultiMap<QName, XmlElement> elementMap, Class<E> extensionElementClass) {
|
||||
QName qname = XmppElementUtil.getQNameFor(extensionElementClass);
|
||||
|
|
|
@ -91,6 +91,7 @@ public class DummyConnection extends AbstractXMPPConnection {
|
|||
user = getUserJid();
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
@Override
|
||||
protected void connectInternal() {
|
||||
connected = true;
|
||||
|
@ -162,6 +163,7 @@ public class DummyConnection extends AbstractXMPPConnection {
|
|||
* @param <P> the top level stream element class.
|
||||
* @return a sent packet.
|
||||
*/
|
||||
@SuppressWarnings("TypeParameterUnusedInFormals")
|
||||
public <P extends TopLevelStreamElement> P getSentPacket() {
|
||||
return getSentPacket(5 * 60);
|
||||
}
|
||||
|
@ -176,7 +178,7 @@ public class DummyConnection extends AbstractXMPPConnection {
|
|||
* @param <P> the top level stream element class.
|
||||
* @return a sent packet.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
|
||||
public <P extends TopLevelStreamElement> P getSentPacket(int wait) {
|
||||
try {
|
||||
return (P) queue.poll(wait, TimeUnit.SECONDS);
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack slf4j debugger.
|
||||
Inspect the exchanged XMPP stanzas.
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack GUI debugger.
|
||||
Inspect the exchanged XMPP stanzas."""
|
||||
|
|
|
@ -160,6 +160,7 @@ public class EnhancedDebugger extends SmackDebugger {
|
|||
private ReaderListener readerListener;
|
||||
private WriterListener writerListener;
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
private Date creationTime = new Date();
|
||||
|
||||
// Statistics variables
|
||||
|
@ -756,6 +757,7 @@ public class EnhancedDebugger extends SmackDebugger {
|
|||
* @param dateFormatter the SimpleDateFormat to use to format Dates
|
||||
* @param packet the read stanza to add to the table
|
||||
*/
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
private void addReadPacketToTable(final SimpleDateFormat dateFormatter, final TopLevelStreamElement packet) {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
|
@ -827,6 +829,7 @@ public class EnhancedDebugger extends SmackDebugger {
|
|||
* @param dateFormatter the SimpleDateFormat to use to format Dates
|
||||
* @param packet the sent stanza to add to the table
|
||||
*/
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
private void addSentPacketToTable(final SimpleDateFormat dateFormatter, final TopLevelStreamElement packet) {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
|
|
|
@ -204,7 +204,7 @@ public final class EnhancedDebuggerWindow {
|
|||
* Creates the main debug window that provides information about Smack and also shows
|
||||
* a tab panel for each connection that is being debugged.
|
||||
*/
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@SuppressWarnings({ "rawtypes", "unchecked", "JdkObsolete" })
|
||||
private void createDebug() {
|
||||
|
||||
frame = new JFrame("Smack Debug Window");
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Examples and test applications for Smack"""
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2016-2021 Florian Schmaus
|
||||
* Copyright 2016-2024 Florian Schmaus
|
||||
*
|
||||
* This file is part of smack-examples.
|
||||
*
|
||||
|
@ -136,6 +136,7 @@ public class XmppTools {
|
|||
// CHECKSTYLE:ON
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public static void sendItsAlive(String to, XMPPConnection connection)
|
||||
throws XmppStringprepException, NotConnectedException, InterruptedException {
|
||||
if (to == null) {
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack experimental extensions.
|
||||
Classes and methods for XEPs that are in status 'experimental' or that should
|
||||
|
|
|
@ -83,6 +83,7 @@ public class IoTFieldsExtension implements ExtensionElement {
|
|||
return xml;
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public static IoTFieldsExtension buildFor(int seqNr, boolean done, NodeInfo nodeInfo,
|
||||
List<? extends IoTDataField> data) {
|
||||
TimestampElement timestampElement = new TimestampElement(new Date(), data);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2017 Paul Schaub, 2019 Florian Schmaus
|
||||
* Copyright 2017 Paul Schaub, 2019-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -167,6 +167,7 @@ public class JingleFileTransferChild implements JingleContentDescriptionChildEle
|
|||
return new JingleFileTransferChild(date, desc, hash, mediaType, name, size, range);
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public Builder setFile(File file) {
|
||||
return setDate(new Date(file.lastModified()))
|
||||
.setName(file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf("/") + 1))
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright © 2017-2023 Florian Schmaus, 2016-2017 Fernando Ramirez
|
||||
* Copyright © 2017-2024 Florian Schmaus, 2016-2017 Fernando Ramirez
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -387,6 +387,7 @@ public final class MamManager extends Manager {
|
|||
return this;
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public Builder limitResultsSince(Date start) {
|
||||
if (start == null) {
|
||||
return this;
|
||||
|
@ -415,6 +416,7 @@ public final class MamManager extends Manager {
|
|||
return this;
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public Builder limitResultsBefore(Date end) {
|
||||
if (end == null) {
|
||||
return this;
|
||||
|
|
|
@ -114,6 +114,7 @@ public class SpoilerElement implements ExtensionElement {
|
|||
* @param message message
|
||||
* @return map of spoilers
|
||||
*/
|
||||
@SuppressWarnings("MixedMutabilityReturnType")
|
||||
public static Map<String, String> getSpoilers(Message message) {
|
||||
if (!containsSpoiler(message)) {
|
||||
return Collections.emptyMap();
|
||||
|
|
|
@ -56,6 +56,7 @@ public class TimestampAffixElement implements NamedElement, AffixElement {
|
|||
return EqualsUtil.equals(this, obj, (e, o) -> e.append(getTimestamp(), o.getTimestamp()));
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return timestamp.hashCode();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2016 Fernando Ramirez, 2018-2020 Florian Schmaus
|
||||
* Copyright 2016 Fernando Ramirez, 2018-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -46,6 +46,7 @@ public class FiltersTest extends MamTest {
|
|||
return xml;
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
@Test
|
||||
public void checkStartDateFilter() throws Exception {
|
||||
Date date = new Date();
|
||||
|
@ -61,6 +62,7 @@ public class FiltersTest extends MamTest {
|
|||
assertEquals(getMamXMemberWith(fields, values), dataForm.toXML().toString());
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
@Test
|
||||
public void checkEndDateFilter() throws Exception {
|
||||
Date date = new Date();
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack extensions.
|
||||
Classes and methods that implement support for the various XMPP XEPs
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.bytestreams.ibb;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
|
@ -135,7 +135,7 @@ public final class InBandBytestreamManager extends Manager implements Bytestream
|
|||
* list of listeners that respond to all In-Band Bytestream requests if there are no user
|
||||
* specific listeners for that request
|
||||
*/
|
||||
private final List<BytestreamListener> allRequestListeners = Collections.synchronizedList(new LinkedList<BytestreamListener>());
|
||||
private final List<BytestreamListener> allRequestListeners = Collections.synchronizedList(new ArrayList<BytestreamListener>());
|
||||
|
||||
/* listener that handles all incoming In-Band Bytestream requests */
|
||||
private final InitiationListener initiationListener;
|
||||
|
@ -162,7 +162,7 @@ public final class InBandBytestreamManager extends Manager implements Bytestream
|
|||
* list containing session IDs of In-Band Bytestream open packets that should be ignored by the
|
||||
* InitiationListener
|
||||
*/
|
||||
private final List<String> ignoredBytestreamRequests = Collections.synchronizedList(new LinkedList<String>());
|
||||
private final List<String> ignoredBytestreamRequests = Collections.synchronizedList(new ArrayList<String>());
|
||||
|
||||
/**
|
||||
* Returns the InBandBytestreamManager to handle In-Band Bytestreams for a given
|
||||
|
|
|
@ -22,7 +22,6 @@ import java.net.Socket;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
@ -128,7 +127,7 @@ public final class Socks5BytestreamManager extends Manager implements Bytestream
|
|||
* list of listeners that respond to all bytestream requests if there are not user specific
|
||||
* listeners for that request
|
||||
*/
|
||||
private final List<BytestreamListener> allRequestListeners = Collections.synchronizedList(new LinkedList<BytestreamListener>());
|
||||
private final List<BytestreamListener> allRequestListeners = Collections.synchronizedList(new ArrayList<BytestreamListener>());
|
||||
|
||||
/* listener that handles all incoming bytestream requests */
|
||||
private final InitiationListener initiationListener;
|
||||
|
@ -154,7 +153,7 @@ public final class Socks5BytestreamManager extends Manager implements Bytestream
|
|||
* list containing session IDs of SOCKS5 Bytestream initialization packets that should be
|
||||
* ignored by the InitiationListener
|
||||
*/
|
||||
private final List<String> ignoredBytestreamRequests = Collections.synchronizedList(new LinkedList<String>());
|
||||
private final List<String> ignoredBytestreamRequests = Collections.synchronizedList(new ArrayList<String>());
|
||||
|
||||
/**
|
||||
* Returns the Socks5BytestreamManager to handle SOCKS5 Bytestreams for a given
|
||||
|
|
|
@ -26,12 +26,12 @@ import java.net.ServerSocket;
|
|||
import java.net.Socket;
|
||||
import java.net.SocketException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
@ -107,7 +107,7 @@ public class Socks5Proxy {
|
|||
private final Map<String, Socket> connectionMap = new ConcurrentHashMap<>();
|
||||
|
||||
/* list of digests connections should be stored */
|
||||
private final List<String> allowedConnections = Collections.synchronizedList(new LinkedList<String>());
|
||||
private final List<String> allowedConnections = Collections.synchronizedList(new ArrayList<String>());
|
||||
|
||||
private final Set<InetAddress> localAddresses = new LinkedHashSet<>(4);
|
||||
|
||||
|
@ -345,7 +345,7 @@ public class Socks5Proxy {
|
|||
*/
|
||||
public List<InetAddress> getLocalAddresses() {
|
||||
synchronized (localAddresses) {
|
||||
return new LinkedList<>(localAddresses);
|
||||
return new ArrayList<>(localAddresses);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright © 2009 Jonas Ådahl, 2011-2022 Florian Schmaus
|
||||
* Copyright © 2009 Jonas Ådahl, 2011-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -19,12 +19,12 @@ package org.jivesoftware.smackx.caps;
|
|||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
@ -555,7 +555,7 @@ public final class EntityCapsManager extends Manager {
|
|||
if (connection != null)
|
||||
JID_TO_NODEVER_CACHE.put(connection.getUser(), new NodeVerHash(entityNode, currentCapsVersion));
|
||||
|
||||
final List<Identity> identities = new LinkedList<>(ServiceDiscoveryManager.getInstanceFor(connection).getIdentities());
|
||||
final List<Identity> identities = new ArrayList<>(ServiceDiscoveryManager.getInstanceFor(connection).getIdentities());
|
||||
sdm.setNodeInformationProvider(localNodeVer, new AbstractNodeInformationProvider() {
|
||||
List<String> features = sdm.getFeatures();
|
||||
List<DataForm> packetExtensions = sdm.getExtendedInfo();
|
||||
|
|
|
@ -22,7 +22,6 @@ import java.util.Arrays;
|
|||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
@ -772,7 +771,7 @@ public final class ServiceDiscoveryManager extends Manager {
|
|||
return serviceDiscoInfo;
|
||||
}
|
||||
}
|
||||
serviceDiscoInfo = new LinkedList<>();
|
||||
serviceDiscoInfo = new ArrayList<>();
|
||||
// Send the disco packet to the server itself
|
||||
DiscoverInfo info;
|
||||
try {
|
||||
|
|
|
@ -19,7 +19,6 @@ package org.jivesoftware.smackx.disco.packet;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -184,7 +183,7 @@ public class DiscoverInfo extends IQ implements DiscoverInfoView {
|
|||
* @return true if duplicate identities where found, otherwise false
|
||||
*/
|
||||
public boolean containsDuplicateIdentities() {
|
||||
List<Identity> checkedIdentities = new LinkedList<>();
|
||||
List<Identity> checkedIdentities = new ArrayList<>(identities.size());
|
||||
for (Identity i : identities) {
|
||||
for (Identity i2 : checkedIdentities) {
|
||||
if (i.equals(i2))
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.disco.packet;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
|
@ -40,7 +40,7 @@ public class DiscoverItems extends IQ {
|
|||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = "http://jabber.org/protocol/disco#items";
|
||||
|
||||
private final List<Item> items = new LinkedList<>();
|
||||
private final List<Item> items = new ArrayList<>();
|
||||
private String node;
|
||||
|
||||
public DiscoverItems() {
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
package org.jivesoftware.smackx.iqregister.provider;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -40,7 +40,7 @@ public class RegistrationProvider extends IqProvider<Registration> {
|
|||
public Registration parse(XmlPullParser parser, int initialDepth, IqData iqData, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException, SmackParsingException {
|
||||
String instruction = null;
|
||||
Map<String, String> fields = new HashMap<>();
|
||||
List<XmlElement> packetExtensions = new LinkedList<>();
|
||||
List<XmlElement> packetExtensions = new ArrayList<>();
|
||||
outerloop:
|
||||
while (true) {
|
||||
XmlPullParser.Event eventType = parser.next();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2003-2007 Jive Software, 2021 Florian Schmaus.
|
||||
* Copyright 2003-2007 Jive Software, 2021-2024 Florian Schmaus.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -24,7 +24,7 @@ import org.jivesoftware.smack.util.StringUtils;
|
|||
|
||||
/**
|
||||
* A Version IQ packet, which is used by XMPP clients to discover version information
|
||||
* about the software running at another entity's JID.<p>
|
||||
* about the software running at another entity's JID.
|
||||
*
|
||||
* @author Gaston Dombiak
|
||||
*/
|
||||
|
|
|
@ -37,6 +37,7 @@ public class IdleElement implements ExtensionElement {
|
|||
/**
|
||||
* Create a new IdleElement with the current date as date of last user interaction.
|
||||
*/
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public IdleElement() {
|
||||
this(new Date());
|
||||
}
|
||||
|
|
|
@ -101,9 +101,7 @@ public final class MucEnterConfiguration {
|
|||
|
||||
/**
|
||||
* Set the presence used to join the MUC room.
|
||||
* <p>
|
||||
* The consumer must not modify the presence type, otherwise an {@link IllegalArgumentException} will be thrown.
|
||||
* <p>
|
||||
*
|
||||
* @param presenceBuilderConsumer a consumer which will be passed the presence build.
|
||||
* @return a reference to this builder.
|
||||
|
|
|
@ -1842,7 +1842,7 @@ public class MultiUserChat {
|
|||
|
||||
/**
|
||||
* Returns the presence info for a particular user, or <code>null</code> if the user
|
||||
* is not in the room.<p>
|
||||
* is not in the room.
|
||||
*
|
||||
* @param user the room occupant to search for his presence. The format of user must
|
||||
* be: roomName@service/nickname (e.g. darkcave@macbeth.shakespeare.lit/thirdwitch).
|
||||
|
@ -1856,7 +1856,7 @@ public class MultiUserChat {
|
|||
/**
|
||||
* Returns the Occupant information for a particular occupant, or <code>null</code> if the
|
||||
* user is not in the room. The Occupant object may include information such as full
|
||||
* JID of the user as well as the role and affiliation of the user in the room.<p>
|
||||
* JID of the user as well as the role and affiliation of the user in the room.
|
||||
*
|
||||
* @param user the room occupant to search for his presence. The format of user must
|
||||
* be: roomName@service/nickname (e.g. darkcave@macbeth.shakespeare.lit/thirdwitch).
|
||||
|
|
|
@ -108,6 +108,7 @@ public final class MultiUserChatManager extends Manager {
|
|||
final WeakReference<XMPPConnection> weakRefConnection = new WeakReference<XMPPConnection>(connection);
|
||||
ServiceDiscoveryManager.getInstanceFor(connection).setNodeInformationProvider(DISCO_NODE,
|
||||
new AbstractNodeInformationProvider() {
|
||||
@SuppressWarnings({"JavaUtilDate", "MixedMutabilityReturnType"})
|
||||
@Override
|
||||
public List<DiscoverItems.Item> getNodeItems() {
|
||||
XMPPConnection connection = weakRefConnection.get();
|
||||
|
|
|
@ -109,6 +109,7 @@ public class ItemPublishEvent<T extends Item> extends SubscriptionEvent {
|
|||
return originalDate;
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
@Override
|
||||
public String toString() {
|
||||
return getClass().getName() + " [subscriptions: " + getSubscriptions() + "], [Delayed: " +
|
||||
|
|
|
@ -49,7 +49,7 @@ public class PubSub extends IQ {
|
|||
setType(type);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
|
||||
public <PE extends XmlElement> PE getExtension(PubSubElementType elem) {
|
||||
return (PE) getExtensionElement(elem.getElementName(), elem.getNamespace().getXmlns());
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright © 2014-2021 Florian Schmaus
|
||||
* Copyright © 2014-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -16,8 +16,8 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.rsm;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.jivesoftware.smack.packet.XmlElement;
|
||||
|
@ -29,7 +29,7 @@ import org.jivesoftware.smackx.rsm.packet.RSMSet.PageDirection;
|
|||
public class RSMManager {
|
||||
|
||||
Collection<XmlElement> page(int max) {
|
||||
List<XmlElement> packetExtensions = new LinkedList<>();
|
||||
List<XmlElement> packetExtensions = new ArrayList<>();
|
||||
packetExtensions.add(new RSMSet(max));
|
||||
return packetExtensions;
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ public class RSMManager {
|
|||
throw new IllegalArgumentException("returnedExtensions must no be null");
|
||||
}
|
||||
if (additionalExtensions == null) {
|
||||
additionalExtensions = new LinkedList<>();
|
||||
additionalExtensions = new ArrayList<>();
|
||||
}
|
||||
RSMSet resultRsmSet = PacketUtil.extensionElementFrom(returnedExtensions, RSMSet.ELEMENT, RSMSet.NAMESPACE);
|
||||
if (resultRsmSet == null) {
|
||||
|
|
|
@ -45,6 +45,7 @@ import org.jxmpp.util.XmppDateTime;
|
|||
public class StreamInitiationProvider extends IqProvider<StreamInitiation> {
|
||||
private static final Logger LOGGER = Logger.getLogger(StreamInitiationProvider.class.getName());
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
@Override
|
||||
public StreamInitiation parse(XmlPullParser parser, int initialDepth, IqData iqData, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException, SmackParsingException {
|
||||
// si
|
||||
|
|
|
@ -22,8 +22,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.test.util.SmackTestSuite;
|
||||
|
@ -218,7 +218,7 @@ public class EntityCapsManagerTest extends SmackTestSuite {
|
|||
di.to(JidCreate.from("juliet@capulet.lit/chamber"));
|
||||
di.ofType(IQ.Type.result);
|
||||
|
||||
Collection<DiscoverInfo.Identity> identities = new LinkedList<DiscoverInfo.Identity>();
|
||||
Collection<DiscoverInfo.Identity> identities = new ArrayList<DiscoverInfo.Identity>();
|
||||
DiscoverInfo.Identity i = new DiscoverInfo.Identity("client", "pc", "Psi 0.11", "en");
|
||||
identities.add(i);
|
||||
i = new DiscoverInfo.Identity("client", "pc", "Ψ 0.11", "el");
|
||||
|
@ -241,7 +241,7 @@ public class EntityCapsManagerTest extends SmackTestSuite {
|
|||
di.to(")juliet@capulet.lit/chamber");
|
||||
di.ofType(IQ.Type.result);
|
||||
|
||||
Collection<DiscoverInfo.Identity> identities = new LinkedList<DiscoverInfo.Identity>();
|
||||
Collection<DiscoverInfo.Identity> identities = new ArrayList<DiscoverInfo.Identity>();
|
||||
DiscoverInfo.Identity i = new DiscoverInfo.Identity("client", "pc", "Psi 0.11", "en");
|
||||
identities.add(i);
|
||||
i = new DiscoverInfo.Identity("client", "pc", "Ψ 0.11", "el");
|
||||
|
|
|
@ -89,6 +89,7 @@ public class Protocol {
|
|||
public boolean printProtocol = false;
|
||||
|
||||
// responses to requests are taken form this queue
|
||||
@SuppressWarnings("JdkObsolete")
|
||||
private final Queue<Stanza> responses = new LinkedList<>();
|
||||
|
||||
// list of verifications
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack IM.
|
||||
Classes and methods for XMPP-IM (RFC 6121):
|
||||
|
@ -8,4 +13,7 @@ Roster, Chat and other functionality."""
|
|||
dependencies {
|
||||
api project(':smack-core')
|
||||
testImplementation(testFixtures(project(":smack-core")))
|
||||
|
||||
// TODO: Migrate Junit4 tests to Junit5.
|
||||
testImplementation "org.junit.vintage:junit-vintage-engine:$junitVersion"
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2016 Florian Schmaus
|
||||
* Copyright 2016-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -34,6 +34,7 @@ import org.jxmpp.jid.Jid;
|
|||
|
||||
public class RosterUtil {
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public static void waitUntilOtherEntityIsSubscribed(Roster roster, BareJid otherEntity, long timeoutMillis)
|
||||
throws InterruptedException, TimeoutException {
|
||||
Date deadline = new Date(System.currentTimeMillis() + timeoutMillis);
|
||||
|
@ -147,6 +148,7 @@ public class RosterUtil {
|
|||
ensureSubscribedTo(connectionTwo, connectionOne, timeout);
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public static void ensureSubscribedTo(XMPPConnection connectionOne, XMPPConnection connectionTwo, long timeout)
|
||||
throws NotLoggedInException, NotConnectedException, InterruptedException, TimeoutException {
|
||||
Date deadline = new Date(System.currentTimeMillis() + timeout);
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
apply plugin: 'application'
|
||||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.application-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack integration tests."""
|
||||
|
||||
mainClassName = 'org.igniterealtime.smack.inttest.SmackIntegrationTestFramework'
|
||||
applicationDefaultJvmArgs = ["-enableassertions"]
|
||||
|
||||
application {
|
||||
mainClass = 'org.igniterealtime.smack.inttest.SmackIntegrationTestFramework'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
api project(':smack-java8-full')
|
||||
|
@ -20,8 +25,3 @@ dependencies {
|
|||
testFixturesApi(testFixtures(project(":smack-core")))
|
||||
testImplementation "org.jxmpp:jxmpp-jid:$jxmppVersion:tests"
|
||||
}
|
||||
|
||||
run {
|
||||
// Pass all system properties down to the "application" run
|
||||
systemProperties System.getProperties()
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2015-2023 Florian Schmaus
|
||||
* Copyright 2015-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -22,11 +22,11 @@ import java.io.IOException;
|
|||
import java.lang.reflect.Method;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
@ -587,7 +587,7 @@ public final class Configuration {
|
|||
}
|
||||
|
||||
private static File findPropertiesFile() {
|
||||
List<String> possibleLocations = new LinkedList<>();
|
||||
List<String> possibleLocations = new ArrayList<>();
|
||||
possibleLocations.add("properties");
|
||||
String userHome = System.getProperty("user.home");
|
||||
if (userHome != null) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2015-2023 Florian Schmaus
|
||||
* Copyright 2015-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -39,7 +39,6 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
@ -698,9 +697,9 @@ public class SmackIntegrationTestFramework {
|
|||
*/
|
||||
public final String testRunId = StringUtils.insecureRandomString(5).toLowerCase(Locale.US);
|
||||
|
||||
private final List<SuccessfulTest> successfulIntegrationTests = Collections.synchronizedList(new LinkedList<SuccessfulTest>());
|
||||
private final List<FailedTest> failedIntegrationTests = Collections.synchronizedList(new LinkedList<FailedTest>());
|
||||
private final List<TestNotPossible> impossibleIntegrationTests = Collections.synchronizedList(new LinkedList<TestNotPossible>());
|
||||
private final List<SuccessfulTest> successfulIntegrationTests = Collections.synchronizedList(new ArrayList<SuccessfulTest>());
|
||||
private final List<FailedTest> failedIntegrationTests = Collections.synchronizedList(new ArrayList<FailedTest>());
|
||||
private final List<TestNotPossible> impossibleIntegrationTests = Collections.synchronizedList(new ArrayList<TestNotPossible>());
|
||||
|
||||
// TODO: Ideally three would only be a list of disabledTests, but since we do not process a disabled test class
|
||||
// any further, we can not determine the concrete disabled tests.
|
||||
|
|
|
@ -66,8 +66,8 @@ public class ChatTest extends AbstractSmackIntegrationTest {
|
|||
JivePropertiesManager.setJavaObjectEnabled(false);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@SmackIntegrationTest
|
||||
@SuppressWarnings({"deprecation", "JavaUtilDate"})
|
||||
public void testProperties() throws Exception {
|
||||
org.jivesoftware.smack.chat.Chat newChat = chatManagerOne.createChat(conTwo.getUser());
|
||||
StanzaCollector collector = conTwo.createStanzaCollector(new ThreadFilter(newChat.getThreadID()));
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Full Smack library for Java SE."""
|
||||
|
||||
|
@ -44,6 +48,7 @@ task convertModularXmppClientToServerConnectionStateGraphDotToPng(type: Exec) {
|
|||
executable 'dot'
|
||||
args "-Tpng", "-o", "${outputs.files.first()}", "${inputs.files.first()}"
|
||||
}
|
||||
copyJavadocDocFiles.dependsOn convertModularXmppClientToServerConnectionStateGraphDotToPng
|
||||
|
||||
task cleanGenerateFiles(type: Delete) {
|
||||
delete 'src/javadoc/org/jivesoftware/smack/full/doc-files/ModularXmppClientToServerConnectionStateGraph.dot', 'src/javadoc/org/jivesoftware/smack/full/doc-files/ModularXmppClientToServerConnectionStateGraph.png'
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack for Java7 (or higher).
|
||||
Smack for Java 11 (or higher).
|
||||
This is a pseudo-artifact that pulls all the required dependencies to
|
||||
run Smack on Java 7 (or higher) JVMs. Usually you want to add additional
|
||||
run Smack on Java 11 (or higher) JVMs. Usually you want to add additional
|
||||
dependencies to smack-tcp, smack-extensions and smack-experimental."""
|
||||
|
||||
dependencies {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2015 Florian Schmaus
|
||||
* Copyright 2015-2024 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -23,8 +23,8 @@ import java.security.Principal;
|
|||
import java.security.cert.Certificate;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.logging.Level;
|
||||
|
@ -135,7 +135,7 @@ public class XmppHostnameVerifier implements HostnameVerifier {
|
|||
private static void matchDns(String name, X509Certificate cert) throws CertificateException {
|
||||
Collection<List<?>> subjAltNames = cert.getSubjectAlternativeNames();
|
||||
if (subjAltNames != null) {
|
||||
List<String> nonMatchingDnsAltnames = new LinkedList<>();
|
||||
List<String> nonMatchingDnsAltnames = new ArrayList<>();
|
||||
for (List<?> san : subjAltNames) {
|
||||
if (((Integer) san.get(0)).intValue() != ALTNAME_DNS) {
|
||||
continue;
|
||||
|
@ -253,7 +253,7 @@ public class XmppHostnameVerifier implements HostnameVerifier {
|
|||
if (subjectAlternativeNames == null) {
|
||||
throw new CertificateException("No subject alternative names present");
|
||||
}
|
||||
List<String> nonMatchingIpAltnames = new LinkedList<>();
|
||||
List<String> nonMatchingIpAltnames = new ArrayList<>();
|
||||
for (List<?> san : subjectAlternativeNames) {
|
||||
if (((Integer) san.get(0)).intValue() != ALTNAME_IP) {
|
||||
continue;
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack Jingle API.
|
||||
Warning: This API is beta, outdated and currenlty unmaintained."""
|
||||
|
|
|
@ -76,6 +76,7 @@ public class OctTreeQuantizer implements Quantizer {
|
|||
private int colors = 0;
|
||||
private final List<Vector<OctTreeNode>> colorList;
|
||||
|
||||
@SuppressWarnings("JdkObsolete")
|
||||
public OctTreeQuantizer() {
|
||||
setup(256);
|
||||
colorList = new ArrayList<>(MAX_LEVEL + 1);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack legacy extensions.
|
||||
Usually XEPs in the state 'retracted', 'rejected', 'deprecated',
|
||||
|
|
|
@ -203,7 +203,7 @@ public class AgentRoster {
|
|||
|
||||
/**
|
||||
* Returns the presence info for a particular agent, or <code>null</code> if the agent
|
||||
* is unavailable (offline) or if no presence information is available.<p>
|
||||
* is unavailable (offline) or if no presence information is available.
|
||||
*
|
||||
* @param user a fully qualified xmpp JID. The address could be in any valid format (e.g.
|
||||
* "domain/resource", "user@domain" or "user@domain/resource").
|
||||
|
|
|
@ -710,6 +710,7 @@ public class AgentSession {
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
private void fireOfferRequestEvent(OfferRequestProvider.OfferRequestPacket requestPacket) {
|
||||
Offer offer = new Offer(this.connection, this, requestPacket.getUserID(),
|
||||
requestPacket.getUserJID(), this.getWorkgroupJID(),
|
||||
|
@ -723,6 +724,7 @@ public class AgentSession {
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
private void fireOfferRevokeEvent(OfferRevokeProvider.OfferRevokePacket orp) {
|
||||
RevokedOffer revokedOffer = new RevokedOffer(orp.getUserJID(), orp.getUserID(),
|
||||
this.getWorkgroupJID(), orp.getSessionID(), orp.getReason(), new Date());
|
||||
|
|
|
@ -54,6 +54,7 @@ public class AgentChatHistory extends IQ {
|
|||
|
||||
private final List<AgentChatSession> agentChatSessions = new ArrayList<>();
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public AgentChatHistory(EntityBareJid agentJID, int maxSessions, Date startDate) {
|
||||
this();
|
||||
this.agentJID = agentJID;
|
||||
|
@ -116,6 +117,7 @@ public class AgentChatHistory extends IQ {
|
|||
return agentChatHistory;
|
||||
}
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
private static AgentChatSession parseChatSetting(XmlPullParser parser)
|
||||
throws XmlPullParserException, IOException {
|
||||
boolean done = false;
|
||||
|
|
|
@ -145,6 +145,7 @@ public final class QueueDetails implements ExtensionElement {
|
|||
*/
|
||||
public static class Provider extends ExtensionElementProvider<QueueDetails> {
|
||||
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
@Override
|
||||
public QueueDetails parse(XmlPullParser parser,
|
||||
int initialDepth, XmlEnvironment xmlEnvironment) throws XmlPullParserException,
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.jivesoftware.smackx.workgroup.util;
|
|||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Hashtable;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -45,6 +45,7 @@ public class MetaDataUtils {
|
|||
* @throws XmlPullParserException if an error occurs while parsing the XML.
|
||||
* @throws IOException if an error occurs while parsing the XML.
|
||||
*/
|
||||
@SuppressWarnings("MixedMutabilityReturnType")
|
||||
public static Map<String, List<String>> parseMetaData(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
XmlPullParser.Event eventType = parser.getEventType();
|
||||
|
||||
|
@ -52,7 +53,7 @@ public class MetaDataUtils {
|
|||
if ((eventType == XmlPullParser.Event.START_ELEMENT)
|
||||
&& parser.getName().equals(MetaData.ELEMENT_NAME)
|
||||
&& parser.getNamespace().equals(MetaData.NAMESPACE)) {
|
||||
Map<String, List<String>> metaData = new Hashtable<>();
|
||||
Map<String, List<String>> metaData = new LinkedHashMap<>();
|
||||
|
||||
eventType = parser.next();
|
||||
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
apply plugin: 'application'
|
||||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.application-conventions'
|
||||
}
|
||||
|
||||
description = """\
|
||||
Smack integration tests for OMEMO using libsignal."""
|
||||
|
||||
mainClassName = 'org.igniterealtime.smack.inttest.smack_omemo_signal.SmackOmemoSignalIntegrationTestFramework'
|
||||
applicationDefaultJvmArgs = ["-enableassertions"]
|
||||
application {
|
||||
mainClass = 'org.igniterealtime.smack.inttest.smack_omemo_signal.SmackOmemoSignalIntegrationTestFramework'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
api project(':smack-integration-test')
|
||||
api project(':smack-omemo-signal')
|
||||
}
|
||||
|
||||
run {
|
||||
// Pass all system properties down to the "application" run
|
||||
systemProperties System.getProperties()
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
}
|
||||
|
||||
description="""
|
||||
Smack API for XEP-0384: OMEMO Encryption using libsignal
|
||||
"""
|
||||
|
@ -8,6 +13,9 @@ dependencies {
|
|||
api project(":smack-omemo")
|
||||
implementation 'org.whispersystems:signal-protocol-java:2.8.1'
|
||||
|
||||
// TODO: Migrate Junit4 tests to Junit5.
|
||||
testImplementation "org.junit.vintage:junit-vintage-engine:$junitVersion"
|
||||
|
||||
testFixturesApi(testFixtures(project(":smack-core")))
|
||||
testImplementation project(path: ":smack-omemo", configuration: "testRuntime")
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
plugins {
|
||||
id 'org.igniterealtime.smack.java-common-conventions'
|
||||
id 'org.igniterealtime.smack.android-conventions'
|
||||
}
|
||||
|
||||
description="""
|
||||
Smack API for XEP-0384: OMEMO Encryption
|
||||
"""
|
||||
|
@ -7,5 +12,8 @@ dependencies {
|
|||
api project(":smack-extensions")
|
||||
api project(":smack-experimental")
|
||||
|
||||
// TODO: Migrate Junit4 tests to Junit5.
|
||||
testImplementation "org.junit.vintage:junit-vintage-engine:$junitVersion"
|
||||
|
||||
testFixturesApi(testFixtures(project(":smack-core")))
|
||||
}
|
||||
|
|
|
@ -125,12 +125,14 @@ public abstract class FileBasedOmemoStore<T_IdKeyPair, T_IdKey, T_PreKey, T_SigP
|
|||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public void setDateOfLastReceivedMessage(OmemoDevice userDevice, OmemoDevice contactsDevice, Date date) throws IOException {
|
||||
File lastMessageReceived = hierarchy.getLastMessageReceivedDatePath(userDevice, contactsDevice);
|
||||
writeLong(lastMessageReceived, date.getTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public Date getDateOfLastReceivedMessage(OmemoDevice userDevice, OmemoDevice contactsDevice) throws IOException {
|
||||
File lastMessageReceived = hierarchy.getLastMessageReceivedDatePath(userDevice, contactsDevice);
|
||||
Long date = readLong(lastMessageReceived);
|
||||
|
@ -138,12 +140,14 @@ public abstract class FileBasedOmemoStore<T_IdKeyPair, T_IdKey, T_PreKey, T_SigP
|
|||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public void setDateOfLastDeviceIdPublication(OmemoDevice userDevice, OmemoDevice contactsDevice, Date date) throws IOException {
|
||||
File lastDeviceIdPublished = hierarchy.getLastDeviceIdPublicationDatePath(userDevice, contactsDevice);
|
||||
writeLong(lastDeviceIdPublished, date.getTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public Date getDateOfLastDeviceIdPublication(OmemoDevice userDevice, OmemoDevice contactsDevice) throws IOException {
|
||||
File lastDeviceIdPublished = hierarchy.getLastDeviceIdPublicationDatePath(userDevice, contactsDevice);
|
||||
Long date = readLong(lastDeviceIdPublished);
|
||||
|
@ -151,12 +155,14 @@ public abstract class FileBasedOmemoStore<T_IdKeyPair, T_IdKey, T_PreKey, T_SigP
|
|||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public void setDateOfLastSignedPreKeyRenewal(OmemoDevice userDevice, Date date) throws IOException {
|
||||
File lastSignedPreKeyRenewal = hierarchy.getLastSignedPreKeyRenewal(userDevice);
|
||||
writeLong(lastSignedPreKeyRenewal, date.getTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
public Date getDateOfLastSignedPreKeyRenewal(OmemoDevice userDevice) throws IOException {
|
||||
File lastSignedPreKeyRenewal = hierarchy.getLastSignedPreKeyRenewal(userDevice);
|
||||
Long date = readLong(lastSignedPreKeyRenewal);
|
||||
|
@ -517,6 +523,7 @@ public abstract class FileBasedOmemoStore<T_IdKeyPair, T_IdKey, T_PreKey, T_SigP
|
|||
* Delete a directory with all subdirectories.
|
||||
* @param root directory to be deleted
|
||||
*/
|
||||
@SuppressWarnings("JdkObsolete")
|
||||
public static void deleteDirectory(File root) {
|
||||
File[] currList;
|
||||
Stack<File> stack = new Stack<>();
|
||||
|
|
|
@ -914,6 +914,7 @@ public abstract class OmemoService<T_IdKeyPair, T_IdKey, T_PreKey, T_SigPreKey,
|
|||
*
|
||||
* @throws IOException if an I/O error occurred.
|
||||
*/
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
private boolean shouldRotateSignedPreKey(OmemoDevice userDevice) throws IOException {
|
||||
if (!OmemoConfiguration.getRenewOldSignedPreKeys()) {
|
||||
return false;
|
||||
|
@ -965,6 +966,7 @@ public abstract class OmemoService<T_IdKeyPair, T_IdKey, T_PreKey, T_SigPreKey,
|
|||
*
|
||||
* @throws IOException if an I/O error occurred.
|
||||
*/
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
private OmemoCachedDeviceList removeStaleDevicesFromDeviceList(OmemoDevice userDevice,
|
||||
BareJid contact,
|
||||
OmemoCachedDeviceList contactsDeviceList,
|
||||
|
@ -1020,6 +1022,7 @@ public abstract class OmemoService<T_IdKeyPair, T_IdKey, T_PreKey, T_SigPreKey,
|
|||
*
|
||||
* @return true if the subject device is considered stale
|
||||
*/
|
||||
@SuppressWarnings("JavaUtilDate")
|
||||
static boolean isStale(OmemoDevice userDevice, OmemoDevice subject, Date lastReceipt, int maxAgeHours) {
|
||||
if (userDevice.equals(subject)) {
|
||||
return false;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue