diff --git a/changelog/unreleased/PR#4604-update-google-errorprone.yml b/changelog/unreleased/PR#4604-update-google-errorprone.yml new file mode 100644 index 000000000000..27c4368717d4 --- /dev/null +++ b/changelog/unreleased/PR#4604-update-google-errorprone.yml @@ -0,0 +1,8 @@ +# See https://github.com/apache/solr/blob/main/dev-docs/changelog.adoc +title: Update com.google.errorprone to 2.50.0 and suppress new bug patterns (ReferenceEquality, JdkObsolete, NotJavadoc, TypeParameterQualifier) +type: other +authors: + - name: Jan Høydahl +links: +- name: PR#4604 + url: https://github.com/apache/solr/pull/4604 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aa578401f587..a45584dee732 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -98,7 +98,7 @@ google-api-grpc-proto = "2.61.1" # @keep for version alignment google-autovalue = "1.11.1" google-cloud-bom = "0.265.0" -google-errorprone = "2.41.0" +google-errorprone = "2.50.0" # @keep for version alignment google-gson = "2.14.0" google-guava = "33.6.0-jre" diff --git a/solr/api/gradle.lockfile b/solr/api/gradle.lockfile index 1cc3f448d9b5..b36811a79eef 100644 --- a/solr/api/gradle.lockfile +++ b/solr/api/gradle.lockfile @@ -21,12 +21,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=jarValidation,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/benchmark/gradle.lockfile b/solr/benchmark/gradle.lockfile index 070a606d39bc..215931aa5aa1 100644 --- a/solr/benchmark/gradle.lockfile +++ b/solr/benchmark/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/core/gradle.lockfile b/solr/core/gradle.lockfile index 1562fcbdc472..8ed2e6d7a888 100644 --- a/solr/core/gradle.lockfile +++ b/solr/core/gradle.lockfile @@ -20,12 +20,11 @@ com.github.stephenc.jcip:jcip-annotations:1.0-1=compileClasspath,compileClasspat com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,compileClasspathCopy,jarValidation,runtimeClasspath,runtimeClasspathCopy,runtimeLibs,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,runtimeLibs,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,runtimeLibs,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,runtimeLibs,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,runtimeLibs,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy diff --git a/solr/core/src/java/org/apache/solr/cli/ExportTool.java b/solr/core/src/java/org/apache/solr/cli/ExportTool.java index 9fb9a23e3d2c..0ab4f0b89fef 100644 --- a/solr/core/src/java/org/apache/solr/cli/ExportTool.java +++ b/solr/core/src/java/org/apache/solr/cli/ExportTool.java @@ -594,6 +594,8 @@ private void addProducers(Map m) { } } + // EOFDOC is a unique sentinel instance, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") private void addConsumer(CountDownLatch consumerlatch) { consumerThreadpool.execute( () -> { diff --git a/solr/core/src/java/org/apache/solr/cloud/DistributedClusterStateUpdater.java b/solr/core/src/java/org/apache/solr/cloud/DistributedClusterStateUpdater.java index 3c4c152bdcf0..3405d5366d33 100644 --- a/solr/core/src/java/org/apache/solr/cloud/DistributedClusterStateUpdater.java +++ b/solr/core/src/java/org/apache/solr/cloud/DistributedClusterStateUpdater.java @@ -754,7 +754,9 @@ public boolean isCollectionCreation() { return isCollectionCreation; } + // ZkStateWriter.NO_OP is a unique sentinel, so identity comparison against it is intentional @Override + @SuppressWarnings("ReferenceEquality") public void computeUpdates(ClusterState clusterState, SolrZkClient client) { boolean hasJsonUpdates = false; List perReplicaStateOps = new ArrayList<>(); @@ -911,7 +913,9 @@ public boolean isCollectionCreation() { return false; } + // ZkStateWriter.NO_OP is a unique sentinel, so identity comparison against it is intentional @Override + @SuppressWarnings("ReferenceEquality") public void computeUpdates(ClusterState clusterState, SolrZkClient client) { final DocCollection docCollection = clusterState.getCollectionOrNull(collectionName); Optional result = diff --git a/solr/core/src/java/org/apache/solr/cloud/LockTree.java b/solr/core/src/java/org/apache/solr/cloud/LockTree.java index 6bb432abd8e8..44d74a57bb6c 100644 --- a/solr/core/src/java/org/apache/solr/cloud/LockTree.java +++ b/solr/core/src/java/org/apache/solr/cloud/LockTree.java @@ -214,6 +214,8 @@ boolean isLocked() { return false; } + // checks that the exact lock instance held by this node is the one being released + @SuppressWarnings("ReferenceEquality") boolean unlock(LockImpl lockObject) { if (--refCount > 0) { return false; diff --git a/solr/core/src/java/org/apache/solr/cloud/Overseer.java b/solr/core/src/java/org/apache/solr/cloud/Overseer.java index cc8e65537c5f..d2c3520f1e6a 100644 --- a/solr/core/src/java/org/apache/solr/cloud/Overseer.java +++ b/solr/core/src/java/org/apache/solr/cloud/Overseer.java @@ -782,9 +782,9 @@ public synchronized void start(String id) { assert ObjectReleaseTracker.track(this); } - /** Start {@link ClusterSingleton} plugins when we become the leader. */ + // Start ClusterSingleton plugins when we become the leader. - /** Stop {@link ClusterSingleton} plugins when we lose leadership. */ + // Stop ClusterSingleton plugins when we lose leadership. public Stats getStats() { return stats; } diff --git a/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java b/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java index a6998fe38cb5..7fbffd960d91 100644 --- a/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java +++ b/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java @@ -64,6 +64,8 @@ public ReplicateFromLeader(CoreContainer cc, String coreName) { * @param switchTransactionLog if true, ReplicationHandler will rotate the transaction log once * the replication is done */ + // INDEX_FETCH_SUCCESS is a unique sentinel instance, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public void startReplication(boolean switchTransactionLog) { try (SolrCore core = cc.getCore(coreName)) { if (core == null) { diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java index c787fdc80ce1..c543992cf714 100644 --- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java +++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java @@ -79,6 +79,8 @@ public class CategoryRoutedAlias extends RoutedAlias { this.mustMatch = mustMatch == null ? null : compileMustMatch(mustMatch); } + // Aliases is an immutable snapshot; identity comparison detects whether ZK handed us a new one + @SuppressWarnings("ReferenceEquality") @Override public boolean updateParsedCollectionAliases(ZkStateReader zkStateReader, boolean contextualize) { final Aliases aliases = diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/DimensionalRoutedAlias.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/DimensionalRoutedAlias.java index 0b2cb49678c2..5e4bc3124912 100644 --- a/solr/core/src/java/org/apache/solr/cloud/api/collections/DimensionalRoutedAlias.java +++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/DimensionalRoutedAlias.java @@ -211,6 +211,8 @@ protected String getHeadCollectionIfOrdered(AddUpdateCommand cmd) { * @param targetCol the collection for which a document is destined. * @return A list of actions across the DRA. */ + // sourceAlias is compared against the very dimension instance it came from; identity intended + @SuppressWarnings("ReferenceEquality") @Override protected List calculateActions(String targetCol) { String[] routeValues = SEP_MATCHER.split(targetCol); diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/TimeRoutedAlias.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/TimeRoutedAlias.java index 8139956116e6..7479d65d062d 100644 --- a/solr/core/src/java/org/apache/solr/cloud/api/collections/TimeRoutedAlias.java +++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/TimeRoutedAlias.java @@ -263,7 +263,9 @@ private static void checkMillis(Instant date) { } } + // Aliases is immutable and replaced wholesale on change, so identity comparison detects updates @Override + @SuppressWarnings("ReferenceEquality") public boolean updateParsedCollectionAliases(ZkStateReader zkStateReader, boolean contextualize) { final Aliases aliases = zkStateReader.getAliases(); if (this.parsedCollectionsAliases != aliases) { diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java index 8059a2b16b6d..3193201cc9de 100644 --- a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java +++ b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java @@ -129,6 +129,8 @@ public void updateClusterState(Function fun) { * a {@link org.apache.zookeeper.KeeperException.BadVersionException} this instance becomes * unusable and must be discarded */ + // NO_OP is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") public ClusterState enqueueUpdate( ClusterState prevState, List cmds, ZkWriteCallback callback) throws IllegalStateException, Exception { @@ -189,6 +191,8 @@ public ClusterState enqueueUpdate( return clusterState; } + // NO_OP is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") private boolean isNoOps(List cmds) { for (ZkWriteCommand cmd : cmds) { if (cmd != NO_OP) return false; @@ -229,6 +233,9 @@ public ClusterState writePendingUpdates() throws KeeperException, InterruptedExc * @throws KeeperException if any ZooKeeper operation results in an error * @throws InterruptedException if the current thread is interrupted */ + // Identity comparison of the updates map against this.updates is intentional: it detects + // whether the caller asked to flush all pending updates rather than a specific subset + @SuppressWarnings("ReferenceEquality") public ClusterState writePendingUpdates( Map updates, boolean resetPendingUpdateCounters) throws IllegalStateException, KeeperException, InterruptedException { diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkWriteCommand.java b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkWriteCommand.java index f2d5466f760c..ed19e0f975f3 100644 --- a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkWriteCommand.java +++ b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkWriteCommand.java @@ -48,7 +48,9 @@ public ZkWriteCommand(String name, DocCollection collection) { this(name, collection, null, true); } + // NO_OP is a unique sentinel, so identity comparison against it is intentional @Override + @SuppressWarnings("ReferenceEquality") public String toString() { return getClass().getSimpleName() + ": " + (this == NO_OP ? "no-op" : name + "=" + collection); } diff --git a/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java index 8b943b7dc791..7357c2f137f5 100644 --- a/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java +++ b/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java @@ -223,6 +223,8 @@ private void removeFromCache(CacheValue v) { // be sure the method is called with the sync lock on this object // returns true if we closed the cacheValue, false if it will be closed later + // CacheValue entries are cached per instance, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") private boolean closeCacheValue(CacheValue cacheValue, Set deferRemove) { log.debug("looking to close {} {}", cacheValue.path, cacheValue.closeEntries); List listeners = closeListeners.remove(cacheValue.directory); @@ -300,6 +302,8 @@ private static Iterable sorted(Set vals) { return vals.stream().sorted((a, b) -> b.path.compareTo(a.path)).collect(Collectors.toList()); } + // CacheValue entries are cached per instance, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") private boolean maybeDeferClose(CacheValue maybeDefer) { assert maybeDefer.deleteOnClose; for (CacheValue maybeChildPath : byPathCache.values()) { @@ -381,6 +385,8 @@ public boolean exists(String path) throws IOException { * java.lang.String, boolean) */ @Override + // checking whether filterDirectory() returned the same instance is intentional + @SuppressWarnings("ReferenceEquality") public final Directory get(String path, DirContext dirContext, String rawLockType) throws IOException { String fullPath = normalize(path); diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java index 186e319eae89..0a867cdb603c 100644 --- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java +++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java @@ -1433,6 +1433,8 @@ public CoreSorter getCoreSorter() { return coreSorter; } + // checking whether putCore() returned the same core instance is intentional + @SuppressWarnings("ReferenceEquality") protected SolrCore registerCore( CoreDescriptor cd, SolrCore core, boolean registerInZk, boolean skipRecovery) { if (core == null) { diff --git a/solr/core/src/java/org/apache/solr/core/PluginBag.java b/solr/core/src/java/org/apache/solr/core/PluginBag.java index 30bb8435214f..00da7ca58f43 100644 --- a/solr/core/src/java/org/apache/solr/core/PluginBag.java +++ b/solr/core/src/java/org/apache/solr/core/PluginBag.java @@ -229,7 +229,8 @@ public T put(String name, T plugin) { return old == null ? null : old.get(); } - @SuppressWarnings({"unchecked"}) + // checking whether the registry already held this exact plugin instance is intentional + @SuppressWarnings({"unchecked", "ReferenceEquality"}) public PluginHolder put(String name, PluginHolder plugin) { Boolean registerApi = null; // i.e. register for V2 Boolean disableV1 = null; // i.e. do *not* register for v1 diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java index 5f7e1f268dc6..b6d57ac1718e 100644 --- a/solr/core/src/java/org/apache/solr/core/SolrCore.java +++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java @@ -2316,6 +2316,8 @@ public RefCounted getSearcher( * *

