From 69e220463ac7110b87beaa7a0e3e124f38cecacd Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Mon, 18 Sep 2023 21:11:04 -0700 Subject: [PATCH 1/2] Upgrade to androix fragment 1.6.1 ...yikes --- annotation/ksp/build.gradle | 6 ++++++ annotation/ksp/integrationtest/build.gradle | 10 ++++++++++ annotation/ksp/test/build.gradle | 10 ++++++++++ benchmark/build.gradle | 3 +++ build.gradle | 9 +++++++++ renovate.json | 4 ---- settings.gradle | 20 +++++++++++--------- 7 files changed, 49 insertions(+), 13 deletions(-) diff --git a/annotation/ksp/build.gradle b/annotation/ksp/build.gradle index febb5e62b4..66f4d6e2c4 100644 --- a/annotation/ksp/build.gradle +++ b/annotation/ksp/build.gradle @@ -12,3 +12,9 @@ dependencies { } apply from: "${rootProject.projectDir}/scripts/upload.gradle" + +kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } +} diff --git a/annotation/ksp/integrationtest/build.gradle b/annotation/ksp/integrationtest/build.gradle index 2454135cde..03408f94a1 100644 --- a/annotation/ksp/integrationtest/build.gradle +++ b/annotation/ksp/integrationtest/build.gradle @@ -23,6 +23,16 @@ android { targetSdk libs.versions.target.sdk.version.get() as int versionName VERSION_NAME as String } + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } +} + +kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } } dependencies { diff --git a/annotation/ksp/test/build.gradle b/annotation/ksp/test/build.gradle index c305c65a60..9ad8eb141c 100644 --- a/annotation/ksp/test/build.gradle +++ b/annotation/ksp/test/build.gradle @@ -12,6 +12,16 @@ android { targetSdk libs.versions.target.sdk.version.get() as int versionName VERSION_NAME as String } + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } +} + +kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } } dependencies { diff --git a/benchmark/build.gradle b/benchmark/build.gradle index b4962d4513..22a35eccce 100644 --- a/benchmark/build.gradle +++ b/benchmark/build.gradle @@ -20,6 +20,7 @@ android { versionName "1.0" testInstrumentationRunner 'androidx.benchmark.junit4.AndroidBenchmarkRunner' + multiDexEnabled true } buildTypes { @@ -33,6 +34,8 @@ android { } dependencies { + implementation libs.androidx.multidex + androidTestImplementation libs.androidx.test.runner androidTestImplementation libs.androidx.junit androidTestImplementation libs.junit diff --git a/build.gradle b/build.gradle index d2d5889865..e71ce474a4 100644 --- a/build.gradle +++ b/build.gradle @@ -122,6 +122,15 @@ subprojects { project -> } } + afterEvaluate { + if (project.plugins.hasPlugin("com.android.application")) { + project.dependencies { + // Hack around some version mismatches: https://stackoverflow.com/questions/75263047/duplicate-class-in-kotlin-android + implementation(platform(libs.kotlin.bom)) + } + } + } + tasks.withType(JavaCompile) { // gifencoder is a legacy project that has a ton of warnings and is basically never // modified, so we're not going to worry about cleaning it up. diff --git a/renovate.json b/renovate.json index 03d3193a27..1485a25c62 100644 --- a/renovate.json +++ b/renovate.json @@ -8,10 +8,6 @@ "matchUpdateTypes": ["minor", "patch", "pin", "digest"], "automerge": true, "automergeType": "branch" - }, - { - "matchPackageNames": ["androidx.fragment:fragment"], - "allowedVersions": "1.4.1" } ] } diff --git a/settings.gradle b/settings.gradle index a1688999cf..addb82c18e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -51,21 +51,22 @@ dependencyResolutionManagement { version('okhttp-min-sdk-version', '21') version('target-sdk-version', '32') version('pmd', '6.0.0') - version('kotlin-compiler-extension', '1.2.0') + // 1.5.3 requires Kotlin 1.9.x, which doesn't seem to be supported by the coroutines + // libraries: https://github.com/Kotlin/kotlinx.coroutines/issues/3812 + version('kotlin-compiler-extension', '1.4.8') // Versions for dependencies - version('compose', '1.5.0') + version('compose', '1.5.1') version('coroutines', '1.7.3') version('dagger', '2.47') version('errorprone', '2.18.0') - version('kotlin', '1.7.0') + version('kotlin', '1.8.22') version('mockito', '5.3.1') version('retrofit', '2.3.0') version('androidx-benchmark', '1.2.0-beta05') version('androidx-espresso', '3.5.1') - // Newer versions depend on different kotlin versions causing duplicate class paths: - version('androidx-fragment', '1.4.1') - version('ksp', '1.7.0-1.0.6') + version('androidx-fragment', '1.6.1') + version('ksp', '1.8.22-1.0.11') library('androidx-multidex', "androidx.multidex:multidex:2.0.1") library('autoservice', 'com.google.auto.service:auto-service:1.0-rc3') @@ -74,10 +75,10 @@ dependencyResolutionManagement { library('androidx-cardview', 'androidx.cardview:cardview:1.0.0') library('androidx-core', 'androidx.core:core:1.6.0') library('androidx-annotation', 'androidx.annotation:annotation:1.6.0') - library('androidx-appcompat', 'androidx.appcompat:appcompat:1.4.0') + library('androidx-appcompat', 'androidx.appcompat:appcompat:1.6.1') library('androidx-benchmark.gradle', 'androidx.benchmark', 'benchmark-gradle-plugin').versionRef('androidx-benchmark') library('androidx-benchmark.junit', 'androidx.benchmark', 'benchmark-junit4').versionRef('androidx-benchmark') - library('androidx-core.ktx', 'androidx.core:core-ktx:1.8.0') + library('androidx-core.ktx', 'androidx.core:core-ktx:1.12.0') library('androidx-espresso', 'androidx.test.espresso', 'espresso-core').versionRef('androidx-espresso') library('androidx-espresso.idling', 'androidx.test.espresso.idling', 'idling-concurrent').versionRef('androidx-espresso') library('androidx-exifinterface', 'androidx.exifinterface:exifinterface:1.3.6') @@ -121,7 +122,8 @@ dependencyResolutionManagement { library('kotlin-junit', 'org.jetbrains.kotlin', 'kotlin-test-junit').versionRef('kotlin') library('kotlin-jdk7', 'org.jetbrains.kotlin', 'kotlin-stdlib-jdk7').versionRef('kotlin') library('kotlin-gradle', 'org.jetbrains.kotlin', 'kotlin-gradle-plugin').versionRef('kotlin') - library('kotlin-test', 'org.jetbrains.kotlin:kotlin-test:1.7.0') + library('kotlin-test', 'org.jetbrains.kotlin', 'kotlin-test').versionRef('kotlin') + library('kotlin-bom', 'org.jetbrains.kotlin', 'kotlin-bom').versionRef('kotlin') library('kotlinpoet', 'com.squareup:kotlinpoet:1.12.0') library('ksp', 'com.google.devtools.ksp', 'symbol-processing-api').versionRef('ksp') library('ksp-autoservice', 'dev.zacsweers.autoservice:auto-service-ksp:1.0.0') From bd2a519d7d8095a3a0e307486ddd6ed9bbb84e65 Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Tue, 19 Sep 2023 12:09:30 -0700 Subject: [PATCH 2/2] Update Checkstyle to 8.45.1 --- .../annotation/compiler/RequestOptionsGenerator.java | 1 + build.gradle | 2 +- checkstyle.xml | 4 +++- .../glide/integration/cronet/BufferQueue.java | 1 + .../sqljournaldiskcache/JournaledLruDiskCache.java | 1 + .../bumptech/glide/load/engine/DiskCacheStrategy.java | 1 + .../load/engine/bitmap_recycle/LruArrayPool.java | 4 ++-- .../load/engine/bitmap_recycle/LruBitmapPool.java | 11 ++++++----- .../cache/ExternalPreferredCacheDiskCacheFactory.java | 4 ++-- .../resource/bitmap/DefaultImageHeaderParser.java | 2 +- .../load/resource/drawable/AnimatedImageDecoder.java | 1 + .../bumptech/glide/gifdecoder/GifHeaderParser.java | 2 +- .../bumptech/glide/gifdecoder/StandardGifDecoder.java | 5 +++-- 13 files changed, 24 insertions(+), 15 deletions(-) diff --git a/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java b/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java index 5e7e027b31..fc1d70ed34 100644 --- a/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java +++ b/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java @@ -316,6 +316,7 @@ private MethodAndStaticVar generateStaticMethodEquivalentForRequestOptionsStatic return new MethodAndStaticVar(methodSpecBuilder.build(), requiredStaticField); } + @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability private static boolean memoizeStaticMethodFromArguments(ExecutableElement staticMethod) { return staticMethod.getParameters().isEmpty() || (staticMethod.getParameters().size() == 1 diff --git a/build.gradle b/build.gradle index e71ce474a4..4579dc82f0 100644 --- a/build.gradle +++ b/build.gradle @@ -169,7 +169,7 @@ subprojects { project -> apply plugin: 'checkstyle' checkstyle { - toolVersion = '8.5' + toolVersion = '8.45.1' } checkstyle { diff --git a/checkstyle.xml b/checkstyle.xml index d8a1c0ee5b..e6d04238fd 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -30,8 +30,10 @@ - + + + diff --git a/integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/BufferQueue.java b/integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/BufferQueue.java index c320dc7723..8a43d5486d 100644 --- a/integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/BufferQueue.java +++ b/integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/BufferQueue.java @@ -62,6 +62,7 @@ public ByteBuffer getFirstBuffer(UrlResponseInfo info) { return ByteBuffer.allocateDirect((int) Math.min(bufferSizeHeuristic(info), 524288)); } + @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability private static long bufferSizeHeuristic(UrlResponseInfo info) { final Map> headers = info.getAllHeaders(); if (headers.containsKey(CONTENT_LENGTH)) { diff --git a/integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/JournaledLruDiskCache.java b/integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/JournaledLruDiskCache.java index 9ef2a76a81..e966360077 100644 --- a/integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/JournaledLruDiskCache.java +++ b/integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/JournaledLruDiskCache.java @@ -120,6 +120,7 @@ private static Looper getBackgroundLooper() { return workThread.getLooper(); } + @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability private void openIfNotOpen() { if (!isOpen) { synchronized (this) { diff --git a/library/src/main/java/com/bumptech/glide/load/engine/DiskCacheStrategy.java b/library/src/main/java/com/bumptech/glide/load/engine/DiskCacheStrategy.java index b5b1379caf..3100826c91 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/DiskCacheStrategy.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/DiskCacheStrategy.java @@ -124,6 +124,7 @@ public boolean isDataCacheable(DataSource dataSource) { return dataSource == DataSource.REMOTE; } + @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability @Override public boolean isResourceCacheable( boolean isFromAlternateCacheKey, DataSource dataSource, EncodeStrategy encodeStrategy) { diff --git a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruArrayPool.java b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruArrayPool.java index 874f3b02b8..c1d932acde 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruArrayPool.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruArrayPool.java @@ -126,7 +126,7 @@ private boolean mayFillRequest(int requestedSize, Integer actualSize) { } private boolean isNoMoreThanHalfFull() { - return currentSize == 0 || (maxSize / currentSize >= 2); + return currentSize == 0 || maxSize / currentSize >= 2; } @Override @@ -135,7 +135,7 @@ public synchronized void clearMemory() { } @Override - public synchronized void trimMemory(int level) { + public synchronized void trimMemory(int level){ if (level >= android.content.ComponentCallbacks2.TRIM_MEMORY_BACKGROUND) { clearMemory(); } else if (level >= android.content.ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN diff --git a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java index 8ebf35628d..17f96f518c 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/bitmap_recycle/LruBitmapPool.java @@ -239,18 +239,19 @@ public void clearMemory() { trimToSize(0); } + @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability @SuppressLint("InlinedApi") @Override public void trimMemory(int level) { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "trimMemory, level=" + level); } - if ((level >= ComponentCallbacks2.TRIM_MEMORY_BACKGROUND) - || ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) - && (level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN))) { + if (level >= ComponentCallbacks2.TRIM_MEMORY_BACKGROUND + || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + && level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN)) { clearMemory(); - } else if ((level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) - || (level == ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL)) { + } else if (level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN + || level == ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL) { trimToSize(getMaxSize() / 2); } } diff --git a/library/src/main/java/com/bumptech/glide/load/engine/cache/ExternalPreferredCacheDiskCacheFactory.java b/library/src/main/java/com/bumptech/glide/load/engine/cache/ExternalPreferredCacheDiskCacheFactory.java index 1ac0a82200..db3f8ff177 100644 --- a/library/src/main/java/com/bumptech/glide/load/engine/cache/ExternalPreferredCacheDiskCacheFactory.java +++ b/library/src/main/java/com/bumptech/glide/load/engine/cache/ExternalPreferredCacheDiskCacheFactory.java @@ -48,14 +48,14 @@ public File getCacheDirectory() { // Already used internal cache, so keep using that one, // thus avoiding using both external and internal with transient errors. - if ((null != internalCacheDirectory) && internalCacheDirectory.exists()) { + if (internalCacheDirectory != null && internalCacheDirectory.exists()) { return internalCacheDirectory; } File cacheDirectory = context.getExternalCacheDir(); // Shared storage is not available. - if ((cacheDirectory == null) || (!cacheDirectory.canWrite())) { + if (cacheDirectory == null || !cacheDirectory.canWrite()) { return internalCacheDirectory; } if (diskCacheName != null) { diff --git a/library/src/main/java/com/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser.java b/library/src/main/java/com/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser.java index 458de79181..041319e11b 100644 --- a/library/src/main/java/com/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser.java +++ b/library/src/main/java/com/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser.java @@ -580,7 +580,7 @@ public int read(byte[] buffer, int byteCount) throws IOException { int numBytesRead = 0; int lastReadResult = 0; while (numBytesRead < byteCount - && ((lastReadResult = is.read(buffer, numBytesRead, byteCount - numBytesRead)) != -1)) { + && (lastReadResult = is.read(buffer, numBytesRead, byteCount - numBytesRead)) != -1) { numBytesRead += lastReadResult; } diff --git a/library/src/main/java/com/bumptech/glide/load/resource/drawable/AnimatedImageDecoder.java b/library/src/main/java/com/bumptech/glide/load/resource/drawable/AnimatedImageDecoder.java index ec642ce0ec..2c396e7e65 100644 --- a/library/src/main/java/com/bumptech/glide/load/resource/drawable/AnimatedImageDecoder.java +++ b/library/src/main/java/com/bumptech/glide/load/resource/drawable/AnimatedImageDecoder.java @@ -60,6 +60,7 @@ boolean handles(InputStream is) throws IOException { return isHandled(ImageHeaderParserUtils.getType(imageHeaderParsers, is, arrayPool)); } + @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability private boolean isHandled(ImageType imageType) { return imageType == ImageType.ANIMATED_WEBP || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && imageType == ImageType.ANIMATED_AVIF); diff --git a/third_party/gif_decoder/src/main/java/com/bumptech/glide/gifdecoder/GifHeaderParser.java b/third_party/gif_decoder/src/main/java/com/bumptech/glide/gifdecoder/GifHeaderParser.java index c6e24da678..a26d527f1d 100644 --- a/third_party/gif_decoder/src/main/java/com/bumptech/glide/gifdecoder/GifHeaderParser.java +++ b/third_party/gif_decoder/src/main/java/com/bumptech/glide/gifdecoder/GifHeaderParser.java @@ -355,7 +355,7 @@ private void readNetscapeExt() { int b2 = ((int) block[2]) & MASK_INT_LOWEST_BYTE; header.loopCount = (b2 << 8) | b1; } - } while ((blockSize > 0) && !err()); + } while (blockSize > 0 && !err()); } diff --git a/third_party/gif_decoder/src/main/java/com/bumptech/glide/gifdecoder/StandardGifDecoder.java b/third_party/gif_decoder/src/main/java/com/bumptech/glide/gifdecoder/StandardGifDecoder.java index 7655723103..ad9ea6e061 100644 --- a/third_party/gif_decoder/src/main/java/com/bumptech/glide/gifdecoder/StandardGifDecoder.java +++ b/third_party/gif_decoder/src/main/java/com/bumptech/glide/gifdecoder/StandardGifDecoder.java @@ -168,7 +168,7 @@ public void advance() { @Override public int getDelay(int n) { int delay = -1; - if ((n >= 0) && (n < header.frameCount)) { + if (n >= 0 && n < header.frameCount) { delay = header.frames.get(n).delay; } return delay; @@ -499,6 +499,7 @@ private Bitmap setPixels(GifFrame currentFrame, GifFrame previousFrame) { return result; } + @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability private void copyIntoScratchFast(GifFrame currentFrame) { int[] dest = mainScratch; int downsampledIH = currentFrame.ih; @@ -807,7 +808,7 @@ private void decodeBitmapData(GifFrame frame) { prefix[available] = (short) oldCode; suffix[available] = (byte) first; ++available; - if (((available & codeMask) == 0) && (available < MAX_STACK_SIZE)) { + if ((available & codeMask) == 0 && available < MAX_STACK_SIZE) { ++codeSize; codeMask += available; }