Skip to content

Commit 414445c

Browse files
committed
fix: add compat class for java.lang.ClassValue
Signed-off-by: Akash Yadav <akashyadav@appdevforall.org>
1 parent 853aa4b commit 414445c

4 files changed

Lines changed: 92 additions & 9 deletions

patches/0006-feat-add-android-shims-module.patch

Lines changed: 88 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
From c1e8f17846cb69ef2a3768dee7cfadb40858d279 Mon Sep 17 00:00:00 2001
1+
From c2a2bf2cf1a84c4f4c98eaec369fa425b45fd00e Mon Sep 17 00:00:00 2001
22
From: Akash Yadav <akashyadav@appdevforall.org>
33
Date: Thu, 26 Mar 2026 14:35:40 +0530
44
Subject: [PATCH 6/9] feat: add android-shims module
@@ -12,7 +12,7 @@ Signed-off-by: Akash Yadav <akashyadav@appdevforall.org>
1212
---
1313
build.gradle.kts | 1 +
1414
gradle/verification-metadata.xml | 5 +
15-
.../build.gradle.kts | 5 +-
15+
.../build.gradle.kts | 6 +-
1616
.../android-shims/build.gradle.kts | 80 ++++++++++
1717
.../benmanes/caffeine/base/UnsafeAccess.java | 52 +++++++
1818
.../benmanes/caffeine/cache/UnsafeAccess.java | 85 ++++++++++
@@ -21,14 +21,15 @@ Signed-off-by: Akash Yadav <akashyadav@appdevforall.org>
2121
.../com/intellij/util/containers/Unsafe.java | 138 +++++++++++++++++
2222
.../java/com/android/java/awt/Component.java | 6 +
2323
.../java/com/android/java/awt/Graphics.java | 101 ++++++++++++
24+
.../com/android/java/lang/ClassValue.java | 74 +++++++++
2425
.../java/com/android/javax/swing/Icon.java | 65 ++++++++
2526
.../android/javax/swing/SwingUtilities.java | 145 ++++++++++++++++++
2627
.../openapi/util/LowMemoryWatcherAccess.java | 8 +
2728
.../src/main/java/gnu/trove/Equality.java | 53 +++++++
2829
.../gnu/trove/TObjectHashingStrategy.java | 64 ++++++++
2930
.../internal/intellij/IntellijCoroutines.kt | 29 ++++
3031
settings.gradle | 3 +-
31-
18 files changed, 981 insertions(+), 2 deletions(-)
32+
19 files changed, 1056 insertions(+), 2 deletions(-)
3233
create mode 100644 prepare/ide-plugin-dependencies/android-shims/build.gradle.kts
3334
create mode 100644 prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/com/github/benmanes/caffeine/base/UnsafeAccess.java
3435
create mode 100644 prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/com/github/benmanes/caffeine/cache/UnsafeAccess.java
@@ -37,6 +38,7 @@ Signed-off-by: Akash Yadav <akashyadav@appdevforall.org>
3738
create mode 100644 prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/com/intellij/util/containers/Unsafe.java
3839
create mode 100644 prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/java/awt/Component.java
3940
create mode 100644 prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/java/awt/Graphics.java
41+
create mode 100644 prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/java/lang/ClassValue.java
4042
create mode 100644 prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/javax/swing/Icon.java
4143
create mode 100644 prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/javax/swing/SwingUtilities.java
4244
create mode 100644 prepare/ide-plugin-dependencies/android-shims/src/main/java/com/intellij/openapi/util/LowMemoryWatcherAccess.java
@@ -73,16 +75,17 @@ index 49b8f09b6ab5..3dcb79b69065 100644
7375
<artifact name="lz4-java-1.7.1.jar">
7476
<md5 value="d56d86823662a663a4d614dd5e117eff" origin="Generated by Gradle"/>
7577
diff --git a/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts b/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts
76-
index a1dffb3abc9f..08f359c3060b 100644
78+
index a1dffb3abc9f..1226e3714ed1 100644
7779
--- a/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts
7880
+++ b/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts
79-
@@ -59,7 +59,10 @@ val classesToReplaceInComIntellij = mapOf(
81+
@@ -59,7 +59,11 @@ val classesToReplaceInComIntellij = mapOf(
8082
val classesToReplace = mapOf(
8183
"com.github.benmanes.caffeine.base.UnsafeAccess" to "com.android.",
8284
"com.github.benmanes.caffeine.cache.UnsafeAccess" to "com.android.",
8385
- "javax.swing.SwingUtilities" to "com.android."
8486
+ "java.awt.Component" to "com.android.",
8587
+ "java.awt.Graphics" to "com.android.",
88+
+ "java.lang.ClassValue" to "com.android.",
8689
+ "javax.swing.Icon" to "com.android.",
8790
+ "javax.swing.SwingUtilities" to "com.android.",
8891
)
@@ -744,6 +747,86 @@ index 000000000000..70dd08df8208
744747
+ // COTG-changed: stub class
745748
+}
746749
\ No newline at end of file
750+
diff --git a/prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/java/lang/ClassValue.java b/prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/java/lang/ClassValue.java
751+
new file mode 100644
752+
index 000000000000..b8d51a16101e
753+
--- /dev/null
754+
+++ b/prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/java/lang/ClassValue.java
755+
@@ -0,0 +1,74 @@
756+
+package com.android.java.lang;
757+
+
758+
+import android.os.Build;
759+
+import org.jetbrains.annotations.NotNull;
760+
+
761+
+import java.util.Map;
762+
+import java.util.concurrent.ConcurrentHashMap;
763+
+import java.util.function.Function;
764+
+
765+
+public abstract class ClassValue<T> {
766+
+
767+
+ private static final boolean HAS_CLASS_VALUE = Build.VERSION.SDK_INT >= 34;
768+
+ private final Impl<T> impl = HAS_CLASS_VALUE ? new Api34Impl<>(this::computeValue) : new Api33Impl<>(this::computeValue);
769+
+
770+
+ protected ClassValue() {
771+
+ }
772+
+
773+
+ protected abstract T computeValue(Class<?> type);
774+
+
775+
+ public T get(Class<?> type) {
776+
+ return impl.get(type);
777+
+ }
778+
+
779+
+ public void remove(Class<?> type) {
780+
+ impl.remove(type);
781+
+ }
782+
+
783+
+ private interface Impl<T> {
784+
+ T get(Class<?> type);
785+
+ void remove(Class<?> type);
786+
+ }
787+
+
788+
+ private static class Api34Impl<T> implements Impl<T> {
789+
+ private final java.lang.ClassValue<T> delegate;
790+
+
791+
+ private Api34Impl(Function<Class<?>, T> compute) {
792+
+ this.delegate = new java.lang.ClassValue<T>() {
793+
+ @Override
794+
+ protected T computeValue(@NotNull Class<?> type) {
795+
+ return compute.apply(type);
796+
+ }
797+
+ };
798+
+ }
799+
+
800+
+ @Override
801+
+ public T get(Class<?> type) {
802+
+ return delegate.get(type);
803+
+ }
804+
+
805+
+ @Override
806+
+ public void remove(Class<?> type) {
807+
+ delegate.remove(type);
808+
+ }
809+
+ }
810+
+
811+
+ private static class Api33Impl<T> implements Impl<T> {
812+
+ private final Map<Class<?>, T> cache = new ConcurrentHashMap<>();
813+
+ private final Function<Class<?>, T> compute;
814+
+
815+
+ private Api33Impl(Function<Class<?>, T> compute) {
816+
+ this.compute = compute;
817+
+ }
818+
+
819+
+ @Override
820+
+ public T get(Class<?> type) {
821+
+ return cache.computeIfAbsent(type, compute);
822+
+ }
823+
+
824+
+ @Override
825+
+ public void remove(Class<?> type) {
826+
+ cache.remove(type);
827+
+ }
828+
+ }
829+
+}
747830
diff --git a/prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/javax/swing/Icon.java b/prepare/ide-plugin-dependencies/android-shims/src/main/java/com/android/javax/swing/Icon.java
748831
new file mode 100644
749832
index 000000000000..928d914a0652

patches/0007-fix-use-shimmed-SwingUtilities-directly-to-check-for.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
From aa2c013536b133a4056cb019cd88fba56e1b7657 Mon Sep 17 00:00:00 2001
1+
From 8ed30215adbf2650d3abe20a5a3b07c3a4e96fc5 Mon Sep 17 00:00:00 2001
22
From: Akash Yadav <akashyadav@appdevforall.org>
33
Date: Thu, 26 Mar 2026 14:37:27 +0530
44
Subject: [PATCH 7/9] fix: use shimmed SwingUtilities directly to check for

patches/0008-fix-add-util-diff-dependency.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
From eeb0336d36ba56cca9de21e9fbe4948d0e4af69c Mon Sep 17 00:00:00 2001
1+
From 071f6cdb555ecd044ac94e8c2f092c3c788758be Mon Sep 17 00:00:00 2001
22
From: Akash Yadav <akashyadav@appdevforall.org>
33
Date: Tue, 14 Apr 2026 01:04:17 +0530
44
Subject: [PATCH 8/9] fix: add util-diff dependency
@@ -9,7 +9,7 @@ Signed-off-by: Akash Yadav <akashyadav@appdevforall.org>
99
1 file changed, 1 insertion(+)
1010

1111
diff --git a/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts b/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts
12-
index 08f359c3060b..4c3f412ec75c 100644
12+
index 1226e3714ed1..e7d529262e3d 100644
1313
--- a/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts
1414
+++ b/prepare/ide-plugin-dependencies/analysis-api-standalone-embeddable-for-ide/build.gradle.kts
1515
@@ -27,6 +27,7 @@ dependencies {

patches/0009-fix-make-KaResolutionProvider-and-impl-inheritable.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
From de6fda3925c26ed67b16bc20c7dfdb3659607a8b Mon Sep 17 00:00:00 2001
1+
From 6bd4ed2634817e95b7135426453c10d9a997c635 Mon Sep 17 00:00:00 2001
22
From: Akash Yadav <akashyadav@appdevforall.org>
33
Date: Mon, 4 May 2026 14:24:33 +0530
44
Subject: [PATCH 9/9] fix: make KaResolutionProvider and impl inheritable

0 commit comments

Comments
 (0)