This method acquires openSearcherLock - do not call with searchLock held! */ + // comparing schema instances detects a schema reload, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public RefCounted openNewSearcher( boolean updateHandlerReopens, boolean realtime) { if (isClosed()) { // catch some errors quicker @@ -2532,6 +2534,9 @@ public RefCounted openNewSearcher( * SolrIndexSearcher}. */ // TODO waitSearcher should be an AtomicReference or something that is a more clear API + // comparing searcher instances detects whether the underlying searcher changed, so identity + // comparison is intentional + @SuppressWarnings("ReferenceEquality") public RefCounted getSearcher( boolean forceNew, boolean returnSearcher, @@ -2818,6 +2823,8 @@ public boolean isReloaded() { // // onDeckSearchers will also be decremented (it should have been incremented // as a result of opening a new searcher). + // detecting re-registration of the same searcher holder instance is intentional + @SuppressWarnings("ReferenceEquality") private void registerSearcher(RefCounted newSearcherHolder) { synchronized (searcherLock) { try { diff --git a/solr/core/src/java/org/apache/solr/core/SolrPaths.java b/solr/core/src/java/org/apache/solr/core/SolrPaths.java index dc2c245eada1..af960a0a5c3d 100644 --- a/solr/core/src/java/org/apache/solr/core/SolrPaths.java +++ b/solr/core/src/java/org/apache/solr/core/SolrPaths.java @@ -123,6 +123,8 @@ public AllowPathBuilder addPath(String path) { * Adds an allowed path. Detects "_ALL_" which means all paths are allowed. Does not detect "*" * (not supported as a {@link Path} on Windows), see {@link #addPath(String)}. */ + // ALL_PATHS is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") public AllowPathBuilder addPath(Path path) { if (path == null) { return this; diff --git a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java index 456106d0c877..7e835ddfebe8 100644 --- a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java +++ b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java @@ -216,6 +216,8 @@ public SolrResourceLoader(Path instanceDir, ClassLoader parent) { * * @param urls the URLs of files to add */ + // checking whether addURLsToClassLoader() returned the same instance is intentional + @SuppressWarnings("ReferenceEquality") synchronized void addToClassLoader(List urls) { URLClassLoader newLoader = addURLsToClassLoader(classLoader, urls); if (newLoader == classLoader) { @@ -484,6 +486,9 @@ public Class findClass(String cname, Class expectedType) { * @param subpackages the packages to be tried if the cname starts with solr. * @return the loaded class. An exception is thrown if it fails */ + // comparing against the default `packages` array and the webapp classloader by identity is + // intentional + @SuppressWarnings("ReferenceEquality") public Class findClass( String cname, Class expectedType, String... subpackages) { if (subpackages == null || subpackages.length == 0 || subpackages == packages) { @@ -695,6 +700,8 @@ public boolean addToCoreAware(T obj) { } } + // enforcing that the loader stays bound to the same SolrConfig instance is intentional + @SuppressWarnings("ReferenceEquality") protected final void setSolrConfig(SolrConfig config) { if (this.config != null && this.config != config) { throw new IllegalStateException("SolrConfig instance is already associated with this loader"); @@ -702,6 +709,8 @@ protected final void setSolrConfig(SolrConfig config) { this.config = config; } + // enforcing that the loader stays bound to the same CoreContainer instance is intentional + @SuppressWarnings("ReferenceEquality") protected final void setCoreContainer(CoreContainer coreContainer) { if (this.coreContainer != null && this.coreContainer != coreContainer) { throw new IllegalStateException( diff --git a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java index 7e429de374ea..1c9726917c87 100644 --- a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java +++ b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java @@ -480,6 +480,9 @@ static Long getCheckSum(Checksum checksum, Path f) { private volatile IndexFetcher currentIndexFetcher; + // checks whether currentIndexFetcher is the pollingIndexFetcher instance, so identity + // comparison is intentional + @SuppressWarnings("ReferenceEquality") public IndexFetchResult doFetch(SolrParams solrParams, boolean forceReplication) { String leaderUrl = solrParams.get(LEADER_URL, null); if (!indexFetchLock.tryLock()) return IndexFetchResult.LOCK_OBTAIN_FAILED; @@ -1445,6 +1448,9 @@ public void preClose(SolrCore core) { } } + // checks whether currentIndexFetcher is the pollingIndexFetcher instance, so identity + // comparison is intentional + @SuppressWarnings("ReferenceEquality") @Override public void postClose(SolrCore core) { if (pollingIndexFetcher != null) { @@ -1493,10 +1499,8 @@ public void shutdown() { */ private SolrEventListener getEventListener(final boolean snapshoot, final boolean getCommit) { return new SolrEventListener() { - /** - * This refreshes the latest replicateable index commit and optionally can create Snapshots as - * well - */ + // This refreshes the latest replicateable index commit and optionally can create Snapshots + // as well @Override public void postCommit() { IndexCommit currentCommitPoint = core.getDeletionPolicy().getLatestCommit(); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java index 494e3f898414..515a425610fb 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java @@ -464,6 +464,9 @@ public void submitAsyncTask(TaskObject taskObject) throws SolrException { } } + // detects whether the cache returned our own instance or a pre-existing one, so identity + // comparison is intentional + @SuppressWarnings("ReferenceEquality") private void addTask(TaskObject taskObject) { // Ensure task ID is not already in use TaskObject taskInCache = diff --git a/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java b/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java index 38eb8a464cfd..18c4bede402e 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/IndexSizeEstimator.java @@ -585,6 +585,9 @@ private void estimateTermStats( } } + // getMergeInstance() may return the same instance, which must not be closed, so identity + // comparison is intentional + @SuppressWarnings("ReferenceEquality") private void estimateStoredFields(Map result) throws IOException { log.info("- estimating stored fields..."); Map> stats = new HashMap<>(); diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java index 7e9476faf9eb..5f36e69575fd 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java @@ -315,6 +315,9 @@ public Collection getApis() { // the POST authc/authz is getting used. apis.add( new ReqHandlerToApi(this, authcSpecProvider) { + // detects whether the plugin instance was swapped out, so identity comparison is + // intentional + @SuppressWarnings("ReferenceEquality") @Override public synchronized Map getCommandSchema() { // it is possible that the Authentication plugin is modified since the last call. @@ -335,6 +338,9 @@ public synchronized Map getCommandSchema() { }; apis.add( new ApiBag.ReqHandlerToApi(this, authzSpecProvider) { + // detects whether the plugin instance was swapped out, so identity comparison is + // intentional + @SuppressWarnings("ReferenceEquality") @Override public synchronized Map getCommandSchema() { // it is possible that the Authorization plugin is modified since the last call. diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoProvider.java b/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoProvider.java index f9b398641564..5dacc07e471c 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoProvider.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoProvider.java @@ -286,6 +286,8 @@ public NodeSystemResponse.JVM getJvmInfo() { } /** Get Security Info */ + // CLUSTER_MEMBER_NODE is a unique sentinel principal, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public NodeSystemResponse.Security getSecurityInfo() { NodeSystemResponse.Security info = new NodeSystemResponse.Security(); diff --git a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java index e08fe5d3ee40..1099b8ff4e35 100644 --- a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java +++ b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java @@ -645,6 +645,8 @@ private static void removeCopyFieldTargets(SolrDocument solrDoc, IndexSchema sch * * @see #getInputDocumentFromTlog(SolrCore, BytesRef, AtomicLong, Set, Resolution) */ + // DELETED is a unique sentinel document, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") private static SolrInputDocument getInputDocumentFromTlog( SolrCore core, BytesRef idBytes, @@ -757,6 +759,8 @@ public static SolrInputDocument getInputDocumentFromTlog( * @param resolveStrategy {@link Resolution#DOC} or {@link Resolution#ROOT_WITH_CHILDREN}. * @see Resolution */ + // DELETED is a unique sentinel document, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") public static SolrInputDocument getInputDocument( SolrCore core, BytesRef idBytes, diff --git a/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java b/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java index aa85f9a69b44..bc6ddfdccda1 100644 --- a/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java +++ b/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java @@ -191,6 +191,8 @@ public int getShardNum(String shard) { return -1; } + // skips the component instance that created the request, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public void addRequest(SearchComponent me, ShardRequest sreq) { outgoing.add(sreq); if ((sreq.purpose & ShardRequest.PURPOSE_PRIVATE) == 0) { diff --git a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java index 3e7a066841f3..75c82111902f 100644 --- a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java +++ b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java @@ -513,6 +513,8 @@ protected void processComponentsLocal( } /** Distributed request processing (AKA coordinator). */ + // ALL_SHARDS is a unique sentinel array, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") protected void processComponentsDistrib( SolrQueryRequest req, SolrQueryResponse rsp, diff --git a/solr/core/src/java/org/apache/solr/handler/component/StatsField.java b/solr/core/src/java/org/apache/solr/handler/component/StatsField.java index 2d01cb4baee4..375817b1c642 100644 --- a/solr/core/src/java/org/apache/solr/handler/component/StatsField.java +++ b/solr/core/src/java/org/apache/solr/handler/component/StatsField.java @@ -84,7 +84,7 @@ public enum Stat { distinctValues(true), countDistinct(false, distinctValues), percentiles(true) { - /** special for percentiles * */ + // special for percentiles @Override boolean parseParams(StatsField sf) { String percentileParas = sf.localParams.get(this.name()); @@ -116,7 +116,7 @@ boolean parseParams(StatsField sf) { } }, cardinality(true) { - /** special for percentiles * */ + // special for cardinality @Override boolean parseParams(StatsField sf) { try { diff --git a/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java b/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java index 36f22d69cdce..ae6c879bded2 100644 --- a/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java +++ b/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java @@ -642,6 +642,8 @@ private static void fetchTerms( } } + // TermsEnum.EMPTY is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") private static void collectTermStates( IndexReaderContext topReaderContext, TermStates[] contextArray, Term[] queryTerms) throws IOException { diff --git a/solr/core/src/java/org/apache/solr/handler/loader/JavabinLoader.java b/solr/core/src/java/org/apache/solr/handler/loader/JavabinLoader.java index 0c8b47003aec..bcf73c701d44 100644 --- a/solr/core/src/java/org/apache/solr/handler/loader/JavabinLoader.java +++ b/solr/core/src/java/org/apache/solr/handler/loader/JavabinLoader.java @@ -154,6 +154,8 @@ private void handleMultiStream( SolrParams params; AddUpdateCommand addCmd = null; + // END_OBJ is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") @Override public List readIterator(DataInputInputStream fis) throws IOException { while (true) { diff --git a/solr/core/src/java/org/apache/solr/handler/tagger/TagLL.java b/solr/core/src/java/org/apache/solr/handler/tagger/TagLL.java index a8f3682b479d..e62e0a0401df 100644 --- a/solr/core/src/java/org/apache/solr/handler/tagger/TagLL.java +++ b/solr/core/src/java/org/apache/solr/handler/tagger/TagLL.java @@ -95,6 +95,8 @@ boolean advance(BytesRef word, int offset) throws IOException { * Removes this tag from the chain, connecting prevTag and nextTag. Does not modify "this" * object's pointers, so the caller can refer to nextTag after removing it. */ + // checks whether this node is the head of the linked list, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public void removeLL() { if (head[0] == this) head[0] = nextTag; if (prevTag != null) { @@ -105,6 +107,8 @@ public void removeLL() { } } + // asserts that this node is the head of the linked list, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") void addBeforeLL(TagLL tag) { assert tag.startOffset <= startOffset; if (prevTag != null) { diff --git a/solr/core/src/java/org/apache/solr/legacy/BBoxStrategy.java b/solr/core/src/java/org/apache/solr/legacy/BBoxStrategy.java index 4ce808400649..1cd7316f9396 100644 --- a/solr/core/src/java/org/apache/solr/legacy/BBoxStrategy.java +++ b/solr/core/src/java/org/apache/solr/legacy/BBoxStrategy.java @@ -298,6 +298,9 @@ public DoubleValuesSource makeOverlapRatioValueSource( // .build(); // } + // SpatialOperation instances are enum-like static constants, so identity comparison is + // intentional + @SuppressWarnings("ReferenceEquality") @Override public Query makeQuery(SpatialArgs args) { Shape shape = args.getShape(); diff --git a/solr/core/src/java/org/apache/solr/logging/jul/JulWatcher.java b/solr/core/src/java/org/apache/solr/logging/jul/JulWatcher.java index 271e1358fd1e..8de67195e82e 100644 --- a/solr/core/src/java/org/apache/solr/logging/jul/JulWatcher.java +++ b/solr/core/src/java/org/apache/solr/logging/jul/JulWatcher.java @@ -83,6 +83,8 @@ public void setLogLevel(String category, String level) { } } + // JUL Logger instances are cached singletons per name; identity check for the root logger + @SuppressWarnings("ReferenceEquality") @Override public Collection getAllLoggers() { LogManager manager = LogManager.getLogManager(); diff --git a/solr/core/src/java/org/apache/solr/logging/log4j2/Log4j2Watcher.java b/solr/core/src/java/org/apache/solr/logging/log4j2/Log4j2Watcher.java index 8f0af382e33b..3ec7673e0030 100644 --- a/solr/core/src/java/org/apache/solr/logging/log4j2/Log4j2Watcher.java +++ b/solr/core/src/java/org/apache/solr/logging/log4j2/Log4j2Watcher.java @@ -185,7 +185,7 @@ public Collection getAllLoggers() { final String name = config.getKey(); final Logger logger = ctx.getLogger(name); - if (logger == root || root.equals(logger) || isRootLogger(name) || "".equals(name)) { + if (root.equals(logger) || isRootLogger(name) || "".equals(name)) { continue; } @@ -204,7 +204,7 @@ public Collection getAllLoggers() { for (Logger logger : ctx.getLoggers()) { String name = logger.getName(); - if (logger == root || root.equals(logger) || isRootLogger(name) || "".equals(name)) { + if (root.equals(logger) || isRootLogger(name) || "".equals(name)) { continue; } diff --git a/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongCounter.java b/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongCounter.java index 15fc27b85c52..75ec7a886464 100644 --- a/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongCounter.java +++ b/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongCounter.java @@ -27,6 +27,8 @@ public class DualRegistryAttributedLongCounter extends AttributedLongCounter { private final AttributedLongCounter nodeCounter; + // asserting that core and node registries provide distinct instrument instances is intentional + @SuppressWarnings("ReferenceEquality") public DualRegistryAttributedLongCounter( LongCounter coreCounter, Attributes coreAttributes, diff --git a/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongTimer.java b/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongTimer.java index b42d869892c5..d4c405eaa991 100644 --- a/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongTimer.java +++ b/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongTimer.java @@ -27,6 +27,8 @@ public class DualRegistryAttributedLongTimer extends AttributedLongTimer { private final AttributedLongTimer nodeTimer; + // asserting that core and node registries provide distinct instrument instances is intentional + @SuppressWarnings("ReferenceEquality") public DualRegistryAttributedLongTimer( LongHistogram coreHistogram, Attributes coreAttributes, diff --git a/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongUpDownCounter.java b/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongUpDownCounter.java index 6cf505fb54e7..3f636541fc6f 100644 --- a/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongUpDownCounter.java +++ b/solr/core/src/java/org/apache/solr/metrics/otel/instruments/DualRegistryAttributedLongUpDownCounter.java @@ -27,6 +27,8 @@ public class DualRegistryAttributedLongUpDownCounter extends AttributedLongUpDow private final AttributedLongUpDownCounter nodeUpDownCounter; + // asserting that core and node registries provide distinct instrument instances is intentional + @SuppressWarnings("ReferenceEquality") public DualRegistryAttributedLongUpDownCounter( LongUpDownCounter coreUpDownCounter, Attributes coreAttributes, diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java b/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java index 7535bb2c7fe9..3376e8ad9657 100644 --- a/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java +++ b/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java @@ -60,6 +60,8 @@ public synchronized void addListener(Listener listener, boolean addFirst) { } } + // removing the exact registered listener instance is intentional + @SuppressWarnings("ReferenceEquality") public synchronized void removeListener(Listener listener) { Iterator> it = listeners.iterator(); while (it.hasNext()) { diff --git a/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java b/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java index 419cb033835f..394b30bfa411 100644 --- a/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java +++ b/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java @@ -90,6 +90,8 @@ public static PluginBag.PluginHolder createHolder( } } + // package Version objects are unique per package instance, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") private synchronized void reload(SolrPackageLoader.SolrPackage pkg, SolrCore core) { String lessThan = core.getSolrConfig().maxPackageVersion(info.pkgName); SolrPackageLoader.SolrPackage.Version newest = pkg.getLatest(lessThan); diff --git a/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java b/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java index 6809e99e9368..33bb1eb082da 100644 --- a/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java +++ b/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java @@ -109,6 +109,8 @@ public TextResponseWriter(Writer writer, SolrQueryRequest req, SolrQueryResponse * NOTE: strict object equality check against {@link #rawReturnFields}; see javadocs for {@link * #NO_RAW_FIELDS} */ + // strict object equality against rawReturnFields is intentional, per the javadoc above + @SuppressWarnings("ReferenceEquality") protected final boolean shouldWriteRaw(String fname, ReturnFields returnFields) { return rawReturnFields == returnFields && rawFields.contains(fname); } diff --git a/solr/core/src/java/org/apache/solr/response/transform/RawValueTransformerFactory.java b/solr/core/src/java/org/apache/solr/response/transform/RawValueTransformerFactory.java index b165b81e9237..cdf6d8f96949 100644 --- a/solr/core/src/java/org/apache/solr/response/transform/RawValueTransformerFactory.java +++ b/solr/core/src/java/org/apache/solr/response/transform/RawValueTransformerFactory.java @@ -61,6 +61,8 @@ public boolean mayModifyValue() { return false; } + // response writers are cached singletons in the core, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") @Override public DocTransformer create( String display, diff --git a/solr/core/src/java/org/apache/solr/response/transform/ValueSourceAugmenter.java b/solr/core/src/java/org/apache/solr/response/transform/ValueSourceAugmenter.java index e2fe53cf4d56..cc2d4a375951 100644 --- a/solr/core/src/java/org/apache/solr/response/transform/ValueSourceAugmenter.java +++ b/solr/core/src/java/org/apache/solr/response/transform/ValueSourceAugmenter.java @@ -142,6 +142,8 @@ public float score() throws IOException { List readerContexts; IntObjectHashMap cachedValuesById; + // NULL_SENTINEL is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") @Override public void transform(SolrDocument doc, int docid, DocIterationInfo docIterationInfo) { Object cacheValue = (cachedValuesById != null) ? cachedValuesById.get(docid) : null; diff --git a/solr/core/src/java/org/apache/solr/schema/BBoxField.java b/solr/core/src/java/org/apache/solr/schema/BBoxField.java index 4b85573ad73d..41d96ca7e4a2 100644 --- a/solr/core/src/java/org/apache/solr/schema/BBoxField.java +++ b/solr/core/src/java/org/apache/solr/schema/BBoxField.java @@ -74,6 +74,8 @@ protected void init(IndexSchema schema, Map args) { } } + // fields of this type share this exact FieldType instance, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") @Override public void inform(IndexSchema schema) { this.schema = schema; diff --git a/solr/core/src/java/org/apache/solr/schema/CurrencyFieldType.java b/solr/core/src/java/org/apache/solr/schema/CurrencyFieldType.java index 375d3804db1d..1e88b0726b14 100644 --- a/solr/core/src/java/org/apache/solr/schema/CurrencyFieldType.java +++ b/solr/core/src/java/org/apache/solr/schema/CurrencyFieldType.java @@ -609,7 +609,7 @@ private String getDocCurrencyCode(int doc, int currencyOrd) throws IOException { } } - /** throws a (Server Error) SolrException if the code is not valid */ + // throws a (Server Error) SolrException if the code is not valid private Currency getDocCurrency(int doc, int currencyOrd) throws IOException { String code = getDocCurrencyCode(doc, currencyOrd); Currency c = getCurrency(code); diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java index d90251d86357..fc6edcf1044f 100644 --- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java +++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java @@ -1997,6 +1997,8 @@ public IndexSchema deleteCopyFields(Map> copyFields) } /** Informs analyzers used by a fieldType. */ + // ref comparison of analyzers is intentional: skip informing the same instance twice + @SuppressWarnings("ReferenceEquality") private void informResourceLoaderAwareObjectsForFieldType(FieldType fieldType) { // must inform any sub-components used in the // tokenizer chain if they are ResourceLoaderAware diff --git a/solr/core/src/java/org/apache/solr/schema/LatLonPointSpatialField.java b/solr/core/src/java/org/apache/solr/schema/LatLonPointSpatialField.java index 238666d71650..0b0cca51cf22 100644 --- a/solr/core/src/java/org/apache/solr/schema/LatLonPointSpatialField.java +++ b/solr/core/src/java/org/apache/solr/schema/LatLonPointSpatialField.java @@ -156,6 +156,9 @@ public Field[] createIndexableFields(Shape shape) { return fields; } + // SpatialOperation instances are enum-like static constants, so identity comparison is + // intentional + @SuppressWarnings("ReferenceEquality") @Override public Query makeQuery(SpatialArgs args) { if (args.getOperation() != SpatialOperation.Intersects) { diff --git a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java index a65eb18df6aa..d6a8d3e0473b 100644 --- a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java +++ b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java @@ -493,6 +493,9 @@ private OpType(String label) { } } + // same-instance check guards against self-referential cause chains, so identity comparison is + // intentional + @SuppressWarnings("ReferenceEquality") public static String getErrorStr(Exception e) { StringBuilder sb = new StringBuilder(); Throwable cause = e; diff --git a/solr/core/src/java/org/apache/solr/search/CaffeineCache.java b/solr/core/src/java/org/apache/solr/search/CaffeineCache.java index e43acb704cc1..2f1b0b8949b9 100644 --- a/solr/core/src/java/org/apache/solr/search/CaffeineCache.java +++ b/solr/core/src/java/org/apache/solr/search/CaffeineCache.java @@ -270,6 +270,9 @@ public V computeIfAbsent(K key, IOFunction mappingFuncti } } + // identity comparison against `old` is intentional: Caffeine skips the RemovalListener + // exactly when the replaced value is the same reference (see NOTE below) + @SuppressWarnings("ReferenceEquality") @Override public V put(K key, V val) { inserts.increment(); diff --git a/solr/core/src/java/org/apache/solr/search/DocSlice.java b/solr/core/src/java/org/apache/solr/search/DocSlice.java index f0c63a1b2695..0764189f9146 100644 --- a/solr/core/src/java/org/apache/solr/search/DocSlice.java +++ b/solr/core/src/java/org/apache/solr/search/DocSlice.java @@ -134,7 +134,7 @@ public Integer next() { return nextDoc(); } - /** The remove operation is not supported by this Iterator. */ + // The remove operation is not supported by this Iterator. @Override public void remove() { throw new UnsupportedOperationException( diff --git a/solr/core/src/java/org/apache/solr/search/DocValuesIteratorCache.java b/solr/core/src/java/org/apache/solr/search/DocValuesIteratorCache.java index eba8a7318814..34e4c623a07e 100644 --- a/solr/core/src/java/org/apache/solr/search/DocValuesIteratorCache.java +++ b/solr/core/src/java/org/apache/solr/search/DocValuesIteratorCache.java @@ -94,6 +94,8 @@ public DocValuesIteratorCache(SolrIndexSearcher searcher, boolean cache) { } } + // NONE is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") public FieldDocValuesSupplier getSupplier(String fieldName) { FieldDocValuesSupplier ret = getSupplier.apply(fieldName); return ret == NONE ? null : ret; diff --git a/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java b/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java index 4dd2745bf1eb..b5903fa8dab1 100644 --- a/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java +++ b/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java @@ -1488,6 +1488,9 @@ private Query getQuery() { } } + // identity fast-path: if index and query analyzers are the same instance there is + // no separate stopword filtering to strip, so reference comparison is intentional + @SuppressWarnings("ReferenceEquality") private Analyzer noStopwordFilterAnalyzer(String fieldName) { FieldType ft = parser.getReq().getSchema().getFieldType(fieldName); Analyzer qa = ft.getQueryAnalyzer(); diff --git a/solr/core/src/java/org/apache/solr/search/GraphTermsQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/GraphTermsQParserPlugin.java index f7bfd3b7dc23..26e70cd3c0a0 100644 --- a/solr/core/src/java/org/apache/solr/search/GraphTermsQParserPlugin.java +++ b/solr/core/src/java/org/apache/solr/search/GraphTermsQParserPlugin.java @@ -210,6 +210,9 @@ public int hashCode() { return 31 * classHash() + id.hashCode(); } + // `id` is a unique sentinel Object shared only between clones, so identity comparison is + // intentional + @SuppressWarnings("ReferenceEquality") @Override public boolean equals(Object other) { return sameClassAs(other) && id == ((GraphTermsQuery) other).id; @@ -290,6 +293,8 @@ public boolean isCacheable(LeafReaderContext ctx) { }; } + // TermsEnum.EMPTY is a singleton sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") private void collectTermStates( IndexReader reader, List leaves, diff --git a/solr/core/src/java/org/apache/solr/search/JoinQuery.java b/solr/core/src/java/org/apache/solr/search/JoinQuery.java index 09fb728e7f96..67690771cb45 100644 --- a/solr/core/src/java/org/apache/solr/search/JoinQuery.java +++ b/solr/core/src/java/org/apache/solr/search/JoinQuery.java @@ -105,6 +105,9 @@ protected class JoinQueryWeight extends ConstantScoreWeight { ResponseBuilder rb; ScoreMode scoreMode; + // comparing SolrCore instances by identity is intentional: we only want to reuse the + // passed-in searcher when the request core is the exact same core object + @SuppressWarnings("ReferenceEquality") public JoinQueryWeight(SolrIndexSearcher searcher, ScoreMode scoreMode, float boost) { super(JoinQuery.this, boost); this.scoreMode = scoreMode; @@ -248,6 +251,9 @@ public DocSet getDocSet() throws IOException { return result; } + // `fromSearcher == toSearcher` identity checks are intentional: same-instance searchers + // mean a self-join, letting us reuse the same reader and liveDocs + @SuppressWarnings("ReferenceEquality") public DocSet getDocSetEnumerate() throws IOException { FixedBitSet resultBits = null; diff --git a/solr/core/src/java/org/apache/solr/search/QueryResultKey.java b/solr/core/src/java/org/apache/solr/search/QueryResultKey.java index 671da8cda54e..387b67cf8778 100644 --- a/solr/core/src/java/org/apache/solr/search/QueryResultKey.java +++ b/solr/core/src/java/org/apache/solr/search/QueryResultKey.java @@ -144,6 +144,8 @@ public boolean equals(Object o) { * * @return true if the lists of equivalent other then the ordering */ + // identity fast-path before element-wise comparison is intentional + @SuppressWarnings("ReferenceEquality") private static boolean unorderedCompare(List fqList1, List fqList2) { // Do fast version first, expecting that filters are usually in the same order // diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java index 8098b39f4a19..9aab24424462 100644 --- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java +++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java @@ -835,7 +835,7 @@ void searchWithTimeout() throws IOException { } } - /** + /* * Retrieve the {@link Document} instance corresponding to the document id. * * @see SolrDocumentFetcher @@ -846,7 +846,7 @@ public Document doc(int docId) throws IOException { return doc(docId, (Set) null); }*/ - /** + /* * Visit a document's fields using a {@link StoredFieldVisitor}. This method does not currently * add to the Solr document cache. * @@ -859,7 +859,7 @@ public final void doc(int docId, StoredFieldVisitor visitor) throws IOException getDocFetcher().doc(docId, visitor); }*/ - /** + /* * Retrieve the {@link Document} instance corresponding to the document id. * *

NOTE: the document will have all fields accessible, but if a field filter is @@ -1011,6 +1011,8 @@ private BitDocSet makeBitDocSet(DocSet answer) { return new BitDocSet(bs, answer.size()); } + // makeBitDocSet returns the same instance when already a BitDocSet; identity check is intentional + @SuppressWarnings("ReferenceEquality") public BitDocSet getDocSetBits(Query q) throws IOException { DocSet answer = getDocSet(q); BitDocSet answerBits = makeBitDocSet(answer); diff --git a/solr/core/src/java/org/apache/solr/search/SortedIntDocSet.java b/solr/core/src/java/org/apache/solr/search/SortedIntDocSet.java index 1880d290befa..7bcbf13ae668 100644 --- a/solr/core/src/java/org/apache/solr/search/SortedIntDocSet.java +++ b/solr/core/src/java/org/apache/solr/search/SortedIntDocSet.java @@ -593,7 +593,7 @@ public Integer next() { return nextDoc(); } - /** The remove operation is not supported by this Iterator. */ + /* The remove operation is not supported by this Iterator. */ @Override public void remove() { throw new UnsupportedOperationException( diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessor.java b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessor.java index 2dca4a5a35bf..f2e76f9f4f4c 100644 --- a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessor.java +++ b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessor.java @@ -320,6 +320,8 @@ private static long applyDefaultOverrequest(long offset, long limit) { /** * Processes the collected data to finds the top slots, and composes it in the response NamedList. */ + // "same instance" check of SlotAccs in this hot path is intentional identity comparison + @SuppressWarnings("ReferenceEquality") SimpleOrderedMap findTopSlots( final int numSlots, final int slotCardinality, @@ -578,6 +580,8 @@ private static class Slot { } /** Helper method used solely when looping over buckets to be returned in findTopSlots */ + // "same instance" check against resortAcc is intentional identity comparison + @SuppressWarnings("ReferenceEquality") private void fillBucketFromSlot(SimpleOrderedMap target, Slot slot, SlotAcc resortAcc) throws IOException { final int slotOrd = slot.slot; @@ -845,6 +849,8 @@ public void setValues(SimpleOrderedMap bucket, int slotNum) throws IOExc } } + // "replacement != acc" checks whether registerSweepingAccs returned the same instance + @SuppressWarnings("ReferenceEquality") @Override public SlotAcc registerSweepingAccs(SweepingCountSlotAcc baseSweepingAcc) { final FacetFieldProcessor p = (FacetFieldProcessor) fcontext.processor; diff --git a/solr/core/src/java/org/apache/solr/search/facet/RelatednessAgg.java b/solr/core/src/java/org/apache/solr/search/facet/RelatednessAgg.java index f55690bbd556..73ced2da8dc4 100644 --- a/solr/core/src/java/org/apache/solr/search/facet/RelatednessAgg.java +++ b/solr/core/src/java/org/apache/solr/search/facet/RelatednessAgg.java @@ -137,6 +137,9 @@ public FunctionValues getValues(Map context, LeafReaderContext r throw new UnsupportedOperationException("NOT IMPLEMENTED " + name + " " + this); } + // the assert checks that `ctx` is the exact same FacetContext instance we started walking + // from, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") @Override public SlotAcc createSlotAcc(FacetContext fcontext, long numDocs, int numSlots) throws IOException { diff --git a/solr/core/src/java/org/apache/solr/search/facet/SlotAcc.java b/solr/core/src/java/org/apache/solr/search/facet/SlotAcc.java index ceba52b6fcba..b798c9b4165a 100644 --- a/solr/core/src/java/org/apache/solr/search/facet/SlotAcc.java +++ b/solr/core/src/java/org/apache/solr/search/facet/SlotAcc.java @@ -226,6 +226,8 @@ public FixedBitSet resize(FixedBitSet old) { return values; } + // slots holding the shared defaultValue instance are identified by identity on purpose + @SuppressWarnings("ReferenceEquality") public T[] resize(T[] old, T defaultValue) { @SuppressWarnings({"unchecked"}) T[] values = (T[]) Array.newInstance(old.getClass().getComponentType(), getNewSize()); @@ -757,6 +759,8 @@ public ReadOnlyCountSlotAcc add(String key, DocSet docs, int numSlots) { * @param toAcc - the replacement {@link SlotAcc} * @see SweepableSlotAcc#registerSweepingAccs(SweepingCountSlotAcc) */ + // "same instance" check against sortAcc is intentional identity comparison + @SuppressWarnings("ReferenceEquality") public void registerMapping(SlotAcc fromAcc, SlotAcc toAcc) { assert fromAcc.key.equals(toAcc.key); output.add(toAcc); diff --git a/solr/core/src/java/org/apache/solr/search/facet/UnInvertedField.java b/solr/core/src/java/org/apache/solr/search/facet/UnInvertedField.java index 5ddd47051161..1714b3268528 100644 --- a/solr/core/src/java/org/apache/solr/search/facet/UnInvertedField.java +++ b/solr/core/src/java/org/apache/solr/search/facet/UnInvertedField.java @@ -633,6 +633,8 @@ public static UnInvertedField getUnInvertedField(String field, SolrIndexSearcher } // Returns null if not already populated + // uifPlaceholder is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") public static UnInvertedField checkUnInvertedField(String field, SolrIndexSearcher searcher) throws IOException { SolrCache cache = searcher.getFieldValueCache(); diff --git a/solr/core/src/java/org/apache/solr/search/function/DualDoubleFunction.java b/solr/core/src/java/org/apache/solr/search/function/DualDoubleFunction.java index 1d2371dbd33a..f68fb9a432b4 100644 --- a/solr/core/src/java/org/apache/solr/search/function/DualDoubleFunction.java +++ b/solr/core/src/java/org/apache/solr/search/function/DualDoubleFunction.java @@ -64,7 +64,7 @@ public double doubleVal(int doc) throws IOException { return func(doc, aVals, bVals); } - /** + /* * True if and only if all of the wrapped {@link FunctionValues} exists * for the specified doc */ diff --git a/solr/core/src/java/org/apache/solr/security/AllowListUrlChecker.java b/solr/core/src/java/org/apache/solr/security/AllowListUrlChecker.java index 039ce146f4d8..6bd69babf841 100644 --- a/solr/core/src/java/org/apache/solr/security/AllowListUrlChecker.java +++ b/solr/core/src/java/org/apache/solr/security/AllowListUrlChecker.java @@ -160,6 +160,9 @@ public void checkAllowList(List urls, ClusterState clusterState) * Gets the set of live hosts urls (host:port) built from the set of live nodes. The set is cached * to be reused until the live nodes change. */ + // the cache is invalidated when the live-nodes set is a different instance, so identity + // comparison is intentional + @SuppressWarnings("ReferenceEquality") private Set getLiveHostUrls(ClusterState clusterState) { if (clusterState == null) { return Set.of(); diff --git a/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java b/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java index 7c2eb80c28b9..996ed971886e 100644 --- a/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java +++ b/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java @@ -360,6 +360,8 @@ private Optional getUserFromJettyRequest(Request request) { client.addListenerFactory(() -> listener); } + // CLUSTER_MEMBER_NODE is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") public boolean needsAuthorization(HttpServletRequest req) { return req.getUserPrincipal() != CLUSTER_MEMBER_NODE; } diff --git a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java index f8c7725c429e..0f2298696c2c 100644 --- a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java +++ b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java @@ -429,6 +429,9 @@ protected void extractRemotePath(String collectionName) } /** This method processes the request. */ + // detecting whether the Error found in the cause chain is the thrown exception itself, so + // identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public Action call() throws IOException { if (cores == null) { diff --git a/solr/core/src/java/org/apache/solr/servlet/RequestRateLimiter.java b/solr/core/src/java/org/apache/solr/servlet/RequestRateLimiter.java index 0901a0e28738..b9edf81f0815 100644 --- a/solr/core/src/java/org/apache/solr/servlet/RequestRateLimiter.java +++ b/solr/core/src/java/org/apache/solr/servlet/RequestRateLimiter.java @@ -90,6 +90,9 @@ boolean isEmpty() { * Handles an incoming request. returns a metadata object representing the metadata for the * acquired slot, if acquired. If a slot is not acquired, returns a null metadata object. */ + // totalSlotsPool and borrowableSlotsPool may be the same Semaphore instance, so identity + // comparison is intentional + @SuppressWarnings("ReferenceEquality") public SlotReservation handleRequest() throws InterruptedException { if (!rateLimiterConfig.isEnabled) { @@ -135,6 +138,9 @@ public SlotReservation handleRequest() throws InterruptedException { * @lucene.experimental -- Can cause slots to be blocked if a request borrows a slot and is itself * long lived. */ + // totalSlotsPool and borrowableSlotsPool may be the same Semaphore instance, so identity + // comparison is intentional + @SuppressWarnings("ReferenceEquality") public SlotReservation allowSlotBorrowing() throws InterruptedException { if (borrowableSlotsPool == null) { return null; diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java b/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java index 42531d5fd4a1..2392d30eb460 100644 --- a/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java +++ b/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java @@ -270,7 +270,9 @@ public int read() { * @param charset to be used to decode resulting bytes after %-decoding * @param map place all parameters in this map */ - @SuppressWarnings({"fallthrough", "resource"}) + // checking which of the two stream references currentStream points at, so identity comparison + // is intentional + @SuppressWarnings({"fallthrough", "resource", "ReferenceEquality"}) static long parseFormDataContent( final InputStream postContent, final long maxLen, diff --git a/solr/core/src/java/org/apache/solr/spelling/ConjunctionSolrSpellChecker.java b/solr/core/src/java/org/apache/solr/spelling/ConjunctionSolrSpellChecker.java index e031ade99381..467a61dc5a20 100644 --- a/solr/core/src/java/org/apache/solr/spelling/ConjunctionSolrSpellChecker.java +++ b/solr/core/src/java/org/apache/solr/spelling/ConjunctionSolrSpellChecker.java @@ -45,6 +45,9 @@ public class ConjunctionSolrSpellChecker extends SolrSpellChecker { private List checkers = new ArrayList<>(); private boolean initialized = false; + // Analyzer does not override equals(); all checkers must share the same Analyzer instance, so + // identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public void addChecker(SolrSpellChecker checker) { if (initialized) { throw new IllegalStateException("Need to add checkers before calling init()"); diff --git a/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java b/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java index 76183c7f5a5b..0f83fcbdae43 100644 --- a/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java +++ b/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java @@ -176,6 +176,8 @@ public DirectUpdateHandler2(SolrCore core) { } } + // identity comparison detects whether the previous handler's UpdateLog instance is being reused + @SuppressWarnings("ReferenceEquality") public DirectUpdateHandler2(SolrCore core, UpdateHandler updateHandler) { super(core, updateHandler.getUpdateLog(), false); solrCoreState = core.getSolrCoreState(); diff --git a/solr/core/src/java/org/apache/solr/update/MemOutputStream.java b/solr/core/src/java/org/apache/solr/update/MemOutputStream.java index 345d35bb193c..714eb238c4ea 100644 --- a/solr/core/src/java/org/apache/solr/update/MemOutputStream.java +++ b/solr/core/src/java/org/apache/solr/update/MemOutputStream.java @@ -31,6 +31,8 @@ public MemOutputStream(byte[] tempBuffer) { super(null, tempBuffer, 0); } + // identity comparison checks whether arr is our own internal buffer, so we can steal it + @SuppressWarnings("ReferenceEquality") @Override public void flush(byte[] arr, int offset, int len) throws IOException { if (arr == buf && offset == 0 && len == buf.length) { diff --git a/solr/core/src/java/org/apache/solr/update/PeerSync.java b/solr/core/src/java/org/apache/solr/update/PeerSync.java index 7d69b4de9c61..5719106287a9 100644 --- a/solr/core/src/java/org/apache/solr/update/PeerSync.java +++ b/solr/core/src/java/org/apache/solr/update/PeerSync.java @@ -455,6 +455,9 @@ private boolean connectTimeoutExceptionInChain(Throwable exception) { } } + // MissedUpdatesRequest.ALREADY_IN_SYNC/UNABLE_TO_SYNC/EMPTY are unique sentinels, so identity + // comparison against them is intentional + @SuppressWarnings("ReferenceEquality") private boolean handleVersions(ShardResponse srsp) { // we retrieved the last N updates from the replica @SuppressWarnings({"unchecked"}) @@ -861,6 +864,9 @@ public static class MissedUpdatesFinder extends MissedUpdatesFinderBase { this.nUpdates = nUpdates; } + // MissedUpdatesRequest.EMPTY is a unique sentinel, so identity comparison against it is + // intentional + @SuppressWarnings("ReferenceEquality") public MissedUpdatesRequest find(List otherVersions, Object updateFrom) { otherVersions.sort(absComparator); if (debug) { diff --git a/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java b/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java index 272e610718b9..c65d5b063724 100644 --- a/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java +++ b/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java @@ -217,6 +217,9 @@ public PeerSync.PeerSyncResult sync(List startingVersions) { } } + // MissedUpdatesRequest.ALREADY_IN_SYNC/UNABLE_TO_SYNC are unique sentinels, so identity + // comparison against them is intentional + @SuppressWarnings("ReferenceEquality") private boolean doSync(List ourUpdates, long ourLowThreshold, long ourHighThreshold) { // get leader's recent versions and fingerprint // note: by getting leader's versions later, we guarantee that leader's versions always super @@ -246,6 +249,9 @@ private boolean doSync(List ourUpdates, long ourLowThreshold, long ourHigh return false; } + // MissedUpdatesRequest.EMPTY is a unique sentinel, so identity comparison against it is + // intentional + @SuppressWarnings("ReferenceEquality") private MissedUpdatesRequest buildMissedUpdatesRequest(NamedList rsp) { // we retrieved the last N updates from the replica @SuppressWarnings({"unchecked"}) @@ -430,6 +436,9 @@ public static class MissedUpdatesFinder extends PeerSync.MissedUpdatesFinderBase this.nUpdates = nUpdates; } + // MissedUpdatesRequest.EMPTY is a unique sentinel, so identity comparison against it is + // intentional + @SuppressWarnings("ReferenceEquality") public MissedUpdatesRequest find(List leaderVersions, Object updateFrom) { leaderVersions.sort(absComparator); log.debug("{} sorted versions from {} = {}", logPrefix, updateFrom, leaderVersions); diff --git a/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java b/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java index 8c6729628460..c0d26576f6d9 100644 --- a/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java +++ b/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java @@ -194,6 +194,8 @@ public SolrIndexConfig(ConfigNode cfg, SolrIndexConfig def) { true); } + // InfoStream.NO_OUTPUT is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") @Override public void writeMap(EntryWriter ew) throws IOException { ew.put("useCompoundFile", useCompoundFile) diff --git a/solr/core/src/java/org/apache/solr/update/UpdateLog.java b/solr/core/src/java/org/apache/solr/update/UpdateLog.java index 17fd8477b277..f11abef1f1b2 100644 --- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java +++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java @@ -734,6 +734,8 @@ public boolean existOldBufferLog() { /* Takes over ownership of the log, keeping it until no longer needed and then decrementing its reference and dropping it. */ + // checking whether oldLog is the very same instance as the current tlog is intentional + @SuppressWarnings("ReferenceEquality") protected synchronized void addOldLog(TransactionLog oldLog, boolean removeOld) { if (oldLog == null) return; @@ -1546,6 +1548,8 @@ public void copyOverOldUpdates(long commitVersion) { * @param commitVersion any updates that have version larger than the commitVersion will be copied * over */ + // checking whether prevTlog is the very same instance as oldTlog is intentional + @SuppressWarnings("ReferenceEquality") public void copyOverOldUpdates(long commitVersion, TransactionLog oldTlog) { copyOverOldUpdatesCounter.inc(); @@ -1701,7 +1705,8 @@ public void close(boolean committed) { close(committed, false); } - @SuppressWarnings("try") + // checking whether log is the very same instance as prevTlog/tlog is intentional + @SuppressWarnings({"try", "ReferenceEquality"}) public void close(boolean committed, boolean deleteOnClose) { try (Closeable c = releaseTlogDir) { recoveryExecutor.shutdown(); // no new tasks diff --git a/solr/core/src/java/org/apache/solr/update/processor/AllValuesOrNoneFieldMutatingUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/AllValuesOrNoneFieldMutatingUpdateProcessor.java index fb4a9de1d8ad..4fdaf40effc6 100644 --- a/solr/core/src/java/org/apache/solr/update/processor/AllValuesOrNoneFieldMutatingUpdateProcessor.java +++ b/solr/core/src/java/org/apache/solr/update/processor/AllValuesOrNoneFieldMutatingUpdateProcessor.java @@ -73,6 +73,9 @@ public AllValuesOrNoneFieldMutatingUpdateProcessor( */ protected abstract Object mutateValue(final Object srcVal); + // SKIP_FIELD_VALUE_LIST_SINGLETON and DELETE_VALUE_SINGLETON are unique sentinels, so identity + // comparison against them is intentional + @SuppressWarnings("ReferenceEquality") @Override protected final SolrInputField mutate(final SolrInputField srcField) { Collection vals = srcField.getValues(); diff --git a/solr/core/src/java/org/apache/solr/update/processor/AtomicUpdateDocumentMerger.java b/solr/core/src/java/org/apache/solr/update/processor/AtomicUpdateDocumentMerger.java index 3cdb07069802..26346e29437f 100644 --- a/solr/core/src/java/org/apache/solr/update/processor/AtomicUpdateDocumentMerger.java +++ b/solr/core/src/java/org/apache/solr/update/processor/AtomicUpdateDocumentMerger.java @@ -383,6 +383,9 @@ && isDerivedFromDoc( * false is returned. A false return indicates that this update can be re-tried as a full * atomic update. Returns true if the in-place update succeeds. */ + // RealTimeGetComponent.DELETED is a unique sentinel, so identity comparison against it is + // intentional + @SuppressWarnings("ReferenceEquality") public boolean doInPlaceUpdateMerge(AddUpdateCommand cmd, Set updatedFields) throws IOException { SolrInputDocument inputDoc = cmd.getSolrInputDocument(); diff --git a/solr/core/src/java/org/apache/solr/update/processor/DocBasedVersionConstraintsProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DocBasedVersionConstraintsProcessor.java index 48ecc0f7eedc..c2b77b1c52de 100644 --- a/solr/core/src/java/org/apache/solr/update/processor/DocBasedVersionConstraintsProcessor.java +++ b/solr/core/src/java/org/apache/solr/update/processor/DocBasedVersionConstraintsProcessor.java @@ -188,6 +188,9 @@ private void validateUserVersions( } } + // RealTimeGetComponent.DELETED is a unique sentinel, so identity comparison against it is + // intentional + @SuppressWarnings("ReferenceEquality") private DocFoundAndOldUserAndSolrVersions getOldUserVersionsFromFieldCache( BytesRef indexedDocId) { SolrInputDocument oldDoc = diff --git a/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessor.java index 8593294b6f2f..6e0485d62e45 100644 --- a/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessor.java +++ b/solr/core/src/java/org/apache/solr/update/processor/FieldMutatingUpdateProcessor.java @@ -132,6 +132,9 @@ public interface FieldNameSelector { * @return Either a new FieldNameSelector or one of the input selectors if the combination lends * itself to optimization. */ + // SELECT_ALL_FIELDS and SELECT_NO_FIELDS are unique sentinels, so identity comparison against + // them is intentional + @SuppressWarnings("ReferenceEquality") public static FieldNameSelector wrap( final FieldNameSelector includes, final FieldNameSelector excludes) { diff --git a/solr/core/src/java/org/apache/solr/update/processor/FieldValueMutatingUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/FieldValueMutatingUpdateProcessor.java index 1d81d6d84ed5..bdd8e458d17b 100644 --- a/solr/core/src/java/org/apache/solr/update/processor/FieldValueMutatingUpdateProcessor.java +++ b/solr/core/src/java/org/apache/solr/update/processor/FieldValueMutatingUpdateProcessor.java @@ -56,6 +56,9 @@ public FieldValueMutatingUpdateProcessor( */ protected abstract Object mutateValue(final Object src); + // DELETE_VALUE_SINGLETON is a unique sentinel, and mutateValue returns the same instance when + // the value is unchanged, so identity comparisons are intentional + @SuppressWarnings("ReferenceEquality") @Override protected final SolrInputField mutate(final SolrInputField src) { Collection values = src.getValues(); diff --git a/solr/core/src/java/org/apache/solr/update/processor/SkipExistingDocumentsProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/SkipExistingDocumentsProcessorFactory.java index b93d2ef25278..9f59d84c7b20 100644 --- a/solr/core/src/java/org/apache/solr/update/processor/SkipExistingDocumentsProcessorFactory.java +++ b/solr/core/src/java/org/apache/solr/update/processor/SkipExistingDocumentsProcessorFactory.java @@ -191,6 +191,9 @@ boolean isSkipUpdateIfMissing() { return this.skipUpdateIfMissing; } + // RealTimeGetComponent.DELETED is a unique sentinel, so identity comparison against it is + // intentional + @SuppressWarnings("ReferenceEquality") boolean doesDocumentExist(BytesRef indexedDocId) { assert null != indexedDocId; diff --git a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java index c408cfc33322..399ca385a02c 100644 --- a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java +++ b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java @@ -1585,6 +1585,8 @@ public void testGroupingOnDateField() throws Exception { + "]}}"); } + // groupComparator may be the very same instance as sortComparator; identity check is intentional + @SuppressWarnings("ReferenceEquality") @Test public void testRandomGrouping() throws Exception { /* diff --git a/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java b/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java index 2e190f60f89a..bee5e966f4fb 100644 --- a/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java @@ -55,6 +55,8 @@ private void createCollection(String collection) throws IOException, SolrServerE } } + // Comparing JettySolrRunner instances by identity is intentional: skip the exact same runner + @SuppressWarnings("ReferenceEquality") @Test public void testSimpleSliceLeaderElection() throws Exception { String collection = "collection1"; diff --git a/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java b/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java index 70db545fced4..d2c295af6739 100644 --- a/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java +++ b/solr/core/src/test/org/apache/solr/handler/TestStressThreadBackup.java @@ -127,7 +127,7 @@ public void testReplicationHandler() throws Exception { new BackupAPIImpl() { final BackupStatusChecker backupStatus = new BackupStatusChecker(coreClient); - /** no solrj API for ReplicationHandler */ + // no solrj API for ReplicationHandler private SolrRequest makeReplicationReq(SolrParams p) { return new GenericSolrRequest( GenericSolrRequest.METHOD.POST, @@ -137,10 +137,8 @@ private SolrRequest makeReplicationReq(SolrParams p) { .setRequiresCollection(true); } - /** - * Override default backup impl to hit ReplicationHandler, and then poll that same handler - * until success - */ + // Override default backup impl to hit ReplicationHandler, and then poll that same + // handler until success @Override public void makeBackup(final String backupName, final String snapName) throws Exception { final TimeOut timeout = new TimeOut(30, TimeUnit.SECONDS, TimeSource.NANO_TIME); diff --git a/solr/core/src/test/org/apache/solr/handler/admin/TestApiFramework.java b/solr/core/src/test/org/apache/solr/handler/admin/TestApiFramework.java index 101ee2a09b39..35c2d9a421ce 100644 --- a/solr/core/src/test/org/apache/solr/handler/admin/TestApiFramework.java +++ b/solr/core/src/test/org/apache/solr/handler/admin/TestApiFramework.java @@ -278,6 +278,9 @@ public InputStream getStream() { return rsp; } + // checks whether the given reqHandlers is the container-level handler bag instance, so + // identity comparison is intentional + @SuppressWarnings("ReferenceEquality") private SolrQueryResponse invoke( PluginBag reqHandlers, String path, diff --git a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java index 597e20445441..44690a5dd702 100644 --- a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java +++ b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java @@ -740,6 +740,8 @@ public QParser createParser( } @Test + // asserting that the core got a different schema instance after reload is intentional + @SuppressWarnings("ReferenceEquality") public void testSchemaPlugins() throws Exception { String COLLECTION_NAME = "testSchemaLoadingColl"; System.setProperty("managed.schema.mutable", "true"); diff --git a/solr/core/src/test/org/apache/solr/schema/TestManagedSchemaThreadSafety.java b/solr/core/src/test/org/apache/solr/schema/TestManagedSchemaThreadSafety.java index e4cb21568900..c08ce0a276ba 100644 --- a/solr/core/src/test/org/apache/solr/schema/TestManagedSchemaThreadSafety.java +++ b/solr/core/src/test/org/apache/solr/schema/TestManagedSchemaThreadSafety.java @@ -63,6 +63,8 @@ private SuspendingZkClient(String zkServerAddress) { .withTimeout(ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)); } + // comparing Thread instances by identity is intentional + @SuppressWarnings("ReferenceEquality") boolean isSlowpoke() { Thread youKnow; if ((youKnow = slowpoke.get()) != null) { diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java index ee6bd9b3543c..e5783488aa1e 100644 --- a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java +++ b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java @@ -3782,6 +3782,8 @@ public void doTestPrelimSortingDistrib(final boolean extraAgg, final boolean ext * @param extraSubFacet if an extra sub facet should be included, this hits slightly diff code * paths */ + // "same instance" check of shard clients in the single node case is intentional + @SuppressWarnings("ReferenceEquality") public void doTestPrelimSorting( final Client client, final boolean extraAgg, final boolean extraSubFacet) throws Exception { diff --git a/solr/core/src/test/org/apache/solr/search/function/AggValueSourceTest.java b/solr/core/src/test/org/apache/solr/search/function/AggValueSourceTest.java index 5946d4dc955d..ed54e9e3d670 100644 --- a/solr/core/src/test/org/apache/solr/search/function/AggValueSourceTest.java +++ b/solr/core/src/test/org/apache/solr/search/function/AggValueSourceTest.java @@ -44,6 +44,8 @@ static class CustomAggregate extends SimpleAggValueSource { super("customagg", vs); } + // request and searcher must reference the very same core instance, so identity is intentional + @SuppressWarnings("ReferenceEquality") @Override public SlotAcc createSlotAcc(FacetContext fcontext, long numDocs, int numSlots) { // check we can get access to the request and searcher, via the context diff --git a/solr/core/src/test/org/apache/solr/uninverting/TestFieldCacheSortRandom.java b/solr/core/src/test/org/apache/solr/uninverting/TestFieldCacheSortRandom.java index 3e9ee3b70b9b..d5c59a885ea3 100644 --- a/solr/core/src/test/org/apache/solr/uninverting/TestFieldCacheSortRandom.java +++ b/solr/core/src/test/org/apache/solr/uninverting/TestFieldCacheSortRandom.java @@ -351,6 +351,8 @@ public boolean equals(Object other) { return sameClassAs(other) && equalsTo(getClass().cast(other)); } + // docValues is compared by identity, matching System.identityHashCode use in hashCode() + @SuppressWarnings("ReferenceEquality") private boolean equalsTo(RandomQuery other) { return seed == other.seed && docValues == other.docValues && density == other.density; } diff --git a/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesStandalone.java b/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesStandalone.java index a589eafdf4c6..1b08a13b2862 100644 --- a/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesStandalone.java +++ b/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesStandalone.java @@ -1216,7 +1216,9 @@ public String toString() { * TestInPlaceUpdatesStandalone#HARDCOMMIT} or {@link TestInPlaceUpdatesStandalone#SOFTCOMMIT} * sentinel objects. */ - @SuppressWarnings({"unchecked", "rawtypes"}) + // HARDCOMMIT and SOFTCOMMIT are unique sentinels, so identity comparison against them is + // intentional + @SuppressWarnings({"unchecked", "rawtypes", "ReferenceEquality"}) public void checkReplay(final String valField, Object... commands) throws Exception { HashMap model = new LinkedHashMap<>(); diff --git a/solr/cross-dc-manager/gradle.lockfile b/solr/cross-dc-manager/gradle.lockfile index 829aa69a750e..8dac15d39e94 100644 --- a/solr/cross-dc-manager/gradle.lockfile +++ b/solr/cross-dc-manager/gradle.lockfile @@ -25,12 +25,11 @@ com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,error com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor com.google.code.gson:gson:2.14.0=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/licenses/error_prone_annotations-2.47.0.jar.sha1 b/solr/licenses/error_prone_annotations-2.47.0.jar.sha1 deleted file mode 100644 index e575c7fa4442..000000000000 --- a/solr/licenses/error_prone_annotations-2.47.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -e64e70c8e2b5a30ce7f1b6c9e3eb7016881e0411 diff --git a/solr/licenses/error_prone_annotations-2.48.0.jar.sha1 b/solr/licenses/error_prone_annotations-2.48.0.jar.sha1 deleted file mode 100644 index 542856c00911..000000000000 --- a/solr/licenses/error_prone_annotations-2.48.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -bbe30942a31d1778c74cb272321267eca82dc708 diff --git a/solr/licenses/error_prone_annotations-2.50.0.jar.sha1 b/solr/licenses/error_prone_annotations-2.50.0.jar.sha1 new file mode 100644 index 000000000000..a82027b404da --- /dev/null +++ b/solr/licenses/error_prone_annotations-2.50.0.jar.sha1 @@ -0,0 +1 @@ +74ba43e49ab1184d41634af2ef0047e82c4064b0 diff --git a/solr/modules/analysis-extras/gradle.lockfile b/solr/modules/analysis-extras/gradle.lockfile index 63202b0698ab..d021c29cbc33 100644 --- a/solr/modules/analysis-extras/gradle.lockfile +++ b/solr/modules/analysis-extras/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java b/solr/modules/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java index 6c2b57b12a9f..f4e71f197059 100644 --- a/solr/modules/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java +++ b/solr/modules/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java @@ -612,9 +612,7 @@ public void processAdd(AddUpdateCommand cmd) throws IOException { super.processAdd(cmd); } - /** - * Using configured NER model, extracts (name, type) pairs from the given source field value - */ + // Using configured NER model, extracts (name, type) pairs from the given source field value private List> extractTypedNamedEntities(Object srcFieldValue) throws IOException { List> entitiesWithType = new ArrayList<>(); diff --git a/solr/modules/clustering/gradle.lockfile b/solr/modules/clustering/gradle.lockfile index b63437fa85cd..7c918f3b5b81 100644 --- a/solr/modules/clustering/gradle.lockfile +++ b/solr/modules/clustering/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/cross-dc/gradle.lockfile b/solr/modules/cross-dc/gradle.lockfile index c6d796ef1929..e3d4a2df55eb 100644 --- a/solr/modules/cross-dc/gradle.lockfile +++ b/solr/modules/cross-dc/gradle.lockfile @@ -19,12 +19,11 @@ com.github.luben:zstd-jni:1.5.6-4=jarValidation,runtimeClasspath,runtimeLibs,tes com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/cross-dc/src/java/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessor.java b/solr/modules/cross-dc/src/java/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessor.java index 54ad07e3d243..462686ccdf25 100644 --- a/solr/modules/cross-dc/src/java/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessor.java +++ b/solr/modules/cross-dc/src/java/org/apache/solr/crossdc/update/processor/MirroringUpdateProcessor.java @@ -91,10 +91,8 @@ public class MirroringUpdateProcessor extends UpdateRequestProcessor { private final long maxMirroringDocSizeBytes; - /** - * The distributed processor downstream from us so we can establish if we're running on a leader - * shard - */ + // The distributed processor downstream from us so we can establish if we're running on a leader + // shard // private DistributedUpdateProcessor distProc; /** Distribution phase of the incoming requests */ diff --git a/solr/modules/cuvs/gradle.lockfile b/solr/modules/cuvs/gradle.lockfile index 34348e92f07b..4b38d844d271 100644 --- a/solr/modules/cuvs/gradle.lockfile +++ b/solr/modules/cuvs/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/extraction/gradle.lockfile b/solr/modules/extraction/gradle.lockfile index 01bc856b3b10..4e82cacd1eba 100644 --- a/solr/modules/extraction/gradle.lockfile +++ b/solr/modules/extraction/gradle.lockfile @@ -20,12 +20,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/fromtika/ToTextContentHandler.java b/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/fromtika/ToTextContentHandler.java index d4255fa2fb18..fd4665434351 100644 --- a/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/fromtika/ToTextContentHandler.java +++ b/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/fromtika/ToTextContentHandler.java @@ -78,6 +78,8 @@ public ToTextContentHandler(OutputStream stream) { * @param encoding output encoding * @throws UnsupportedEncodingException if the encoding is unsupported */ + // Constructor signature kept as-is from Tika's ToTextContentHandler public API + @SuppressWarnings("JdkObsolete") public ToTextContentHandler(OutputStream stream, String encoding) throws UnsupportedEncodingException { this(new OutputStreamWriter(stream, encoding)); diff --git a/solr/modules/gcs-repository/gradle.lockfile b/solr/modules/gcs-repository/gradle.lockfile index 0c315061638a..d78035d4a77b 100644 --- a/solr/modules/gcs-repository/gradle.lockfile +++ b/solr/modules/gcs-repository/gradle.lockfile @@ -40,12 +40,11 @@ com.google.cloud:google-cloud-core:2.71.0=compileClasspath,jarValidation,runtime com.google.cloud:google-cloud-nio:0.133.0=jarValidation,testCompileClasspath,testRuntimeClasspath com.google.cloud:google-cloud-storage:2.69.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath com.google.code.gson:gson:2.14.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.48.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/jwt-auth/gradle.lockfile b/solr/modules/jwt-auth/gradle.lockfile index 84a22cf5fd34..7c14e19f88cc 100644 --- a/solr/modules/jwt-auth/gradle.lockfile +++ b/solr/modules/jwt-auth/gradle.lockfile @@ -19,12 +19,11 @@ com.github.stephenc.jcip:jcip-annotations:1.0-1=jarValidation,testCompileClasspa com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/langid/gradle.lockfile b/solr/modules/langid/gradle.lockfile index 2502ddfff7ac..c187f32cc25d 100644 --- a/solr/modules/langid/gradle.lockfile +++ b/solr/modules/langid/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/language-models/gradle.lockfile b/solr/modules/language-models/gradle.lockfile index 38034aa07eb4..c4052b3c5e09 100644 --- a/solr/modules/language-models/gradle.lockfile +++ b/solr/modules/language-models/gradle.lockfile @@ -18,12 +18,11 @@ com.github.stephenc.jcip:jcip-annotations:1.0-1=compileClasspath,jarValidation com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/ltr/gradle.lockfile b/solr/modules/ltr/gradle.lockfile index 61fb4d30a835..3d7bbb269e27 100644 --- a/solr/modules/ltr/gradle.lockfile +++ b/solr/modules/ltr/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/ltr/src/java/org/apache/solr/ltr/feature/SolrFeature.java b/solr/modules/ltr/src/java/org/apache/solr/ltr/feature/SolrFeature.java index 37362c806425..f028b3f88527 100644 --- a/solr/modules/ltr/src/java/org/apache/solr/ltr/feature/SolrFeature.java +++ b/solr/modules/ltr/src/java/org/apache/solr/ltr/feature/SolrFeature.java @@ -135,6 +135,9 @@ protected void validate() throws FeatureException { public class SolrFeatureWeight extends FeatureWeight { private final Weight solrQueryWeight; + // Identity check is intentional: getDocSet() returns the cached liveDocSet instance when the + // filters do not narrow the result + @SuppressWarnings("ReferenceEquality") public SolrFeatureWeight( SolrIndexSearcher searcher, SolrQueryRequest request, diff --git a/solr/modules/ltr/src/java/org/apache/solr/ltr/model/LTRScoringModel.java b/solr/modules/ltr/src/java/org/apache/solr/ltr/model/LTRScoringModel.java index 21cca2288580..32f8a585a2a8 100644 --- a/solr/modules/ltr/src/java/org/apache/solr/ltr/model/LTRScoringModel.java +++ b/solr/modules/ltr/src/java/org/apache/solr/ltr/model/LTRScoringModel.java @@ -286,6 +286,8 @@ public void normalizeFeaturesInPlace(float[] modelFeatureValues) { } } + // Identity check against the IdentityNormalizer.INSTANCE singleton is intentional + @SuppressWarnings("ReferenceEquality") public Explanation getNormalizerExplanation(Explanation e, int idx) { Normalizer n = norms.get(idx); if (n != IdentityNormalizer.INSTANCE) { diff --git a/solr/modules/opentelemetry/gradle.lockfile b/solr/modules/opentelemetry/gradle.lockfile index 02eab7c04c66..561d08c34c54 100644 --- a/solr/modules/opentelemetry/gradle.lockfile +++ b/solr/modules/opentelemetry/gradle.lockfile @@ -20,12 +20,11 @@ com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,error com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor com.google.code.gson:gson:2.14.0=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/s3-repository/gradle.lockfile b/solr/modules/s3-repository/gradle.lockfile index 0ada32f8497f..e13e33f220fb 100644 --- a/solr/modules/s3-repository/gradle.lockfile +++ b/solr/modules/s3-repository/gradle.lockfile @@ -28,12 +28,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/scripting/gradle.lockfile b/solr/modules/scripting/gradle.lockfile index d9082b39a6e8..63457d56810a 100644 --- a/solr/modules/scripting/gradle.lockfile +++ b/solr/modules/scripting/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/sql/gradle.lockfile b/solr/modules/sql/gradle.lockfile index 33bace48ff61..144c3f1a14e5 100644 --- a/solr/modules/sql/gradle.lockfile +++ b/solr/modules/sql/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrAggregate.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrAggregate.java index 6ff6ff95a841..b1fb3c9c8b81 100644 --- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrAggregate.java +++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrAggregate.java @@ -55,6 +55,8 @@ static String solrAggMetricId(String metric, String column) { return String.format(Locale.ROOT, "%s(%s)", funcName, column); } + // Calcite convention: identity check against the CONVENTION singleton is intentional + @SuppressWarnings("ReferenceEquality") SolrAggregate( RelOptCluster cluster, RelTraitSet traitSet, diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrFilter.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrFilter.java index d43f1ae4c187..4b156d5dac3d 100644 --- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrFilter.java +++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrFilter.java @@ -77,6 +77,8 @@ String toQuery() { private final RexBuilder builder; + // Calcite convention: identity check against the CONVENTION singleton is intentional + @SuppressWarnings("ReferenceEquality") SolrFilter(RelOptCluster cluster, RelTraitSet traitSet, RelNode child, RexNode condition) { super(cluster, traitSet, child, condition); assert getConvention() == SolrRel.CONVENTION; diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrProject.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrProject.java index 835d4fea03ab..3a01b923c1e9 100644 --- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrProject.java +++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrProject.java @@ -31,6 +31,8 @@ /** Implementation of {@link org.apache.calcite.rel.core.Project} relational expression in Solr. */ class SolrProject extends Project implements SolrRel { + // Calcite convention: identity check against the CONVENTION singleton is intentional + @SuppressWarnings("ReferenceEquality") SolrProject( RelOptCluster cluster, RelTraitSet traitSet, diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSort.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSort.java index 82799d864a7d..92fde889e731 100644 --- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSort.java +++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSort.java @@ -33,6 +33,8 @@ /** Implementation of {@link org.apache.calcite.rel.core.Sort} relational expression in Solr. */ class SolrSort extends Sort implements SolrRel { + // Calcite convention: identity check against the CONVENTION singleton is intentional + @SuppressWarnings("ReferenceEquality") SolrSort( RelOptCluster cluster, RelTraitSet traitSet, diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTableScan.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTableScan.java index f2ae04e33fb2..0fda477fb3ab 100644 --- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTableScan.java +++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTableScan.java @@ -44,6 +44,8 @@ class SolrTableScan extends TableScan implements SolrRel { * @param solrTable Solr table * @param projectRowType Fields and types to project; null to project raw row */ + // Calcite convention: identity check against the CONVENTION singleton is intentional + @SuppressWarnings("ReferenceEquality") SolrTableScan( RelOptCluster cluster, RelTraitSet traitSet, diff --git a/solr/server/gradle.lockfile b/solr/server/gradle.lockfile index 91f9319929af..eb5d553837bf 100644 --- a/solr/server/gradle.lockfile +++ b/solr/server/gradle.lockfile @@ -16,12 +16,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=jarValidation,runtimeClasspath,solrCore -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,errorprone,jarValidation,runtimeClasspath,solrCore,testAnnotationProcessor +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,jarValidation,runtimeClasspath,solrCore,testAnnotationProcessor com.google.guava:guava:33.6.0-jre=annotationProcessor,errorprone,jarValidation,runtimeClasspath,solrCore,testAnnotationProcessor com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,errorprone,jarValidation,runtimeClasspath,solrCore,testAnnotationProcessor diff --git a/solr/solr-ref-guide/gradle.lockfile b/solr/solr-ref-guide/gradle.lockfile index 8390c0489471..d97255aa6bc2 100644 --- a/solr/solr-ref-guide/gradle.lockfile +++ b/solr/solr-ref-guide/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,errorprone,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,errorprone,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/solrj-jetty/gradle.lockfile b/solr/solrj-jetty/gradle.lockfile index ee98b0ed66b0..8700b29b8477 100644 --- a/solr/solrj-jetty/gradle.lockfile +++ b/solr/solrj-jetty/gradle.lockfile @@ -18,12 +18,11 @@ com.github.stephenc.jcip:jcip-annotations:1.0-1=compileClasspath,jarValidation com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=jarValidation,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/solrj-streaming/gradle.lockfile b/solr/solrj-streaming/gradle.lockfile index 90e6aabecd3f..a5a3f43a64f2 100644 --- a/solr/solrj-streaming/gradle.lockfile +++ b/solr/solrj-streaming/gradle.lockfile @@ -17,12 +17,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=jarValidation,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:33.6.0-jre=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath diff --git a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/comp/FieldComparator.java b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/comp/FieldComparator.java index 57f4f5da259a..b5c2ffc7e57e 100644 --- a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/comp/FieldComparator.java +++ b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/comp/FieldComparator.java @@ -106,7 +106,9 @@ public Explanation toExplanation(StreamFactory factory) throws IOException { * check only once - we can do that in the constructor of this class, create a lambda, and then execute * that lambda in the compare function. A bit of branch prediction savings right here. */ - @SuppressWarnings({"unchecked"}) + // leftComp == rightComp treats both-null and same-instance as equal, so identity comparison + // is intentional + @SuppressWarnings({"unchecked", "ReferenceEquality"}) private void assignComparator() { if (ComparatorOrder.DESCENDING == order) { comparator = diff --git a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/eq/FieldEqualitor.java b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/eq/FieldEqualitor.java index f17b62afc9a9..551f6482ba29 100644 --- a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/eq/FieldEqualitor.java +++ b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/eq/FieldEqualitor.java @@ -75,8 +75,10 @@ public Explanation toExplanation(StreamFactory factory) throws IOException { .withExpression(toExpression(factory).toString()); } + // leftComp == rightComp treats both-null and same-instance as equal, so identity comparison + // is intentional @Override - @SuppressWarnings({"unchecked"}) + @SuppressWarnings({"unchecked", "ReferenceEquality"}) public boolean test(Tuple leftTuple, Tuple rightTuple) { @SuppressWarnings({"rawtypes"}) diff --git a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/JavabinTupleStreamParser.java b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/JavabinTupleStreamParser.java index 5209d29e4be5..a9cdc4506e39 100644 --- a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/JavabinTupleStreamParser.java +++ b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/JavabinTupleStreamParser.java @@ -43,6 +43,8 @@ public JavabinTupleStreamParser(InputStream is, boolean onlyJsonTypes) throws IO this.fis = initRead(is); } + // END_OBJ is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") private boolean readTillDocs() throws IOException { if (isObjectType(fis)) { if (tagByte == SOLRDOCLST) { @@ -176,8 +178,9 @@ protected Object readObject(DataInputInputStream dis) throws IOException { } else return super.readObject(dis); } + // END_OBJ is a unique sentinel, so identity comparison against it is intentional @Override - @SuppressWarnings({"unchecked"}) + @SuppressWarnings({"unchecked", "ReferenceEquality"}) public Map next() throws IOException { if (!atDocs) { atDocs = true; diff --git a/solr/solrj-zookeeper/gradle.lockfile b/solr/solrj-zookeeper/gradle.lockfile index a2cfa3717501..64c59c5875b5 100644 --- a/solr/solrj-zookeeper/gradle.lockfile +++ b/solr/solrj-zookeeper/gradle.lockfile @@ -18,12 +18,11 @@ com.github.spotbugs:spotbugs-annotations:4.10.2=compileClasspath com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,compileClasspathCopy,jarValidation,runtimeClasspath,runtimeClasspathCopy,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy diff --git a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java index 4f0c3bb38366..492284d80873 100644 --- a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java +++ b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java @@ -1267,6 +1267,9 @@ class StateWatcher implements Watcher { collectionPath = DocCollection.getCollectionPath(coll); } + // associatedWatcher != this checks whether this watcher instance has been replaced, so + // identity comparison is intentional + @SuppressWarnings("ReferenceEquality") @Override public void process(WatchedEvent event) { // session events are not change events, and do not remove the watcher @@ -2014,6 +2017,9 @@ public Aliases getAliases() { * modifications, giving up after 30 seconds with a SolrException. The caller should understand * it's possible the aliases has further changed if it examines it. */ + // op.apply returning the same Aliases instance signals no modification is needed, so + // identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public void applyModificationAndExportToZk(UnaryOperator op) { // The current aliases hasn't been update()'ed yet -- which is impossible? Any way just // update it first. diff --git a/solr/solrj/gradle.lockfile b/solr/solrj/gradle.lockfile index 8fd70e35ffe7..d55d226ecf2e 100644 --- a/solr/solrj/gradle.lockfile +++ b/solr/solrj/gradle.lockfile @@ -19,14 +19,13 @@ com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,error com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor com.google.code.findbugs:jsr305:3.0.2=spotless865458226 -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.errorprone:error_prone_annotations:2.18.0=spotless865458226 -com.google.errorprone:error_prone_annotations:2.47.0=jarValidation,testCompileClasspath,testRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.googlejavaformat:google-java-format:1.18.1=spotless865458226 -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.1=spotless865458226 com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:guava-parent:32.1.1-jre=spotless865458226 diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateBaseSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateBaseSolrClient.java index 752e7131509d..85cd0ab0dc3c 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateBaseSolrClient.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateBaseSolrClient.java @@ -104,6 +104,8 @@ public boolean isEmpty() { return size() == 0; } + // backdoorE is a unique sentinel element, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public E poll(long timeout, TimeUnit unit) throws InterruptedException { E e = queue.poll(timeout, unit); if (e == null) { diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java index b67b665a5513..ba216b8bd586 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java @@ -353,7 +353,7 @@ public SolrParams getParams() { } } - /** Specific Collection API call implementations * */ + // Specific Collection API call implementations /** * Returns a SolrRequest for creating a collection diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java index 6ce10ef381b8..25efca328dd2 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java @@ -215,6 +215,8 @@ public List readIterator(DataInputInputStream fis) throws IOException { return List.of(); // bogus; already processed } + // END_OBJ is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") private void readDocs(DataInputInputStream fis) throws IOException { if (resultNamedList == null) resultNamedList = new NamedList<>(); diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/response/ResponseParser.java b/solr/solrj/src/java/org/apache/solr/client/solrj/response/ResponseParser.java index 9884d8a1ef57..76879d662f52 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/response/ResponseParser.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/response/ResponseParser.java @@ -34,6 +34,8 @@ protected ResponseParser() { assert validateContentTypes(); } + // identity check is intentional: getContentTypes() must return the same cached instance + @SuppressWarnings("ReferenceEquality") private boolean validateContentTypes() { Collection contentTypes = getContentTypes(); assert contentTypes == getContentTypes() diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/response/json/JsonMapResponseParser.java b/solr/solrj/src/java/org/apache/solr/client/solrj/response/json/JsonMapResponseParser.java index 2eb2d376e7ef..590a4b1e1b41 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/response/json/JsonMapResponseParser.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/response/json/JsonMapResponseParser.java @@ -40,7 +40,7 @@ public String getWriterType() { } @Override - @SuppressWarnings({"unchecked"}) + @SuppressWarnings("unchecked") public NamedList processResponse(InputStream body, String encoding) throws IOException { @SuppressWarnings({"rawtypes"}) Map map = null; diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java index 4071dd7527f9..d3bfaf7eee6b 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/routing/RequestReplicaListTransformerGenerator.java @@ -216,7 +216,7 @@ public void transform(List choices) { if (log.isDebugEnabled()) { log.debug( "Applied sorting preferences to replica list: {}", - choices.stream().map(T::toString).collect(Collectors.joining(",", "[", "]"))); + choices.stream().map(Object::toString).collect(Collectors.joining(",", "[", "]"))); } } } diff --git a/solr/solrj/src/java/org/apache/solr/common/SolrDocument.java b/solr/solrj/src/java/org/apache/solr/common/SolrDocument.java index 53a152cfcd55..20f8a8013087 100644 --- a/solr/solrj/src/java/org/apache/solr/common/SolrDocument.java +++ b/solr/solrj/src/java/org/apache/solr/common/SolrDocument.java @@ -254,7 +254,7 @@ public void visitSelfAndNestedDocs(BiConsumer consumer) { /** Expose a Map interface to the solr field value collection. */ public Map> getFieldValuesMap() { return new Map<>() { - /** Get the field Value */ + /* Get the field Value */ @Override public Collection get(Object key) { return getFieldValues((String) key); @@ -327,7 +327,7 @@ public String toString() { /** Expose a Map interface to the solr fields. This function is useful for JSTL */ public Map getFieldValueMap() { return new Map<>() { - /** Get the field Value */ + /* Get the field Value */ @Override public Object get(Object key) { return getFirstValue((String) key); diff --git a/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java b/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java index 7598e90fcbb8..287bf8a08cfb 100644 --- a/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java +++ b/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java @@ -47,6 +47,9 @@ public Object getCommandData() { return commandData; } + // identity check is intentional: returns null only when the root primitive is the passed-in + // default sentinel instance + @SuppressWarnings("ReferenceEquality") public String getStr(String key, String def) { if (ROOT_OBJ.equals(key)) { Object obj = getRootPrimitive(); diff --git a/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java b/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java index f47ff63b9805..8e25ec96371e 100644 --- a/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java +++ b/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java @@ -826,6 +826,8 @@ public void writeSolrInputDocument(SolrInputDocument sdoc) throws IOException { } } + // END_OBJ is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") public Map readMapIter(DataInputInputStream dis) throws IOException { Map m = newMap(-1); for (; ; ) { @@ -931,6 +933,8 @@ public void writeIterator(Iterator iter) throws IOException { writeTag(END); } + // END_OBJ is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") public List readIterator(DataInputInputStream fis) throws IOException { ArrayList l = new ArrayList<>(); while (true) { @@ -1237,6 +1241,8 @@ public void writeFloat(float val) throws IOException { daos.writeFloat(val); } + // END_OBJ is a unique sentinel, so identity comparison against it is intentional + @SuppressWarnings("ReferenceEquality") public boolean writePrimitive(Object val) throws IOException { if (val == null) { daos.writeByte(NULL); diff --git a/solr/solrj/src/java/org/noggit/JSONParser.java b/solr/solrj/src/java/org/noggit/JSONParser.java index 3a7d45e023ff..543098cec0e1 100644 --- a/solr/solrj/src/java/org/noggit/JSONParser.java +++ b/solr/solrj/src/java/org/noggit/JSONParser.java @@ -622,6 +622,8 @@ private int readExpDigits(CharArr arr, int lim) throws IOException { return BIGNUMBER; } + // arr != out is an intentional identity check: only copy when arr is not the shared out buffer + @SuppressWarnings("ReferenceEquality") private void continueNumber(CharArr arr) throws IOException { if (arr != out) arr.write(out); @@ -760,6 +762,8 @@ private void readStringChars2(CharArr arr, int middle) throws IOException { } } + // arr != out is an intentional identity check: only copy when arr is not the shared out buffer + @SuppressWarnings("ReferenceEquality") private void readStringBare(CharArr arr) throws IOException { if (arr != out) { arr.append(out); diff --git a/solr/solrj/src/test/org/apache/solr/common/util/TestFastWriter.java b/solr/solrj/src/test/org/apache/solr/common/util/TestFastWriter.java index 382c2093c98f..ad80d26e9550 100644 --- a/solr/solrj/src/test/org/apache/solr/common/util/TestFastWriter.java +++ b/solr/solrj/src/test/org/apache/solr/common/util/TestFastWriter.java @@ -32,6 +32,9 @@ public MemWriter(char[] tempBuffer, Random r) { this.r = r; } + // arr == buf checks whether the flushed array is the writer's own buffer instance so it can + // be stolen, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") @Override public void flush(char[] arr, int offset, int len) throws IOException { if (arr == buf && offset == 0 && len == buf.length) { diff --git a/solr/solrj/src/test/org/noggit/TestJSONParser.java b/solr/solrj/src/test/org/noggit/TestJSONParser.java index 3a6d475256a8..2fc879ee1664 100644 --- a/solr/solrj/src/test/org/noggit/TestJSONParser.java +++ b/solr/solrj/src/test/org/noggit/TestJSONParser.java @@ -396,6 +396,9 @@ public String toString() { }; // match parser states with the expected states + // exp == got matches the unique event sentinel objects (a, A, m, M, N, e), so identity + // comparison is intentional + @SuppressWarnings("ReferenceEquality") public static void parse(JSONParser p, String input, Object[] expected) throws IOException { for (int i = 0; i < expected.length; i++) { int ev = p.nextEvent(); diff --git a/solr/test-framework/gradle.lockfile b/solr/test-framework/gradle.lockfile index 79fc06523465..88b5af1a3f65 100644 --- a/solr/test-framework/gradle.lockfile +++ b/solr/test-framework/gradle.lockfile @@ -19,12 +19,11 @@ com.github.spotbugs:spotbugs-annotations:4.10.2=compileClasspath com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=compileClasspath,compileClasspathCopy,jarValidation,runtimeClasspath,runtimeClasspathCopy,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy com.google.guava:guava:33.6.0-jre=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,compileClasspath,compileClasspathCopy,errorprone,jarValidation,runtimeClasspath,runtimeClasspathCopy,testAnnotationProcessor,testCompileClasspath,testCompileClasspathCopy,testRuntimeClasspath,testRuntimeClasspathCopy diff --git a/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java b/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java index ca2c5657de8d..a4cd93cfc7f9 100644 --- a/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java +++ b/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java @@ -893,6 +893,8 @@ public static String compare(Object[] a, Object[] b, int flags, Map handle) { if (a == b) return null; if (a == null || b == null) return ":" + a + "!=" + b; diff --git a/solr/test-framework/src/java/org/apache/solr/JSONTestUtil.java b/solr/test-framework/src/java/org/apache/solr/JSONTestUtil.java index 08df42a6c8f3..802a3500a5e3 100644 --- a/solr/test-framework/src/java/org/apache/solr/JSONTestUtil.java +++ b/solr/test-framework/src/java/org/apache/solr/JSONTestUtil.java @@ -215,6 +215,8 @@ public boolean match(Object expected) { return match(); } + // same-instance fast path (also covers both-null), so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") boolean match() { if (expected == val) { return true; diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java index a608a18b09c0..1d840ac0ed35 100644 --- a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java +++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java @@ -469,6 +469,8 @@ public static void newRandomConfig() { randomizeNumericTypesProperties(); } + // identity check detects self-referential cause chains, so reference comparison is intentional + @SuppressWarnings("ReferenceEquality") public static Throwable getWrappedException(Throwable e) { while (e != null && e.getCause() != e && e.getCause() != null) { e = e.getCause(); @@ -2275,6 +2277,8 @@ public static void copySolrHomeToTemp(Path dstRoot, String collection) throws IO Files.copy(top.resolve("synonyms.txt"), subHome.resolve("synonyms.txt")); } + // same-instance fast path, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public boolean compareSolrDocument(Object expected, Object actual) { if (!(expected instanceof SolrDocument solrDocument1) @@ -2325,6 +2329,8 @@ public boolean compareSolrDocument(Object expected, Object actual) { } } + // same-instance fast path, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public boolean compareSolrDocumentList(Object expected, Object actual) { if (!(expected instanceof SolrDocumentList list1) || !(actual instanceof SolrDocumentList list2)) { @@ -2356,6 +2362,8 @@ public boolean compareSolrDocumentList(Object expected, Object actual) { return true; } + // same-instance fast path, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public boolean compareSolrInputDocument(Object expected, Object actual) { if (!(expected instanceof SolrInputDocument sdoc1) @@ -2430,6 +2438,8 @@ public boolean compareSolrInputDocument(Object expected, Object actual) { } } + // same-instance fast path, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public boolean assertSolrInputFieldEquals(Object expected, Object actual) { if (!(expected instanceof SolrInputField sif1) || !(actual instanceof SolrInputField sif2)) { return false; @@ -2576,6 +2586,9 @@ public static String randomXmlUsableUnicodeString() { return result; } + // waits until the registered searcher is the exact same instance as the newest searcher, so + // identity comparison is intentional + @SuppressWarnings("ReferenceEquality") protected static void waitForWarming(SolrCore core) throws InterruptedException { RefCounted registeredSearcher = core.getRegisteredSearcher(); RefCounted newestSearcher = core.getNewestSearcher(false); diff --git a/solr/test-framework/src/java/org/apache/solr/cluster/placement/Builders.java b/solr/test-framework/src/java/org/apache/solr/cluster/placement/Builders.java index 03cc95228387..89c65e191a0f 100644 --- a/solr/test-framework/src/java/org/apache/solr/cluster/placement/Builders.java +++ b/solr/test-framework/src/java/org/apache/solr/cluster/placement/Builders.java @@ -515,6 +515,9 @@ public ShardBuilder setLeader(ReplicaBuilder leaderReplicaBuilder) { return this; } + // leaderReplicaBuilder is expected to be one of the builder instances in replicaBuilders, so + // identity comparison is intentional + @SuppressWarnings("ReferenceEquality") public Shard build(SolrCollection collection) { ClusterAbstractionsForTest.ShardImpl shard = new ClusterAbstractionsForTest.ShardImpl(shardName, collection, Shard.ShardState.ACTIVE); diff --git a/solr/test-framework/src/java/org/apache/solr/embedded/JettySolrRunner.java b/solr/test-framework/src/java/org/apache/solr/embedded/JettySolrRunner.java index 653a001ff1d6..76b74e842204 100644 --- a/solr/test-framework/src/java/org/apache/solr/embedded/JettySolrRunner.java +++ b/solr/test-framework/src/java/org/apache/solr/embedded/JettySolrRunner.java @@ -553,6 +553,8 @@ private void retryOnPortBindFailure(int portRetryTime, int port) throws Exceptio * @param ioe An IOException that might wrap a BindException * @return A bind exception if present otherwise ioe */ + // guarding against a self-referential cause chain, so identity comparison is intentional + @SuppressWarnings("ReferenceEquality") Exception lookForBindException(IOException ioe) { Exception e = ioe; while (e.getCause() != null && !(e == e.getCause()) && !(e instanceof BindException)) { diff --git a/solr/test-framework/src/java/org/apache/solr/util/RevertDefaultThreadHandlerRule.java b/solr/test-framework/src/java/org/apache/solr/util/RevertDefaultThreadHandlerRule.java index 89778e80ae93..4912629e80dd 100644 --- a/solr/test-framework/src/java/org/apache/solr/util/RevertDefaultThreadHandlerRule.java +++ b/solr/test-framework/src/java/org/apache/solr/util/RevertDefaultThreadHandlerRule.java @@ -30,6 +30,9 @@ public final class RevertDefaultThreadHandlerRule implements TestRule { @Override public Statement apply(Statement s, Description d) { return new StatementAdapter(s) { + // detects whether ZK replaced the default handler instance, so identity comparison is + // intentional + @SuppressWarnings("ReferenceEquality") @Override protected void before() throws Throwable { if (!applied.getAndSet(true)) { diff --git a/solr/test-framework/src/java/org/apache/solr/util/SSLTestConfig.java b/solr/test-framework/src/java/org/apache/solr/util/SSLTestConfig.java index 9a62ecb2afba..88850be9180f 100644 --- a/solr/test-framework/src/java/org/apache/solr/util/SSLTestConfig.java +++ b/solr/test-framework/src/java/org/apache/solr/util/SSLTestConfig.java @@ -319,19 +319,19 @@ private static byte[] fillData(byte[] data) { /** SPI Used to init all instances */ private static final SecureRandomSpi NOT_SECURE_SPI = new SecureRandomSpi() { - /** returns a new byte[] filled with static data */ + // returns a new byte[] filled with static data @Override public byte[] engineGenerateSeed(int numBytes) { return fillData(new byte[numBytes]); } - /** fills the byte[] with static data */ + // fills the byte[] with static data @Override public void engineNextBytes(byte[] bytes) { fillData(bytes); } - /** NOOP */ + // NOOP @Override public void engineSetSeed(byte[] seed) { /* NOOP */ diff --git a/solr/webapp/gradle.lockfile b/solr/webapp/gradle.lockfile index 5a024c3cdc60..6170e4fa571f 100644 --- a/solr/webapp/gradle.lockfile +++ b/solr/webapp/gradle.lockfile @@ -16,12 +16,11 @@ com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.47.0=solrCore -com.google.errorprone:error_prone_annotations:2.49.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor -com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotation:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_annotations:2.50.0=annotationProcessor,errorprone,solrCore,testAnnotationProcessor +com.google.errorprone:error_prone_check_api:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.50.0=annotationProcessor,errorprone,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.35.0=annotationProcessor,errorprone,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,solrCore,testAnnotationProcessor com.google.guava:guava:33.6.0-jre=annotationProcessor,errorprone,solrCore,testAnnotationProcessor com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,errorprone,solrCore,testAnnotationProcessor